Slovo "procedurální" je v dnešní době tak vágně definované, že bych s ním radši moc nemachroval.
Potazmo kazdy dalsi termin je definovan stejne vagne a vyjadrit svuj nazor byva cim dal tim tezsi. Zvlaste pak pokud nejsem zrovna expert v teorii o rozdeleni programovacich jazyku.
Odpovidal jsem spise na "nejlepsi je" nez na "programovat objektove" a chtel jsem vyjadrit starou znamou pravdu, ze nejlepsi neni nic, ale ze zalezi na ucelu.
Rozumná praxe je přistupovat k objektům jako k objektům ("atributům" přes accessory) a mimo konstruktor zapomenout na implementaci, to znamená $self->kocka->jmeno místo $self->{kocka}->{jmeno}. Jistě namítnete, že by to na úvodní lekci bylo příliš, bohužel ze spousty programátorů v Perlu už rovnici objekt = hash nikdy nedostanete.
Hnida, nicméně nedá mi to. Považuji za dobrý zvyk na úvod metody vytáhnout a pojmenovat parametry:
sub new { my ($class, $jmeno, $kocka) = @_; my $self = $class->SUPER::new($jmeno); $self->{'kocka'} = $kocka; return $self; }
Další hnida. Naučíte-li čtenáře používat and místo "normálního" &&, začnou psát věci jako:
my $is_between = $i >= $min and $i <= $max;a budou se drbat na hlavě.
Tohle je na flamewar, ale občas je na místě ternární operátor místo podmínky. Vy totiž nechcete rozvětvit běh programu, ale vyhodnotit výraz:
# mimochodem je-li v kocce neco, proc to jeste testovat na referenci? sub projev { my $self = shift; return $self->SUPER::projev() . ( ref $self && $self->kocka ? 'na kocku jmenem '. $self->kocka->jmeno : ', nejlepe na kocky' ); }
Jaký smysl má test na objekt v DESTROY? Takový případ vznikne jen tehdy, pokud bude někdo destruktor volat explicitně jako metodu třídy. Nicméně, volá-li ho explicitně, pak mu není pomoci a je to špatně i když ho volá jako metodu objektu.
Rozumná praxe je přistupovat k objektům jako k objektům ("atributům" přes accessory)
To mate pravdu. Ale jelikoz toto jsou spise blessovane hashe nez objekty, tak je to zbytecna prace. Stejne bude nakonec na uzivateli, zda accessor pouzije, nebo ne. Jina je situace v inside-out objektech (viz dalsi clanek), kde accessory jsou nutnost, jelikoz primy pristup k polozkam neexistuje.
Považuji za dobrý zvyk na úvod metody vytáhnout a pojmenovat parametry
Opet mate pravdu, ale opet jsem tomu nevenoval velkou pozornost zejmena z duvodu ze se jedna o spise teoreticky clanek a skolni priklad. Uplne nejlepsi by bylo udelat to stylem my ($class) = shift; my %args = (defaultni => hodnoty, @_)
a pouzivat pojmenovane parametry, aby si nikdo nemusel pamatovat, co je prvni a druhej parametr konstruktoru.
my $is_between = $i >= $min and $i >= $max;
Takovouto botu by vychytal use warnings
. Pokud by se ctenar chtel odemne ucit konkretni praktiky psani kodu, tak at se radeji nauci prave pouzivat warningy a k tomu pouziva svuj vlastni styl (pokud mozno citelny).
ternární operátor místo podmínky
Zde mate take pravdu a dokonce nemam ani namitek. Ve starsi verzi projev
to tak i je. Proc je tam pak dal if, to nevim, ale asi to bylo tak, ze jsem tam mel puvodne vice prikazu, ktere jsem casem smazal.
Jaký smysl má test na objekt v DESTROY?
Ten pripadne muze byt vypusten, take pravda.