Viz výše. Prostě nepoužívá a nedává ani žádný smysl, aby tomu tak bylo, že? A tohle tvrdí jinak určitě inteligentní člověk. Takhle ho používají jen ti, kdo s ním neumí, ti kdo ho nechápou, ti kdo ho vnímají jako zmrzačený statický jazyk (být rybou je nahouby, vždyť každý ví, že nemá nohy a proto se nemůže hýbat), kterému něco zásadního chybí. A používají ho většinou z donucení vnějších okolností. Dokud statické typy chápeš jako něco, co ti pomáhá a chybí, místo jako věc, která tě omezuje a která ti překáží, tak nechápeš dynamický jazyk. Jeden z důvodů nepocgopení je, že se statickým typům přisuzují vlastnosti, které jim nepřísluší, viz můj odkaz na staticky typovaný jazyk C. Místo k zamyšlení vedl k nadávkám, protože lidé se svého myšlení vzdávají neradi, je to dost nákladné.
Já jsem jeden z těch, co vnímají statické typy jako pomoc a občas mi zatraceně chybí. Takže bych to využil a zeptal se na nějaké bližší info. Máš nějaké materiály nebo příklady toho, jak má vypadat to přemýšlení, které využívá výhody dynamických jazyků? Něco co by mi ten jiný styl uvažování trochu osvětlilo?
Zatím veškerá omezení, která jsem kdy cítil vycházela spíš z nedokonalé implementace než ze statických typů jako takových. V jazycích s rozumnými generiky a typovou inferencí nemám pocit, že by mě typy nějak omezovaly v rozletu.
Já jsem jeden z těch, co vnímají statické typy jako pomoc a občas mi zatraceně chybí. Takže bych to využil a zeptal se na nějaké bližší info. Máš nějaké materiály nebo příklady toho, jak má vypadat to přemýšlení, které využívá výhody dynamických jazyků? Něco co by mi ten jiný styl uvažování trochu osvětlilo?
Zatím veškerá omezení, která jsem kdy cítil vycházela spíš z nedokonalé implementace než ze statických typů jako takových. V jazycích s rozumnými generiky a typovou inferencí nemám pocit, že by mě typy nějak omezovaly v rozletu.
Nemám. Imho to nejde staticky myslícímu člověku racionálně vysvětlit. Můžeš to zkoušet používat a buď přijde aha efekt a nebo nepřijde. Kdysi na to téma měl přednášku na techtalku Niclas Nilsson https://www.se-radio.net/2007/03/episode-49-dynamic-languages-for-static-minds/ ale imho ti to nepomůže, protože to není otázkou nedostatku informací, ale změny myšlení, a to může přijít jen s vlastní zkušeností. Můžeš si zkusít přečíst pár knih na téma javascript design patterns, kde jsou kodifikovány některé způsoby využití, které by tě asi jinak nenapadly, ale jsem pesimista. Tak jako polovina čechů nepochopí, že demokracie je dobrá, imho nepochopí ani polovina programátorů, že dynamické jazyky jsou dobré. Starý struktury musí vymřít a to špatný nerozujný mládí s tím už takové problém nemá.
Statické typy nejsou jenom o jejich deklaraci, ale o tom, že ti determinují, co můžeš za běhu s programem ještě dělat a co už ne. Zjednodušeně řečeno, statické jazyky rozlišují kód a data, dynamické nikoliv (byť míra implementace je různá). V dynamickém jazyku můžeš kód používat stejně jako data. Což by ti mělo úplně měnit pohled na program a programování, má to řadu důsledků a možností, třeba javascriptové aplikaci můžeš nový kód posílat jako data a za běhu měnit její funkčnost. A ne jako nějakou nouzovou záležitost, kdy servr opravuje za běhu lokální na js založenou aplikaci, ale jako běžné chování. Staticky myslícím programátorům se z toho zvedá kufr, pro ně je to prasárna, všechno chtějí mít pevné, neměnné, prostě statické předem zkontrolované, dynamicky 'mutujíci se' program je pro ně představa z pekla. Přitom přesně takto webové aplikace fungují, nalinkovaný js do stránky není nic jiného než program poslaný jako data, s každou stránkou se mohou načíst jiné, z pohledu uživatele se to mění za běhu aplikace, dělat změny i za běhu interpretu (zjednodušuji, vím) je už jen drobné rozšíření tohoto konceptu. Nebo třeba autonomně za běhu programu se vytvářející stovky nových tříd/datových typů na základě obsahu příchozích dat, která jsou hodně variabilní (na to aby je programátor předem otypoval všechny ručně), ale mají své časté opakující se vzory, aby stálo za to jim přiřadit vlastní datové typy.
To jenom pro představu možností. To že ty osobně nenarážíš na možnosti statických typů je proto, že myslíš staticky a nechceš proto po nich víc, než ti umožňují. Zkus ale nahradit javascript v prohlížeči nějakým statickým jazykem. Ne že by to nešlo, ale narazíš na řadu omezení a problémů, která to přinese. Ne že by to lidé nezkoušeli, kdo si pamatuje java applety? Jestli tohle ti neumožní alespoň vidět nové možnosti, které přináší dynamické jazyky, tak ti asi nic nepomůže. A pokud ano, tak chápeš nesmyslnost tvrzení, že dynamické jazyky jsou stejné jako statické, ale horší.
Heh, presne neco podobneho jem cekal.
Rozhodne doporucuju precist si povidku Woodyho Allena: "Kdyby byli impresioniste dentisty", ktere popisuji tvurci muka mladeho zubare, co se pokousi vytvret neotrele a inspirativni zubni protezy a je znechucen prizemnosti pacientu, co si stezuji, ze se s tim neda kousat.
Programovani je inzenyrska cinnost, pozadovanym vysledkem je funkcni program za definovanou dobu za pomoci beznych standardu, aby mohl spoluporacovat ci praci prevzit jiny pracovnik.
Libovolne praktiky zmeny chovani programu za chodu je desiva prasecina, ktera ma realny vyznam jenom pri psani pocitacovych viru. Kdyz se divam do mnou bezne pouzivanych knihoven z pypi.org, nikde jsem takovy hnuj nevidel.
Realita v teto oblasti je jina, je to prosta znouzectnost.
Python je skriptovaci jazyk z roku 1991, o dost starsi nez treba Java. Vznikl defacto jako lepsi bash ci perl a ostatne se takto pouziva dodnes. Kdyz pozdeji tvurci uznali za vhodne, ze do pythonu pridaji prvky OOP, sli na to jednoduchou cestou. Objekt v pythonu je zjednodusene receno shlukem pointeru na funkce, pricemz funkce s magickym nazvem _init_() se spusti pri instanciaci, kde se muze do seznamu pridavat dalsi pointery na atributy (proto se atributy objektu definuji v initu) pricemz tento atribut muze byt i jina nova funkce.
Takze je mozne v pythonu udelat objekt, ketry se za pouziti spravneho ifu v _init_() v utery instanciuje neco uplne jineho, nez ve stredu. Naprosta lahoda udrzovat takovy kod. Ostatne takto v pythonu nikdo nepise.
Tam se v realu pridavaji typehinty a dekoratory jako je @Property, aby tyhle historicke znouzectnosti pouzivat nemuseli.
Nahradit javascript pomerne uspesne umoznije Typescript s transpilaci. Angular2 na nem stoji.
Java applety nezdechly kvuli statickemu typovani, ale z prosteho duvodu, ze byly navrzene debilne, AWT grafika byla otres a byly mimo DOM.
"Přitom přesně takto webové aplikace fungují, nalinkovaný js do stránky není nic jiného než program poslaný jako data"
No to ani omylem, JS over http je prosty deployment kanall.
Standardni JS aplikace pri pageonload nahraje komplet JS zdrojak, (obvykle optimalizovany pouze pro potreby dane aplikace) a browser to zkompiluje do bytecode. Pri page load event se casto spusti init framweorku. Pak uz se jenom volaji JS funkce a to staticky. A i ty v pripade Angular2 vznikly traspilaci Typescriptu.