Blog.nechutny.net

Blog o webu a IT.

Proč nemám rád Python

Ještě nedávno jsem nechoval takovou nenávist k žádnému jazyku, jako momentálně k Pythonu. Ano, občas jsem zavtipkoval na Javu, ale to byly vtípky spíše na programátory, kteří v tom prasí neoptimalizované aplikace. Prostě klasiky jako "Ťuk, ťuk" ... "Kdo tam?" ... (dlouhá pauza) ... "Java".

Ke změně došlo v momentě, kdy jsme se sešli na bytě všichni u školních projektů v Pythonu. Všichni jsme k Pythonu přišli od jiných jazyků - já například od C/PHP, a spolubydlící zas od Java, C++, PHP, Javascript atd. Všechny tyto jazyky mají zhruba stejnou syntax - komentář napíšu do /* ... */, obsah funkce, nebo podmínky zabalím do { ... } a podporují Unicode (i když Java má trochu problémy s 20 bity) a nebazíruje se na odsazení.

Asi s nejzásadnějším problém s jakým jsem se setkal byly reference. Ty jsou v Pythonu dosti nešťastné - prostě pokud funkce nic nevrací, tak jsou všechny její argumenty brány jako reference. Nepříjemné, pokud se jedná o delší funkci, ve které se napřed formátují získaná data a poté vypisují. Lehce se pak zapomene hodit na konec alespoň "zbytečné" return 0 a užijete si s tím spoustu legrace při debugování. Ve vysokoúrovňovém jazyce jako je Python se reference jistě nepoužívají zas tak často, aby byl ušetřený znak & ve výčtu argumentů funkce opodstatněný. Navíc i považuji verzi s & za mnohem lépe čitelnou.

Odsazení kódu uvnitř funkce, podmínky a pod. mi zas nečinila takové obtíže, protože i v ostatních jazycích svůj kód formátuji, aby byl dobře čitelný a pro odsazení používám tabulátor. Ten má tu výhodu, že si ostatní vývojáři prohlížející můj kód mohou ve většině IDE nastavit jak chtějí tabulátor zobrazovat. U mezer je ta možnost již méně častá. Tak trochu se tím vyhýbám programátorským svatým válkám tabulátory x mezery.

1940s: Various "computers" are "programmed" using direct wiring and switches. Engineers do this in order to avoid the tabs vs spaces debate.

O něco více mě iritovala absence post a preinkrementace. V několika funkcích jsem chtěl použít obvyklou konstrukci i++, která je častá a dobře čitelná. Řešením bylo použít i += 1, což je už trochu neobvyklé. Použití postinkrementace mi sedí lépe, protože je zažitou konvencí, kterou u Pythonu postrádám.

Další šíleností v Pythonu byl ternární operátor, který je opravdu exot. Ve zbytku jazyků na zeměkouli a asi i v těch jazycích co používají malí zelení mužíčci je to klasicky: (podmínka) ? (pokud platí) : (pokud neplatí), ale v Pythonu se setkáte s šíleností ve stylu:(pokud platí) if (podmínka) else (pokud neplatí). Asi je to dobré na čtení nahlas, ale pokud to píšete, tak budete jistě automaticky zkoušet první verzi z ostatních jazyků, pak budete zběsile googlit, zanadáváte si a když budete programovat příště, tak si jen budete pamatovat to googlení. Tak po týdnu si už konečně zvyknete na tuhle zrůdnost.

Chtěl jsem na závěr uvést alespoň nějakou drobnost, která se mi na Pythonu líbí, ale bohužel mě nenapadla žádná, co by v mnou používaných jazycích nebyla vyřešena lépe.