Co si myslíte o OOP?

Kadet

Re:Co si myslíte o OOP?
« Odpověď #225 kdy: 31. 12. 2018, 02:16:36 »
Dobrej priklad kde staticky typovani naprosto selhava jsou silne variabilni datovy struktury. Proste prace s json daty. To co mi posilaji nektery backend apj jsou jsony o deseti urovnich a skutecne nemam silu na to mapovat tohlr monstrum na nejakej muj class nebo haskell type.
No a co pak s tím děláš? Máš strukturu struktury struktur. A to by mělo mít nějaký význam, ne? Třeba a.b.c je klíč pro nějakou konkrétní konkfiguraci (třeba). Takže to potom čekuješ ručně?

Můžeš prosím rozvést to "naprosto selhává"? Tak trochu v tom čuchám "nechce se mi to definovat, tak to nechám vágní, a řešit to budu potom...".

Chci z jsonu ziskat a.b.c

1. nechapu proc bych mel definovat typ nekolika urovnovyho jsonu
2. pokud to nebudu typovat ale budu s tim pracovat jako s dynamickym typem, pak mi statickej jazyk nijak nepomoh. naopak mi to zneprijemnil hloupyma hlaska a pri kompilaci

1. protože aby si dostal a.b.c a ne třeba a.b.x
2. to je tautologie. Já znám jen dvě možnosti: statickej typ= vím, že je tam a.b.c, dynamický typ: nevím nic. Tudíž, aby si to mohl zpracovat musíš tu informaci dodat dodatečně ručně. V čem ti dynamický typ pomohl?

Připomenu, já samozřejmě můžu ve statickém jazyce veškeré informace ignorovat, a pracovat jen s tuplem. (Sám si to zmiňoval "Node (string -> string|int|list|Node)"). Ale to pak znamená, jestli to chápu dobře, že jen a pouze chcetš si tu kontrolu dělat sám. To je veškerá výhoda dynamického typování? Možnost dělat si všechno ručně?

--
edit: jak si to po sobě čtu, možná by byl lepší výraz "záruka" na místo "vím". Protože já samozřejmě o té hodnotě můžu evidovat co je to za typ. Ale stroj s tím víc nepracuje.

1. kdyz tam chybi a.b.c, tak mi to muze vratit treba null a vubec se nebudu zlobit
2. popravde tvoji vetu nechapu. Nepotrebuju zadnou informaci dodavat. To, co se skryva pod a.b.c ma svuj dynamicky typ a to mi staci, abych a tim pracoval. Pokud a.b.c neexistuje, vrati mi to null, keyerror nebo jinou takovou hodnotu.

Nechapu kde jsi vytah, ze jsem tvrdil neco o 'veskerych vyhodach dynamickych jazyku'. Tvrdil jsem pouze, ze staticky jazyky v tomhle selhavaji a kazdej normalni clovek by pouzil 'tuple' misto definovanu tyou cely struktury. Tj. sahnul by po dynamickym typovani.


Kiwi

Re:Co si myslíte o OOP?
« Odpověď #226 kdy: 31. 12. 2018, 02:50:08 »
Co bys považoval za dobrou alternativu k dynamizovanému statickému webu?
Zahodit koncept webového prohlížeče a nahradit ho pouhou VM, zahodit koncept webových stránek a nahradit je kompletně jednotným standardizovaným bytekódem appletů, které ať si každý píše, v čem mu to vyhovuje/co je pro daný účel nejvýhodnější, doplnit o podepsané knihovny (dostupné transparentně z dotazovaného serveru či odjinud), vše spravované na straně klienta systémem cache. Webová stránka, jež je ze své podstaty pouhým označkovaným textem, by tak byla nahrazena plnohodnotným programem.

Applet, který jen zobrazí analogii statického webu, by nebyl o nic složitější ani delší než současný web. Odpadly by všelijaké CSS, cookies, flashe a podobné nesmysly. Při přístupu k portálu (třeba jako root.cz) by došlo jen ke stažení dat, protože veškerý kód by byl nacachovaný u klienta včetně potřebných knihoven. Zjednodušila by se komunikace klient-server i klientA-server-klientB, klient-klient apod. Zjednodušilo by se sdílení dat. Ne, že by řada z toho dnes nešla zařídit, praxe si to vynutila, ale děje se tak často neuvěřitelně krkolomnými způsoby. Což je i důvod, proč si myslím, že se jednodušší řešení při masovém rozšíření toho současného nemá šanci rozšířit - prostě protože nějak to jde i tak.

