Vlákno názorů k článku Perličky: principy objektového programování od wayan - Rozumná praxe je přistupovat k objektům jako k...

  • Článek je starý, nové názory již nelze přidávat.
  • 8. 4. 2008 22:35

    wayan (neregistrovaný)

    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.

  • 18. 4. 2008 6:50

    Michal Svoboda
    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.