Vlákno názorů k článku Perličky: objektové výjimky od wayan - Na další pokračování článku mě upozornil kolega. Zarazil...

  • Článek je starý, nové názory již nelze přidávat.
  • 15. 7. 2008 16:00

    wayan (neregistrovaný)

    Na další pokračování článku mě upozornil kolega. Zarazil jsem se už na první ukázce:

    sub rada { 
    	my $max = shift // 0;
    	croak "Parametr musi byt kladny" if $max " = 0; 
            local ($\, $,) q/ /); 
            print (1 .. $max); 
    }; 
    

    Operátor // je sice elegantní, ale poměrně nový, přidaný až v Perlu 5.10, to znamená, že uživatelé se staršími Perly si nevrznou. Navíc děláte zbytečně flexibilní rozhraní, defaultní hodnota horní meze nemá smysl.

    local ... je nesmyslná masáž ega. Co chcete udělat? Vytisknout všechny prvky řady oddělené mezerami a za ně znak konce řádku, což je: print join(' ', 1 .. $max), "\n"; Proč na to používat obskurní globální proměnné, jejichž význam je nutné dohledávat v manuálu a kvůli "čistotě" je lokalizovat? Ženský s tím neohromíte a mě taky ne :-)

    Za "normálními" subroutinami se většinou nepíše středník - prohlédněte si svoji instalaci Perlu. Je to sice hloupost, ale zbytečně nutíte čtenáře k přemýšlení typu: "... nikdo tady středníky nepíše, autor k tomu má jistě nějaký důvod. Ale jaký?"

  • 15. 7. 2008 17:41

    Michal Svoboda
    Dekuji za pripominky. Vemu to odzadu. Strednik je tam navic. Jak rikate je to hloupost, ale jelikoz jste si toho vsiml tak zde mate odpoved: neni to zadna konspirace, nejspis jsem na nej zapomnel pri nejakem testovani :-)

    Local... neni masaz ega, ale prvni vec ktera me napadla. Mate pravdu, join by se asi hodil vic. Priste to muzu napsat tak. Za $\ ja ale hlavy netrham, jsou i brutalnejsi veci.

    Nakonec jsem si nechal defined-or a vubec novinky perlu 5.10. Zde musim nesouhlasit. Ackoliv je tato verze venku jiz pomerne dlouho, chapu, ze spousta lidi ma stale starsi verzi 5.8. Proto na takovou vec upozornim (v pripade // to bylo v nekterem z minulych dilu, kde jsem to poprve pouzil). Na druhou stranu je ale skoda, abych to kvuli tomu nepouzival vubec. Naopak, chci, aby se novinky verze 5.10 dostaly do povedomi, a proto je pouzivam vsude, kde to ma smysl. (Viz take pouziti ~~ nekolik radku pod tim.)

    Snad Vas tyto drobne chyby neodradily od cteni celeho clanku a tudiz mohu odvodit ze tento je co se tyce tematu samotneho (vyjimky) v poradku :-)
  • 15. 7. 2008 18:48

    wayan (neregistrovaný)

    Jenomže defined-or tady smysl nemá a naopak je matoucí:

    sub rada {
    my $max = shift // 0;
    die bless {}, 'Rada::ZapornyParametr' if $max "= 0; .... 
    }
    

    Zavolám rada(), dostanu výjimku Rada::ZapornyParametr a ... budu se drbat na hlavě

    Asi by bylo logičtější něco v duchu:

    sub rada {
       die bless {}, 'Rada::ZadnyParametr' if !@_;
       my $max = shift;
       ...
    }
    
  • 15. 7. 2008 21:36

    Michal Svoboda
    To je spravny postreh a dokonce k tematu. Urcite by to tak bylo lepsi. Akorat kdyz uz se bavime o citelnosti, tak bych ty dva radky vymenil a dal tam unless defined $max.