protoze nic lepsiho vymysleneho nebylo 8)
Právě že bylo.  :) Jestliže tytéž problémy vyřeším na třetině LOC a za pětinu času, tak ať mě nikdo nepřesvědčuje, že nepracuji s lepším nástrojem. Dlouhé roky jsem dělal v C++, backendy i frontendy, embedded i PC, pamatuji Turbo Vision i OWL, jásal jsem nad Qt... Něco málo (ve srovnání s objemem práce v C++) jsem dělal v Javě a v C#. Ale když to srovnám s věcmi jako Cocoa v Objective C nebo smalltalkovými frameworky, tak je to prostě parní stroj versus parní turbína - základní myšlenka je sice stejná, ale jsou tam jisté velmi podstatné rozdíly.

V OOP je dynamické typování opravdu výhodnější - kvůli polymorfismu a velmi pozdní vazbě.
Nenašel jsem situaci, kdy by pozdní vazba bránila typům. Můžeš uvést příklad?
Už to tu zmiňoval Kit. Spíš jde o ty přívlastky statický/dynamický. Rozdíl bych viděl asi v tom, že ve statickém případě se v daném místě další (řádný) běh programu může odvíjet jedině od dat. V dynamickém od dat a/nebo jejich typu, nebo dokonce nezávisle na jejich typu. To dává větší spektrum možností, jak na ně program v daném místě může (řádně) reagovat. Ve statickém případě se musím omezit (často zbytečně defenzivně) jen na určitý typ dat, přičemž diskrepance mezi povinně deklarovaným očekávaným a reálně přijatým typem dat vede k chybovému stavu. Jsou to opačné imperativy - za všech okolností znát typ dat, s nimiž pracuji, vs. nestarat se o typ dat, dokud to nezbytně nepotřebuji k práci s nimi.

Jinými slovy, zatímco v klasickém přístupu chci pole integerů a případ, kdy bych chtěl pole nějakých obecných prvků, je více či méně krkolomný, u objektového přístupu chci primárně pole nějakých obecných prvků a když budu chtít, aby tam byly jen integery, budu si to muset nějak (více či méně krkolomně) pohlídat.
Nevidím důvod, proč by ty obecné prvky neměli mít patřičný typ. Mám komponentu, do které chci vkládat různé widgety. Tak bude dozajisté užitečné, když mi to tam pustí jen widgety (input, textarea, datepicker, timepicker, calendar, grid, form, ...), a integer nikoliv.
A co se zeptat opačně - proč by nutně musely mít nějaký dopředu známý patřičný typ? Když jdu nakupovat rohlíky, tak k tomu také nepotřebuji speciální tašku na rohlíky. O to, že v ní budou jen rohlíky, se postarám tak, že do ní prostě nic jiného nedám. Ale konat nákup za situace, že mám k dispozici jen tašky na rohlíky, přepravky na lahve, tašky na šunkové salámy, tašky na párky, tašky na chleby apod. by mohl být docela nesnadný úkol. Přitom v tom obchodě je jistě vhodné, aby zboží bylo roztříděno dle druhů, stejně tak ten, kdo z něj bude vařit, bude potřebovat odlišit máslo od chleba. Ale pro účely přenosu z obchodu domů to bude jedno, nebo spíš bude třeba odlišit, co je křehké a co ne. Křehká jsou vejce, ale taky třeba sklenice nebo žárovky či pivo ve skle. Nikoli však pivo v PETce. Pro účely uskladnění se bude rozlišovat podle toho, co půjde do ledničky (pivo bez ohledu na to, je-li ve skle či v PETce), co do mrazáku, co do špajzu. A to je právě ta mnohotvárnost - možnost klasifikovat tytéž objekty za různých situacích - pro různé potřeby různě. Ale k tomu je nezbytné, aby se s nimi technicky dalo zacházet úplně stejně - abych je pokud možno mohl všechny uchopit do ruky a tím s nimi manipulovat a pouhým pohledem, přičichnutím apod., prostě dle vlastnosti, jež mě zajímá, je klasifikovat (včetně situace "tohle mi dali místo sušenek Vanda, ty se už nevyrábějí, ale prý je to něco podobného" a "tohle vůbec netuším, co je, dali mi to pro Frantu, tak mu to prosím předej").

