to plati i pro soucasne operatory. Napriklad me neprijde operator @ pro maticove nasobeni citelny, protoze je uplne mimo resenou oblast. Klidne bych tady pouzil stary dobry × . Podobne zapis mod, in nebo vsechno s neg by klidne sel napsat operatorem a asi by to kazdej pochopil.
6. 6. 2024, 12:07 editováno autorem komentáře
Ale to přece nedává smysl - "standardní" +/* jsou použité nad nějakým fieldem (grupou, ... jiným algebraickým objektem) - definovat je u objektů, které s danou operací okruh/grupu/těleso netvoří (jako ty jmenované vektory) moc smysl nedává a opravdu by bylo vhodné použít jinou syntaxi.
(jo, tam kde je to jednoznačné jako + u stringů, tak samozřejmě ano)
Napríklad tvorcom APL alebo Numpy to zmysel dáva. Keď jeden operand je skalár.
A naozaj to dáva zmysle pre reťazce? Podľa mňa iba v prípade, že je vo všeobecnom povedomí, že ide o pripojenie obsahu jedného objektu k obsahu druhého objektu a nie o sčítanie jednotlivých prvkov na zodpovedajúcej pozícii v jednotlivých sekvenciách, ako by si človek mohol prvoplánovo myslieť na základe zahmlených znalostí z matematiky.
Ale to je v poriadku, ide o to povedomie, toto špecifikum je známe ľuďom, ktorí s tým pracujú a podobne iné špecifiká sú známe iným ľuďom, ktorí s nimi pracujú. Alebo by aspoň mali byť.
Predstvte si, ze uvidite takyto kod:
tmp << strm;
tmp += aEnd;
ked clovek nie je hlboko ponoreny v kode, tak to nema sancu pochopit, hlavne ked vsteky 3 premenne su nejake custom typy.
No bezne som videl aj horsie priklady ked tam bolo pomaly viac operatorov a metod.
Radsej by som tam videl normalne volania metod/funkcii, ktore maju zrozumitelne meno. Ale zas pretazenie operatorov, ktore sa bezne pouzivaju v algebre na zhodne algebraicke operacie je OK.
Lenže človek má byť hlboko ponorený v kóde, keď s ním chce pracovať.
Ten kód si teda predstavujem. Vidím, že strm je na pravej strane, prvoplánovo ma napadne, že je to buď nezmysel, a strm má byť na ľavej strane a operátor má byť otočený, ale radšej si pozriem dokumentáciu alebo zdrojový kód. V súčasnosti stačí často prejsť myšou nad niektorý z operandov a niečo sa zobrazí.
Operátory sú vynikajúci spôsob ako vytvoriť DSL a písať v ňom, teda vlastne písať špeciálnym jazykom v kóde vo všeobecnom jazyku, čím môže vzniknúť veľmi elegantný a prehľadný kód bez opakujúceho sa balastu, ktorý svojim objemom iba zatieňuje vzťahy medzi objektmi.
Samozrejme, dá sa to iba v rámci možností a pravidiel daného primárneho jazyka.
Pokiaľ to človek nerešpektuje a neobťažuje sa naštudovať si na čo sa vlastne pozerá, tak sa nedá čudovať, že neuspeje. Ale to nie je chyba toho jazyka.
A bez přetěžování operátorů by tam bylo co? Dokážu si představit třeba
tmp.set( strm );
tmp.add( aEnd );
Zákaz přetěžování operátorů rozhodně autora nedonutí k nějakému srozumitelnému pojmenovávání. Operátory jsou jen standardní krátká jména, která mají celkem ustálený význam. Když autor kódu použil ty operátory v jiném významu, tak to vypadá že se snažil šetřit znaky. Takže bych čekal, že bude šetřit znaky i u jiných jmen funkcí.