Vlákno názorů k článku Objektově orientované programování v Lua II od Petr Pitak - Zajimalo by me, proc v definici a pozdejsim...

  • Článek je starý, nové názory již nelze přidávat.
  • 5. 5. 2009 22:45

    Petr Pitak (neregistrovaný)
    Zajimalo by me, proc v definici a pozdejsim volani ma funkce new pred sebou operator ":" a ne "." .

    Vzdyt v tomto pripade je Complex spise jen modul, ne konkretni instance tridy. A pokud se koukam spravne, ani v tele funkce nevidim pouziti implictniho parametru self.

    Prehledl jsem neco ?
  • 5. 5. 2009 23:04

    Ksl (neregistrovaný)
    V Lua žádné instance třídy nejsou. :]
    z1 = Complex:new(1, 2)
    je vlastně totéž, co
    z1 = Complex.new(Complex, 1, 2)

    s tím, že ten "neviditelný" Complex v arglistu se na "volané" straně ignoruje. V zásadě je možné deklarovat funkci pomocí tečky a přitom ji volat pomocí dvojtečky i naopak, ale k čitelnosti by něco takového pochopitelně asi neprospělo.

    Je úplně jedno, jestli ji vytvořím ve tvaru Complex:new(real, imag) a volám z=Complex:new(1, 2) nebo ji jestli vytvořím ve tvaru Complex.new(real, imag) a volám z=Complex.new(1, 2).

    Osobně bych tady samozřejmě preferoval tečku, už jako takové "nakopnutí", ale funkční je oboje.

  • 5. 5. 2009 23:32

    Petr Pitak (neregistrovaný)
    Jasne, tak to si rozumime. Spatne jsem se vyjadril - vim ze v Lue nejsou tridy - myslel jsem to semanticky jako zpusob pouziti :).

    Jinak mate pravdu, ono to asi fakt vytvori jen ten prebytecny argument, to je to, co me zmatlo - proto jsem tam chtel dat tu tecku.
  • 6. 5. 2009 11:13

    Pavel Tisnovsky (neregistrovaný)
    Mate pravdu, u funkce new se skutecne parametr self nepouziva (instance objektu se jeste nevytvorila), take v prvni kapitole je konstruktor zadefinovan pouze s teckou. Pouziti dvojtecky je v tomto pripade spis kvuli zprehledneni programu - nemusi se premyslet ani u volani funkci/metod, kde pouzit tecku a kde dvojtecku, vzdy se pouzije dvojtecka (presneji, klidne je mozne "dvojteckove" metody volat i "s teckou", ale musi se rucne doplnit prvni parametr, jak uz predemnou napsal Ksl, popripade naopak mit zadefinovanou metodu s teckou a explicitnim selfem a volat i s dvojteckou).

    Pouziti dvojtecky v new ma samozrejme za nasledek velmi nepatrne prodlouzeni programu (kvuli predavani zbytecneho parametru), ale to bych si dovolil v takto vysokourovnovem jazyce ignorovat - ostatne i programatori v Jave/C++ vetsinou vsude pouzivaji "bezne" metody namisto statickych metod (v podstate funkci) i tam, kde ve skutecnosti nepotrebuji this :-)