Jiná analogie - dříve PC mělo DIN konektor na klávesnici, DB9 na myš, DB25 na tiskárnu, ale taky byly PS/2 konektory na myš a klávesnici, externí disky měly SCSI, které obvykle představovalo taky další kartu do základní desky... Dnes to řeší jednotné USB a dynamicky se rozhodne, jakým způsobem se připojené zařízení bude obsluhovat.

Takže většina toho, čemu říkáme citáty, zvláště ty latinské, vlastně podle tebe vůbec citáty nejsou. Prosím, držme se obecně přijímaného významu slov a nevymýšlej si pro ně své vlastní definice. Ale nešť - tak jsem přeparafrázoval Kayovy názory
Souhlas, tak si nevymýšlej nesmysly. Definice: “Citát je doslovné znění z díla spisovatele, anebo doslovně zopakovaný výrok. [...] Při citování se uvádí jak autor, tak i dílo v kterém se výrok objevil.” Tohle jsi měl mít na ZŠ (předpokládám, žes ji úspěšně ukončil), asi to fakt jde s naším školstvím od 5 k 0.

Kit

Re:Co si myslíte o OOP?
« Odpověď #227 kdy: 31. 12. 2018, 02:50:59 »
O pár stránek zpět bylo propagováno oddělení funkcí od datových struktur, což je přesně proti myšlence OOP, tedy že metody jsou co nejblíž k datům, se kterými pracují.
OOP je o umístění stavu do objektu a o polymorfismu. To co popisuješ není dobrá definice. Vejdou se do toho snad všechny funkcionální jazyky. A možná i mnoho dalších neOOP.

Pokud jsi to nepochopil, tak jsem tuto definici označil za naprosto chybnou.

OOP je hlavně o umístění metod do objektu - tedy tam, kde je stav.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #228 kdy: 31. 12. 2018, 02:57:12 »
1. protože aby si dostal a.b.c a ne třeba a.b.x
2. to je tautologie. Já znám jen dvě možnosti: statickej typ= vím, že je tam a.b.c, dynamický typ: nevím nic. Tudíž, aby si to mohl zpracovat musíš tu informaci dodat dodatečně ručně. V čem ti dynamický typ pomohl?

Připomenu, já samozřejmě můžu ve statickém jazyce veškeré informace ignorovat, a pracovat jen s tuplem. (Sám si to zmiňoval "Node (string -> string|int|list|Node)"). Ale to pak znamená, jestli to chápu dobře, že jen a pouze chcetš si tu kontrolu dělat sám. To je veškerá výhoda dynamického typování? Možnost dělat si všechno ručně?

--
edit: jak si to po sobě čtu, možná by byl lepší výraz "záruka" na místo "vím". Protože já samozřejmě o té hodnotě můžu evidovat co je to za typ. Ale stroj s tím víc nepracuje.

1. kdyz tam chybi a.b.c, tak mi to muze vratit treba null a vubec se nebudu zlobit
2. popravde tvoji vetu nechapu. Nepotrebuju zadnou informaci dodavat. To, co se skryva pod a.b.c ma svuj dynamicky typ a to mi staci, abych a tim pracoval. Pokud a.b.c neexistuje, vrati mi to null, keyerror nebo jinou takovou hodnotu.

Nechapu kde jsi vytah, ze jsem tvrdil neco o 'veskerych vyhodach dynamickych jazyku'. Tvrdil jsem pouze, ze staticky jazyky v tomhle selhavaji a kazdej normalni clovek by pouzil 'tuple' misto definovanu tyou cely struktury. Tj. sahnul by po dynamickym typovani.
1. "třeba"?!
2. Pokud pracuju s nějakou strukturou (mluvím o JSON), tak pokud s ní nějak pracuji, tak musím vědět co je zač. Tedy, potřebuji informaci. Že mám řadu klíčů a.b.c je informace. Protože třeba taky mohu dostat x.y.z. A to přeci není to samé. Otázka je, kdy tu informaci dodám. Buď předem, nebo dodatečně. Což má své důsledky.

