Ahoj,
Hloupy python bez typove kontroly.
V jakych jazycich jsi neco vetsiho psal?
Souvisi otazka nejak s predchozim radkem? Pisi v C/C++, pythonu, php, jave,
perlu, sh, jeden hrih z mladi jsem napsal i v m4. Kazdy jazyk je dobry na neco,
python je hloupy na vetsi projekty, ktere jsem si prave stahnul a chci ho
rychle pochopit a rychle mu pridat nejakou funkcionalitu kterou nema, ale ja
bych chtel aby mel (neboli si ho 'ohnout').
Dovolim si tvrdit, ze pro takovy ucel je C/C++ mnohem vhodnejsi nez python.
(ale je to imho, treba me svymi dobrymi argumety presvedcis, ze jsem neco
prehledl a je to ve skutecnosti naopak, zatim se tak nestalo) .
To pred kazdym zavolanim metody, nebo pristupu k promene objektu se poptas
toho objektu jestli takovou metodu ma? Jestli chapu EAFP, tak tvrdi ze
se zeptat programatora na povoleni, je lepsi prosit uzivatele o
odpusteni, >
zajimave.
Predne, v Pythonu neexistuji promenne, pouze nazvy (names). Sam jsem se
upsal
v minulem postu. A k te ironii: Ty sis neceho takoveho v pythonskem kodu
vsiml? Vyznam jsem popisoval o odstavec niz. EAFP spravne myslim nechapes.
http://en.wikipedia.org/wiki/Python_syntax_and_semantics (hledej EAFP)
Ok, nehadam se, ze pouzivatni vyjimek misto if/else muze zvysovat citelnost
kodu. Hadam se, ze nepouzivani typove kontroly (tedy to co muze odhalit
kompilator) zvysuje moznost chyby a odsouva jeji projevy a odhaleni az
do doby, kdy na dany kod prijde rec.
Chtel bych videt jak se snazis v idealnim pythonovskem programu nalez
chybu
kdyz se snazis pochopit radek typu:
class C:
...
Nazev C je doufam jen tvuj priklad.
...
self.html.body.first.content = 'nazdar'
Kdybych tohle videl, rekl bych si, ze autor chce nastavit prvni (zrejme
textovy) potomek uzlu BODY dokumentu self.html v nejake strukture podobne
DOMu.
Ok, myslel jsem ze z toho jasne, ze z toho nemusi byt az tak moc jasne
o co jde, ale zda se ze to jasne nebylo. Skutecny radek, nad kterym jsem
stravil dve hodiny a ktery vyprovokoval muj prvni post, byl radikalne
jednodussi:
neco = req.href.wiki()
(nejde o DOM) req byl arumet aktualni metody, A ano, bylo mi jasne, ze to bude
asi nejaky request, a href je *asi* asi url toho dotazu, ale uz mi nebylo tak
jasne co *presne* znamena wiki() a hlavene kde se jeji hodnota vezme, i kdyz
jiste tuseni jsem mel, chtel se podivat na ten kus kodu a rici si 'jasne to se
dalo cekat'. Ke zmateni navic prispelo, ze v celych zdrojacich nebylo nikde
'def wiki', protoze tuto metodu, (jak se ukazalo) pridal nekdo dynamicky, aby
(cituji primo ze zdrojaku):
In common usage, it may *improve readability* to use the function-calling
ability for the first component of the URL as mentioned earlier:
(ztucneni pridano vitasem)
... a vidisto, bingo, mas pravdu, nakonec to je i v te dokumentaci, ale
naprosto nemozne dohledate. Tak to me rozladilo, no.
Princip tvorby OO programu prece je, ze pomoci objektu na nizsi urovni
vytvaris abstraktnejsi vrstvy tak, aby kod na vyssi urovni byl co
nejstrucnejsi a nejpopisnejsi.
Right. A jak to souvisi s tim, ze bez typove kontroly je to cele mene citelne?
Nebo jinak: stacilo by jakeho typu je objekt te nejvyssi urovne. A nerikej, ze
to nepotrebujes vedet. Nebo jen doufas, ze tuto
metodu nekdo zavola s objektem ktery bude mit *nahodou* atribut href a ten
wiki(). Ne, kdyz jsi to psal, chtel jsi (alspon jsi v to tajne doufal), aby ti
to volali s Requestem nebo nejakym jeho potomkem, nebo nejakou jeho
implementaci. Jinak se imho nebavime o OO, ale o asmebleru.
Kdybys rekl: ok psal to jsem a myslel jsem pri tom na Request, ale v
podstate se to muze zavolat s cimkoli co ma atribut 'href' a metodu 'wiki()' a
bude to fungovat. Ale kdyby nekdo jiny chtel takovy objekt (se kterym se to
da zavolat) naprogramovat, by musel projit vsechny zdrojaky, aby zjistil co
vsechno od argumentu 'req' ocekavas, aby ho mohl korektne naimplementovat.
Jestli na to reknes, ze vlastnosti 'req' by mely byt specifikovany v
documentstringu, pak python vlastne *je* jazyk s typovou kontrolou, kterou
vsak nedela kompilator, ale programator. Nejak nemohu porozument tomu, ze
*tohle* se nekomu na pythonu libi.
Takze nejdrive se podivas, co asi tak muze byt self.html, v __init__ se
proste nedozvis zadny hint, ...
Mne by byl vyznam ukazaneho radku jasny a dal bych nepatral.
Dekuji demovi, ze se ktomu jiz vyjadril, nenapsal bych to lepe.
Mimochodem, slysel jsi neco o rozhranich (interfaces) v Pythonu?
Ano, dekuji za optani. Ale to prece skvely rys, ktery odstranuje snad posledni
argumet proc by typova kontrola mela chybet.
IOW: Proste metody predpokladaji urcite schopnosti u predavanych
objektu.
Ale z pouheho nazvu metody nemuze byt proste jasne, co vsechno ostatniho
musi predavane objekty splnovat, aby byly takove jake autor ocekava.
Ne nazvu metody, ale z kombinace jejiho nazvu a nazvu tech parametru. Pokud
je program slozitejsi, byva typ nebo nazev rozhrani tech argumentu v
docstringu dane metody.
Ale jo. Stare progratorske prislovi rika, ze v kazdem programovacim jazyce se
da programovat v Cobolu. A myslim, ze to funguje i naopak.
Problem je, ze to mozna az tak nikdo nedela. Nebo lepe receno: tomu autorovi
(ktery proste napsal vetsinu projektu a chape veskerou jeho strukturu) proste
jeste neni divne kdyz treba nezdokumentuje, ze req je typu Request, protoze to
je prece nabiledni. Ale kdyz k tomu prijde clovek uplne neznaly, chtejici jen
drobou zmenu, ma dve moznosti: bud pochopit cely projekt, nebo se pustit do
detektivniho nervy drasajiciho vysetrovani a pote se odreagovat na DoVetru.
vitas
@;;
|