[python] for-else -> wtf?

superman feed na centrum.cz
Čtvrtek Duben 24 21:27:59 CEST 2008


Ahoj Štěpáne,

jednak je ten výraz čitelný, jednak ho lze snadno zjednodušit a dále 
zčitelnit, a v praxi člověk dbající na čitelnost použije spíš:

typedef void(*prazdna_funkce)();
prazdna_funkce(NULL)();

případně takto:

static_cast<void(*)()>(NULL)();

Nicméně je to výraz, a výraz může dosahovat obstojné složitosti i v 
Pythonu a jiných jazycích. Navíc je to výraz, jehož hlavním principem je 
přetypování a zachování správného statického typu, což je věc, kterou 
srovnávat s Pythonem s dynamickým typováním (za což Python platí 
pomalostí) je poněkud pasé. A navíc je to výraz neužitečný, k ničemu, je 
vhodný jenom k tomu, abyste uměle vyrobili chybu v programu a operační 
systém Vás odstřelil - nic jiného neudělá.

Zatímco tu kritizuji konstrukce Pythonu, a Ty jsou opravdu čím dál více 
IMHO vymýšleny k nečitelnosti. Čemuž se nedivím, Python je one man show, 
a když si key-man poněkud začne hrát, tak Python má smůlu.

A nezlobte se, základní konstrukce typu podmíněné přiřazení, select a 
další jsou v C (a mnoha dalších jazycích) podstatně čitelnější, než v 
Pythonu. Ale možná je to tím, že s Rossumem opravdu nesouzním - 
například mi hlava nebere, proč Rossum nemá nic proti else po cyklu (v 
tom je jedinečný, žádný jiný programovací jazyk neshledal tuto 
konstrukci užitečnou a nezbytnou), zatímco proti velmi užitečné 
konstrukci select (která je v obrovské spoustě jazyků, vlastně v 
naprosté většině) se brání jako zbytečné.

Miloslav Ponkrác


Stepan napsal(a):
>
> Ahoj Supermane,
>
> ohledne necitelnosti Pythonu a citelnosti C; urcite znas:
>
> (* (void(*)( ) ) 0) ( );
>
> autor A. Koenig, ktery k tomu rika: “Takovyhle vyrazy jsou OK, nebojte 
> se jich.”
>
> WTF?!
>
> Stepan
>



Další informace o konferenci Python