Mé stanovisko (můžeš mě opravit) je, že dynamické jazyky se používají v situaci kdy:
1. za běhu měnitelný systém (znám jen Erlang)
2. prototypování
3. neumím, nebo jazyk neumí typy

Příklad, který si uvedl, bych opravdu raději dělal v staticky typovaném jazyce. Právě proto, že by mi IMHO spoustu práce usnadnil.

Kit

Re:Co si myslíte o OOP?
« Odpověď #229 kdy: 31. 12. 2018, 03:01:02 »
Já znám jen dvě možnosti: statickej typ= vím, že je tam a.b.c, dynamický typ: nevím nic. Tudíž, aby si to mohl zpracovat musíš tu informaci dodat dodatečně ručně. V čem ti dynamický typ pomohl?

Co udělá statický typ, když mu místo a.b.c přijde a.b.x? V čem mi pomůže, když se takový program sesype, místo aby tu chybu zpracoval?


Kit

Re:Co si myslíte o OOP?
« Odpověď #230 kdy: 31. 12. 2018, 03:04:13 »
Co bys považoval za dobrou alternativu k dynamizovanému statickému webu?
Zahodit koncept webového prohlížeče a nahradit ho pouhou VM, zahodit koncept webových stránek a nahradit je kompletně jednotným standardizovaným bytekódem appletů, které ať si každý píše, v čem mu to vyhovuje/co je pro daný účel nejvýhodnější, doplnit o podepsané knihovny (dostupné transparentně z dotazovaného serveru či odjinud), vše spravované na straně klienta systémem cache. Webová stránka, jež je ze své podstaty pouhým označkovaným textem, by tak byla nahrazena plnohodnotným programem.

Když by to bylo tak skvělé, tak proč se to nedělá?

Kadet

Re:Co si myslíte o OOP?
« Odpověď #231 kdy: 31. 12. 2018, 03:10:46 »
1. protože aby si dostal a.b.c a ne třeba a.b.x
2. to je tautologie. Já znám jen dvě možnosti: statickej typ= vím, že je tam a.b.c, dynamický typ: nevím nic. Tudíž, aby si to mohl zpracovat musíš tu informaci dodat dodatečně ručně. V čem ti dynamický typ pomohl?

Připomenu, já samozřejmě můžu ve statickém jazyce veškeré informace ignorovat, a pracovat jen s tuplem. (Sám si to zmiňoval "Node (string -> string|int|list|Node)"). Ale to pak znamená, jestli to chápu dobře, že jen a pouze chcetš si tu kontrolu dělat sám. To je veškerá výhoda dynamického typování? Možnost dělat si všechno ručně?

--
edit: jak si to po sobě čtu, možná by byl lepší výraz "záruka" na místo "vím". Protože já samozřejmě o té hodnotě můžu evidovat co je to za typ. Ale stroj s tím víc nepracuje.

1. kdyz tam chybi a.b.c, tak mi to muze vratit treba null a vubec se nebudu zlobit
2. popravde tvoji vetu nechapu. Nepotrebuju zadnou informaci dodavat. To, co se skryva pod a.b.c ma svuj dynamicky typ a to mi staci, abych a tim pracoval. Pokud a.b.c neexistuje, vrati mi to null, keyerror nebo jinou takovou hodnotu.

Nechapu kde jsi vytah, ze jsem tvrdil neco o 'veskerych vyhodach dynamickych jazyku'. Tvrdil jsem pouze, ze staticky jazyky v tomhle selhavaji a kazdej normalni clovek by pouzil 'tuple' misto definovanu tyou cely struktury. Tj. sahnul by po dynamickym typovani.
1. "třeba"?!
2. Pokud pracuju s nějakou strukturou (mluvím o JSON), tak pokud s ní nějak pracuji, tak musím vědět co je zač. Tedy, potřebuji informaci. Že mám řadu klíčů a.b.c je informace. Protože třeba taky mohu dostat x.y.z. A to přeci není to samé. Otázka je, kdy tu informaci dodám. Buď předem, nebo dodatečně. Což má své důsledky.

