Tak zrovna věci jako "var csvImportOrderService = new CsvImportOrderService();" mi přijdou na první pohled podezřelé.
Proč říká jméno proměnné to samé, co jméno typu? Typ mi umí zobrazit i IDE. Kdyby se to jmenovalo "something" tak jako čtenář kódu vím to samé (pokud to nebudu editovat v notepadu).
To o tom objektu opravdu nemáme žádné další užitečné informace, kterýma by se některé z těch redundantních slov dalo nahradit?
No uz iba ze by ste to cital napriklad na GitHub-e alebo hocikde inde mimo IDE ze? Preco sa mame spoliehat na IDE? Staci to normalne pomenovat v danom kontexte aby to bolo zrozumitelne. Naviac IDE vam pri PISANI toho kodu dost pomoze aj s nazvami premennych. Znova: "1x piseme 100x citame".
Vo vasom priklade sa myslim nic nestane ak tu premennu nazvem napriklad "csvImport", vzdy lepsie ako cio.
> Naviac IDE vam pri PISANI toho kodu dost pomoze aj s nazvami premennych. Znova: "1x piseme 100x citame".
Vo vasom priklade sa myslim nic nestane ak tu premennu nazvem napriklad "csvImport", vzdy lepsie ako cio.
Tak na přesně tohle jsem narážel. Ano, tyhle ukecané názvy se velice jednoduše píšou, protože to IDE udělá za vás. Akorát to pak někdo bude muset 100x přečíst, jen aby se dověděl, že se nic nového nedozvěděl.
No to se pravděpodobně neshodneme. Nějaký CsvImportOrderService by se imo měl v nějakém velmi omezeném kontextu vytvořit, nakonfigurovat a pro zbytek programu by měl být schovaný za nějakým obecnějším rozhraním.
Takže v kontextu, kde má smysl existence nějaké proměnné typu "CsvImportOrderService" je i to naprosto stupidní "cio" lepší název.
Jo, ten "csvImport" je lepší než plný název, proti kterému jsem se vymezoval. Akorát bych dodal, že skoro všechno je lepší než ten plný název. Vlastně každé slovo z toho typu by mohlo stačit.
Když mi IDE nabídne 2-3 názvy, tak nemá žádné další info. Jen ten typ, co jsem napsal. Takže pokud tam nechci napsat nějaké dodatečné info já, tak dává smysl brát primárně tu nejkratší nabízenou možnost. Když už se čtenář nic nového nedozví, tak ať toho aspoň nemusí číst moc.
Proč říká jméno proměnné to samé, co jméno typu?
Pokud je to jedináček, nebo se v daném kontextu používá jenom jednou, pak je celkem logické, že se instance jmenuje stejně, jako třída, protože ta instance dělá přesně to samé, jako třída. A v daném kódu se to musí vyskytovat dvakrát jednoduše proto, že daný programovací jazyk nemá speciální podporu pro jedináčky nebo vytváření objektů bez tříd, ale simuluje se to pomocí běžných tříd.
Jo, ten "csvImport" je lepší než plný název, proti kterému jsem se vymezoval. Akorát bych dodal, že skoro všechno je lepší než ten plný název. Vlastně každé slovo z toho typu by mohlo stačit.
Nedá se to říct takhle obecně, záleží na kontextu. Respektive obecně by se dalo říct jenom to, že ten plný název je lepší, než cokoli jiného. Pokud jste v kontextu, kde se řeší jen import objednávek z CSV, můžete to nazvat třeba importService
, nebo dokonce jen service
. Nazvat to jenom csvImport
bude špatně prakticky vždy, protože tam, kde s touto instancí služby budete pracovat, budete pracovat nejspíš i s daty. A z csvImport
pak nepoznáte, zda je tam služba nebo data.
Takže pokud tam nechci napsat nějaké dodatečné info já, tak dává smysl brát primárně tu nejkratší nabízenou možnost. Když už se čtenář nic nového nedozví, tak ať toho aspoň nemusí číst moc.
Název neslouží jen k tomu, aby se z něj čtenář něco nového dozvídal, ale také k tomu, aby od sebe odlišil různé objekty.
Argument „aby toho čtenář nemusel číst moc“ je úplně mimo a svědčí to jen o absolutní neznalosti toho, jak lidé vnímají informace. Podívejte se na lidský jazyk, kolik je tam redundance – všechna česká slova byste s obrovskou rezervou nacpal do čtyřpísmenných slov, přitom průměrná délka českého slova je 5 znaků a jsou slova mnohem delší. S hláskami to je v zásadě stejné. Nemyslíte si, že by se za ty desítky tisíc let evoluce jazyků vyvinul úspornější jazyk, kdyby to z hlediska lidského vnímání dávalo smysl?
Lidé, kteří umí číst, nečtou slova po písmenkách, čtou je jako obrázky – jako celek nebo po větších částech. Delší název (třeba csvImportOrderService
) tedy čtení neztěžuje, naopak ho usnadňuje, protože takový název bude typicky výrazně odlišný od jiných názvů ve stejném kontextu.
Já bych teda byl hodně opatrný s paralelama mezi programováním a přirozeným jazykem. Je to "csvImportOrderService" slovo, nebo sousloví?
Protože třeba opakování stejných sousloví nebo frází znova a znova se v přirozeném jazyce snažíme hodně vyhýbat. A jestli slovo, tak takhle složitá slova používají běžně snad jenom němci. A takoví francouzi vám snad udělají i zkratku z delší zkratky.
Vemte si, že kdybych měl v textu několikrát napsat třeba "Filip Jirsák", tak místo toho automaticky sáhnu po jednom z nejkratších slov "on". I při psaní slohu mi vtloukali do hlavy, ať se pokud možno neopakuju. Většina smluv na prvních stránkách definuje nějaké zkrácené identifikátory, které se používají ve zbytku textu.
To neopakování stejných slov ale platí pro publicistiku a beletrii a je to pro to, aby text byl zajímavější. V odborných textech se naopak slova záměrně opakují, protože když pro něco zavedete termín, používáte pořád ten jeden termín. Zdrojový kód počítačového programu nemá být zajímavý a čtivý, má být čitelný a přesný. Ty smlouvy nedefinují zkrácené identifikátory zkratkami a rozhodně je nedefinují tak, aby mohlo dojít k jejich záměně.
Pracuji 8 let jako softwarový inženýr, specializuji se na backend a Javu. Na Root.cz jsem aktivní již 20 let. Jsem fanda do Unixu, který denně v práci použivám.