Hloupy python bez typove kontroly.
V jakych jazycich jsi neco vetsiho psal?
Souvisi otazka nejak s predchozim radkem?
Dal jsem otazku k Tvemu prvnimu vykriku. Zajimalo me, s kym se bavim.
(ale je to imho, treba me svymi dobrymi argumety presvedcis, ze jsem neco
prehledl a je to ve skutecnosti naopak, zatim se tak nestalo) .
Nemam potrebu nejak (vic) argumentovat. Jednak me to stoji cas a nevidim
smysl v evangelizovani pro jednotlivce, ktery od pocatku stoji ve spise
bojovne opozici (nic ve zlem!). Za druhe, nepovazuji Python za dokonaly a
vsespasny. A za treti, i po letech pouzivani Pythonu nejsem zcela rozhodnuty,
jestli mas nebo nemas pravdu.
Chces-li diskuse, na Netu se jich na toto tema valeji stovky s ucastniky
zkusenejsimi nez jsem ja.
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.
Je tu jeden zajimavy aspekt.
(Nejen) podle meho nazoru a praxe to silne zvysuje procento testovani
programatorem behem psani. Mnoho prgacu v C/C++ (i Jave?) ma tendenci k
pristupu "Ha! Zkompilovalo se to, dalo to hodne prace! Rychle to vydejme, nez
se to zase rozbije."
Tvrdim (z vlastni zkusenosti), ze pythonsky kod je mnohem vice protestovany
na cilovou funkcnost, protoze od prvnich napsanych radek neco dela. Je to
velmi vdecny jazyk (a taky proto tvrdim, ze
http://sandbox.cz/~tuttle/docs/prvni-jazyk-python.html). Pythonsky program
proste pusobi radost od prvnich chvil. V C/C++ (Jave?, nemam tolik zkusenosti)
pises den, pises dva a na sklonku tretiho teprve zablika Hello. A kdyz v tu
chvili udelas make clean all a nevybehne zadny error (warning, pro nas
peclivejsi), pripadas si, jakoze mas hotovo... (nemluvim osobne)
O sobe poznamenavam, ze rad pouzivam prostredky jazyka, ktere se mi nabizi. V
programu v C (C++ me odpuzuje) navrhuju strukturu typu a dbam na warningy, v
Jave se mi libi jeji striktnost i napriklad registrovane vyjimky, ktere muze
funkce hazet. Python jsem si zamiloval pro jeho svobodu a efektivitu psani.
Skutecny radek, nad kterym jsem stravil dve hodiny a ktery vyprovokoval muj
prvni post, byl radikalne jednodussi:
neco = req.href.wiki()
Souhlasim s Tebou zcela, autor byl lenoch. V nazvu "wiki" mi chybi sloveso,
kdyz je to metoda. Neco by se mozna dalo odhadnout i z nazvu cile (zde "neco").
Kdyz jsem ve Tve situaci pred neznamym kodem, tak hodne ho ctu, abych
pochopil vazby mezi tridami a pak taky pouzivam ladici vypisy (Python je dost
ukecany -- vse ma sve __repr__ a dir). Velmi mocna vlastnost je natazeni
"neznameho" modulu do promptu >>> a zive zkoumani.
In common usage, it may *improve readability* to use the function-calling
ability for the first component of the URL as mentioned earlier:
Z citovaneho jsem nepochopil autoruv zamer. Nenalezeni "def wiki" by me
rozladilo uplne stejne jako Tebe. Kdyby mi na programu zalezelo, musel by se
do nej ponorit hloubeji a sireji, jako ses nakonec ponoril i Ty. A bud bych
vyznam dodani metod v runtimu objevil a autorovi schvalil nebo by me to
stvalo stale.
Obecne si myslim, ze takova vec potreba neni, ale nevylucuju, ze muze byt
elegantnim resenim. Ja sam se snazim psat kod takovy, aby v nem ctenar nasel
to, co ocekava.
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?
To byla reakce na ten radek self.html.body.first.content. Ze vyssi objekty za
pomoci tech nizsich ve strukture aplikace se snazi vytvorit vysokourovnovy
jazyk podobny lidskemu ("obsah prvniho ditete tela html dokumentu instance").
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.
Mnohym se to nelibi a dobrovolne zavedli interfacy a asserty na ne. Do Pythonu
3000 se chysta _moznost_ napsat do def metody jeji signaturu ve stylu:
def foobar(a: Integer, b: Sequence) -> String:
Tedy to, co Ti (a samozrejme nekdy i mne) chybi.
Na interfacy jsem se ptal trochu mimo a omlouvam se, pokud to vyznelo
despektivne, nemelo. Interfacy povazuju za vynikajici koncept.
T.
|