Mé stanovisko (můžeš mě opravit) je, že dynamické jazyky se používají v situaci kdy:
1. za běhu měnitelný systém (znám jen Erlang)
2. prototypování
3. neumím, nebo jazyk neumí typy

Příklad, který si uvedl, bych opravdu raději dělal v staticky typovaném jazyce. Právě proto, že by mi IMHO spoustu práce usnadnil.

Nic ve zlym, ale je videt, ze vy lidi ze statickyho typovani jste matematici a zajima vas spis nejaka axiomaticka pravda vesmiru nez dodat vysledek zakaznikovi.

1. ano, treba null nebo KeyError. cokoliv s cim bude tazatel spokojen
2. Muzes si o ty strukture precist treba encyklopedii a vykouzlit nad tim nejakej katamorfismus. Ja mezitim zavolam query("a.b.c", json_objekt, else=null) a jdu domu s penezma od zakaznika.

Staticky typovani je ti uplne k nicemu jakmile ti prijdou data po prekladu programu. Tj. prave nejakej json objekt co ti posle API v responsu, nebo user input. Stejne na to pouzijes dynamicky typovani. Muzes si ho znovuvynalezt v haskellu pomoci pouziti tvyho 'tuplu' ale porad je to dynamicky typovani. Union objekty maji za behu programu nejakej 'tag' kterej urcuje, ktera varianta z unionu je prave pouzita. = dynamicky typovani. Treba je tu nejaky velky nedorozumeni ohledne semantiky, co znamena typ.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #232 kdy: 31. 12. 2018, 03:13:50 »
V OOP je dynamické typování opravdu výhodnější - kvůli polymorfismu a velmi pozdní vazbě.
Nenašel jsem situaci, kdy by pozdní vazba bránila typům. Můžeš uvést příklad?
Už to tu zmiňoval Kit. Spíš jde o ty přívlastky statický/dynamický. Rozdíl bych viděl asi v tom, že ve statickém případě se v daném místě další (řádný) běh programu může odvíjet jedině od dat. V dynamickém od dat a/nebo jejich typu, nebo dokonce nezávisle na jejich typu. To dává větší spektrum možností, jak na ně program v daném místě může (řádně) reagovat. Ve statickém případě se musím omezit (často zbytečně defenzivně) jen na určitý typ dat, přičemž diskrepance mezi povinně deklarovaným očekávaným a reálně přijatým typem dat vede k chybovému stavu. Jsou to opačné imperativy - za všech okolností znát typ dat, s nimiž pracuji, vs. nestarat se o typ dat, dokud to nezbytně nepotřebuji k práci s nimi.
Obávám se, že takto statické typování nefunguje. Všechny příklady tebou naznačného spektra možností mohu řešit. A statické typování mi bude hodně pomáhat. (A nemusím to dělat ručně.)

Zkusme být konkrétní. Bylo tu uvedeno parsování JSONu. Řešil bych to určitě staticky. Rozhodování zpracování podle typu dat? Staticky. Rozhodnování podle dat - to si nejsem jist, co myslíš. Jak se mohu rozhodovat podle dat? Čeho se mohu chytnout? Můžeš uvést příklad?


Jinými slovy, zatímco v klasickém přístupu chci pole integerů a případ, kdy bych chtěl pole nějakých obecných prvků, je více či méně krkolomný, u objektového přístupu chci primárně pole nějakých obecných prvků a když budu chtít, aby tam byly jen integery, budu si to muset nějak (více či méně krkolomně) pohlídat.
Nevidím důvod, proč by ty obecné prvky neměli mít patřičný typ. Mám komponentu, do které chci vkládat různé widgety. Tak bude dozajisté užitečné, když mi to tam pustí jen widgety (input, textarea, datepicker, timepicker, calendar, grid, form, ...), a integer nikoliv.
A co se zeptat opačně - proč by nutně musely mít nějaký dopředu známý patřičný typ?
To samozřejmě (u statického typování) nemusíš. Ale občas je fajn točit pivo do skleněné flašky, a bylinky sypat do papírové krabice. A zajistit, aby to nešlo naopak. Já tam neuváděl komponentu na inputy, ale komponentu na widgety.

Taška na rohlíky je provokace. Jestli nechceš vést vážou diskusi, tak to řekni rovnou :-)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #233 kdy: 31. 12. 2018, 03:19:41 »
Nic ve zlym, ale je videt, ze vy lidi ze statickyho typovani jste matematici a zajima vas spis nejaka axiomaticka pravda vesmiru nez dodat vysledek zakaznikovi.
Opak je pravdou.


2. Muzes si o ty strukture precist treba encyklopedii a vykouzlit nad tim nejakej katamorfismus. Ja mezitim zavolam query("a.b.c", json_objekt, else=null) a jdu domu s penezma od zakaznika.
Kdepak, nejdeš. Já už jsem hotov, zatímco ty stále ještě honíš KeyError :-)

No nic, mír s tebou.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #234 kdy: 31. 12. 2018, 03:26:26 »
Co udělá statický typ, když mu místo a.b.c přijde a.b.x? V čem mi pomůže, když se takový program sesype, místo aby tu chybu zpracoval?
Kde jsi sebral, že se ten program sesype? Staticky typované jazyky narozdíl od svých dynamických kolegů obvykle nepadaj (ne, že by vůbec, ale násobně méně).

Ale k tvé otázce: statický typ zajistí, že v případě a.b.x pojede program jinou cestou. Zajistí, že ta cesta bude existovat. Zajistí, že dojde ke korektnímu zpracování. A zajistí, že se program nesesype.

Kit

Re:Co si myslíte o OOP?
« Odpověď #235 kdy: 31. 12. 2018, 03:31:27 »
2. Pokud pracuju s nějakou strukturou (mluvím o JSON), tak pokud s ní nějak pracuji, tak musím vědět co je zač. Tedy, potřebuji informaci. Že mám řadu klíčů a.b.c je informace. Protože třeba taky mohu dostat x.y.z. A to přeci není to samé. Otázka je, kdy tu informaci dodám. Buď předem, nebo dodatečně. Což má své důsledky.

Statické typování znamená, že když chceš zpracovat JSON, tak bezpečně víš, že na první položce pole je číslo, na druhé je string a na třetí je datum: [42, "Adam", "1995-05-25"]. Běda, pokud zdroj dat přehodí pořadí - to pak vyběhne fatal error.

Při dynamickém typování bude v JSONu místo pole mapa: {id:42, name:"Adam", birthdate:"1995-05-25"}. Na rozdíl od statického přístupu jsou zde uvedeny skutečné typy, tedy id, name a birthdate. Nemusí nás trápit, pokud ten JSON má položky v jiném pořadí - podstatné je, že je zachována relace typ:hodnota.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #236 kdy: 31. 12. 2018, 03:45:09 »
2. Pokud pracuju s nějakou strukturou (mluvím o JSON), tak pokud s ní nějak pracuji, tak musím vědět co je zač. Tedy, potřebuji informaci. Že mám řadu klíčů a.b.c je informace. Protože třeba taky mohu dostat x.y.z. A to přeci není to samé. Otázka je, kdy tu informaci dodám. Buď předem, nebo dodatečně. Což má své důsledky.

Statické typování znamená, že když chceš zpracovat JSON, tak bezpečně víš, že na první položce pole je číslo, na druhé je string a na třetí je datum: [42, "Adam", "1995-05-25"]. Běda, pokud zdroj dat přehodí pořadí - to pak vyběhne fatal error.
Ne, to to skutečně neznamená.

Při dynamickém typování bude v JSONu místo pole mapa: {id:42, name:"Adam", birthdate:"1995-05-25"}. Na rozdíl od statického přístupu jsou zde uvedeny skutečné typy, tedy id, name a birthdate. Nemusí nás trápit, pokud ten JSON má položky v jiném pořadí - podstatné je, že je zachována relace typ:hodnota.

`id` z `{id:42, name:"Adam", birthdate:"1995-05-25"}` rozhodně není typ. Při dynamickém typování nic z toho co jsi popsal nezískáváme navíc. Je mi to líto, opravdu píšeš nesmysly.

Kadet

Re:Co si myslíte o OOP?
« Odpověď #237 kdy: 31. 12. 2018, 03:53:11 »
Nic ve zlym, ale je videt, ze vy lidi ze statickyho typovani jste matematici a zajima vas spis nejaka axiomaticka pravda vesmiru nez dodat vysledek zakaznikovi.
Opak je pravdou.


2. Muzes si o ty strukture precist treba encyklopedii a vykouzlit nad tim nejakej katamorfismus. Ja mezitim zavolam query("a.b.c", json_objekt, else=null) a jdu domu s penezma od zakaznika.
Kdepak, nejdeš. Já už jsem hotov, zatímco ty stále ještě honíš KeyError :-)

No nic, mír s tebou.

Omyl. Ja mam hotovo a resim co s null nebo keyerror. V tehle chvili by mi teoreticky statickej typ pomoh, to je pravda.

Jenomze ty jsi jeste nepreskocil a uz rikas HOP. Zatim jsi neukazal jak by ses s tim vyporadal.

Kit dal dobry priklady v jsonu. Dalsi dobrej priklad kde selhava staticky typovani je tohle. Mam dva objekty. Chci ziskat 'name'.

V dynamickym jazyce zavolam 'query("name")' a jdu domu, splneno. Jak bude vypadat ve statickym jazyce typ kterej mi zvladne oba priklady? Nebo musim vytvorit powerset vsech kombinaci pritomnych/chybejicich poli?
Opakuju, pouziti datovyho typu 'JsonNode' je reimplementace dynamickyho typovani.

{id:42, name:"Adam", birthdate:"1995-05-25"}
{id:42, name:"Adam"}

Re:Co si myslíte o OOP?
« Odpověď #238 kdy: 31. 12. 2018, 04:26:45 »
2. Pokud pracuju s nějakou strukturou (mluvím o JSON), tak pokud s ní nějak pracuji, tak musím vědět co je zač. Tedy, potřebuji informaci. Že mám řadu klíčů a.b.c je informace. Protože třeba taky mohu dostat x.y.z. A to přeci není to samé. Otázka je, kdy tu informaci dodám. Buď předem, nebo dodatečně. Což má své důsledky.

Statické typování znamená, že když chceš zpracovat JSON, tak bezpečně víš, že na první položce pole je číslo, na druhé je string a na třetí je datum: [42, "Adam", "1995-05-25"]. Běda, pokud zdroj dat přehodí pořadí - to pak vyběhne fatal error.

Při dynamickém typování bude v JSONu místo pole mapa: {id:42, name:"Adam", birthdate:"1995-05-25"}. Na rozdíl od statického přístupu jsou zde uvedeny skutečné typy, tedy id, name a birthdate. Nemusí nás trápit, pokud ten JSON má položky v jiném pořadí - podstatné je, že je zachována relace typ:hodnota.
Jen tak pro informaci by mne zajímalo, který staticky typovaný jazyk standardně doporučuje mít v poli různé typy? Tím neříkám, že to v některých nejde, ale je to prostě prasárna, kdy poté musím používat reflexi. Pro tyto případy se používá mapa, což je tvůj druhý příklad. Jaký je rozdíl?

Celý ten případ s JSONem je na hlavu postavený. Pokud chci pracovat s hlubokou strukturou, prostě použiji JSONPath, stejně jako dříve uvedený příklad a mám to stejně rychle. Podle jazyka pak zpracuji chybu, pokud položka neexistuje. Žádný rozdíl.

Nejsem žádný mistr přes jazyky, ale pokud vím, všechny běžně používané staticky typované jazyky umožňují nějakým způsobem reflexi, takže není problém do nich dynamické typování "dodělat". Statické typování do dynamicky typovaných jazyků ale dodělat nelze.

Mám zkušenosti s oběma skupinami a největší rozdíl vidím v dokumentaci. Na co ve staticky typovaných jazycích stačí 3 řádky a odkaz na strukturu, je potřeba v dynamicky typovaných jazycích zpravidla 3x tolik informací. A ani potom nemám moc velkou jitotu, co tam skutečně může být.

Kit

Re:Co si myslíte o OOP?
« Odpověď #239 kdy: 31. 12. 2018, 04:40:03 »
Jen tak pro informaci by mne zajímalo, který staticky typovaný jazyk standardně doporučuje mít v poli různé typy? Tím neříkám, že to v některých nejde, ale je to prostě prasárna, kdy poté musím používat reflexi. Pro tyto případy se používá mapa, což je tvůj druhý příklad. Jaký je rozdíl?

Pascal používá record, v C je to struct.