Co si myslíte o OOP?

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #300 kdy: 31. 12. 2018, 16:22:43 »
V PHP to jde docela snadno. Prostě ty typy nacpeš do formálních parametrů a máš hotovo.
Kód: [Vybrat]
function assetContactForm(array $form, string $name, int $age, string $email, string $content) {
    $form['name'] = $name;
    $form['age'] = $age;
    $form['email'] = $email;
    $form['content'] = $content;
    return $form;
}

Aby to bylo typově korektní, tak ten $form musí být typu (Form String, Int, String, String, ...) :-P (Ale to samozřejmě nebylo pointou mého příspěvku.)


Kit

Re:Co si myslíte o OOP?
« Odpověď #301 kdy: 31. 12. 2018, 16:23:42 »
Troufám si neskromě tvrdit, že celkem vím, jaký je rozdíl mezi staticky a dynamicky typováním. Ale ať nad tím dumám jak dumám, tak mi vychází, že dynamické typování je znouzecnost. Nemá žádné benefity. Pletu se?

Statické typování nemá žádné benefity, pouze vývojáři hází klacky pod nohy a znemožňuje velmi pozdní vazbu. Vývojáři to obchází tak, že část kódu udělají přes dynamický REPL. U dynamicky typovaného jazyka je to naopak: Staticky natypuji jen to, co skutečně chci mít staticky typováno.

Re:Co si myslíte o OOP?
« Odpověď #302 kdy: 31. 12. 2018, 16:27:07 »
Zajímalo  by mě pár kousků  těch bambilionu jiných, kde dynamické typování je vhodnější (nikoliv jediné technicky možné).
Neříkal jsem, že je vhodnější, ale že je bambilion případů, kdy musíš statické typování opustit a přejít na dynamické, protože prostě typ v době překladu neznáš. Je to jakákoliv situace, kdy data načítáš z externího zdroje. Z principu věci ti typový systém může zaručit, že je někde nějaký typ, jenom za předpokladu, že ten zdroj těch dat má pod kontrolou. Kdykoli načítáš ze sítě nebo z disku, typy nemáš.

Ale ať nad tím dumám jak dumám, tak mi vychází, že dynamické typování je znouzecnost. Nemá žádné benefity. Pletu se?
Se zkvalitněním inference výhody trochu ubývají. Ale pár bys jich našel. Například když potřebuješ někde na zkoušku nějaký typ změnit, může ti probublat do spousty kódu, takže to musíš změnit i na spoustě mít, který vůbec spouštět nechceš. Je to podobný jako s IO v Haskellu - nemůžeš si někam jenom tak narychlo dát nějaký debug výpis...

Tohle jasná výhoda je. A našel bys jich víc. Jestli převažují nevýhody, to ať si každý soudruh posoudí sám :)

Kit

Re:Co si myslíte o OOP?
« Odpověď #303 kdy: 31. 12. 2018, 16:28:03 »
V PHP to jde docela snadno. Prostě ty typy nacpeš do formálních parametrů a máš hotovo.
Kód: [Vybrat]
function assetContactForm(array $form, string $name, int $age, string $email, string $content) {
    $form['name'] = $name;
    $form['age'] = $age;
    $form['email'] = $email;
    $form['content'] = $content;
    return $form;
}

Aby to bylo typově korektní, tak ten $form musí být typu (Form String, Int, String, String, ...) :-P (Ale to samozřejmě nebylo pointou mého příspěvku.)

To by nefungovalo. Napsal jsem svůj kód dle tvého příkladu, který je v PHP korektní a funkční.

Re:Co si myslíte o OOP?
« Odpověď #304 kdy: 31. 12. 2018, 16:30:18 »
No a ja tvrdim, ze pokud mas plnotucny REPL tak musis mit vsechny tyhle veci taky, protoze jinak bys nemohl mit ani ten.  A z toho vyvozuju, ze pokud mas REPL mas i hot swap.
No tak to z chybného předpokladu vyvozuješ chybný závěr, no, co na to říct jiného? REPL máš třeba v pythonu a code reloading tam dělat nejde (AFAIK). Existující kód prostě běží dál, změny se projeví jenom v nově nataženém.
Uz je to davno co sem delal s pythonem. Ale melo by to jit.

Pokud tomu tak neni tak to neni plnohodnotny REPL.
Beru na vědomí tvou definici "plnohodnotného REPLu".

Ani ten ti ale na hot code reload nestačí.

Nerikam, ze k hot swapu je potreba REPL. Ale ze k REPLu je potreba hot swap.
Tudis vsude kde REPL je... Musi byt i hot swap



Re:Co si myslíte o OOP?
« Odpověď #305 kdy: 31. 12. 2018, 16:32:34 »
Ale melo by to jit.
Ne, nejde to, smiř se s tím, mýlíš se.

(sorry, tohle téma už mě nebaví, omlouvám se z něj)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #306 kdy: 31. 12. 2018, 16:45:00 »
V PHP to jde docela snadno. Prostě ty typy nacpeš do formálních parametrů a máš hotovo.
Kód: [Vybrat]
function assetContactForm(array $form, string $name, int $age, string $email, string $content) {
    $form['name'] = $name;
    $form['age'] = $age;
    $form['email'] = $email;
    $form['content'] = $content;
    return $form;
}

Aby to bylo typově korektní, tak ten $form musí být typu (Form String, Int, String, String, ...) :-P (Ale to samozřejmě nebylo pointou mého příspěvku.)

To by nefungovalo. Napsal jsem svůj kód dle tvého příkladu, který je v PHP korektní a funkční.

Nechápu, co se pokoušíš říct?

Re:Co si myslíte o OOP?
« Odpověď #307 kdy: 31. 12. 2018, 16:45:45 »
Ale melo by to jit.
Ne, nejde to, smiř se s tím, mýlíš se.

(sorry, tohle téma už mě nebaví, omlouvám se z něj)
OK Miro. si omluven.
Pro ostatni: https://docs.python.org/3/library/importlib.html#importlib.reload
Je tu nejakej pythonak, kterej by rekl, jestli je to pouzitelne?

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #308 kdy: 31. 12. 2018, 16:51:05 »
Zajímalo  by mě pár kousků  těch bambilionu jiných, kde dynamické typování je vhodnější (nikoliv jediné technicky možné).
Neříkal jsem, že je vhodnější, ale že je bambilion případů, kdy musíš statické typování opustit a přejít na dynamické, protože prostě typ v době překladu neznáš. Je to jakákoliv situace, kdy data načítáš z externího zdroje. Z principu věci ti typový systém může zaručit, že je někde nějaký typ, jenom za předpokladu, že ten zdroj těch dat má pod kontrolou. Kdykoli načítáš ze sítě nebo z disku, typy nemáš.
Já nevím, tohle se mi nezdá. Když mám data z externího zdroje, stále to můžu otypovat. Typy dělají jakoby "cestičky". Prostě mám vstup od uživatele (co může být více nespolehlivé). A vím, typem určím, že buď zadá číslo, a pak ho zpracuju, nebo zadá nečíslo, a pak mu hodím chybovku. Tohle jde udělat compile-time.


Ale ať nad tím dumám jak dumám, tak mi vychází, že dynamické typování je znouzecnost. Nemá žádné benefity. Pletu se?
Se zkvalitněním inference výhody trochu ubývají. Ale pár bys jich našel. Například když potřebuješ někde na zkoušku nějaký typ změnit, může ti probublat do spousty kódu, takže to musíš změnit i na spoustě mít, který vůbec spouštět nechceš. Je to podobný jako s IO v Haskellu - nemůžeš si někam jenom tak narychlo dát nějaký debug výpis...

Tohle jasná výhoda je. A našel bys jich víc. Jestli převažují nevýhody, to ať si každý soudruh posoudí sám :)

Ano, tu mám v tom seznamu :-)
Jde vlastně o featuru, moct ty typy vypnout. Protože třeba ten Haskell to vždycky kompiluje jako na produkci.

Kit

Re:Co si myslíte o OOP?
« Odpověď #309 kdy: 31. 12. 2018, 17:06:20 »
V PHP to jde docela snadno. Prostě ty typy nacpeš do formálních parametrů a máš hotovo.
Kód: [Vybrat]
function assetContactForm(array $form, string $name, int $age, string $email, string $content) {
    $form['name'] = $name;
    $form['age'] = $age;
    $form['email'] = $email;
    $form['content'] = $content;
    return $form;
}
Aby to bylo typově korektní, tak ten $form musí být typu (Form String, Int, String, String, ...) :-P (Ale to samozřejmě nebylo pointou mého příspěvku.)
To by nefungovalo. Napsal jsem svůj kód dle tvého příkladu, který je v PHP korektní a funkční.
Nechápu, co se pokoušíš říct?

To je otázka nebo konstatování?

V původní ukázce jsi nic takového neuvedl, proto jsem to udělal tak jak jsem to udělal. Pokud Form bude třída, tak to bude v PHP vypadat asi takto:
Kód: [Vybrat]
function assetContactForm(Form $form, string $name, int $age, string $email, string $content) {
    $form->name = $name;
    $form->age = $age;
    $form->email = $email;
    $form->content = $content;
    return $form;
}
Vše řádně otypováno, včetně $form->name atd. Spokojen?

v

Re:Co si myslíte o OOP?
« Odpověď #310 kdy: 31. 12. 2018, 17:31:27 »
Je to podobný jako s IO v Haskellu - nemůžeš si někam jenom tak narychlo dát nějaký debug výpis...
ale může http://hackage.haskell.org/package/base-4.12.0.0/docs/Debug-Trace.html#v:trace

v

Re:Co si myslíte o OOP?
« Odpověď #311 kdy: 31. 12. 2018, 17:36:16 »
Ale ať nad tím dumám jak dumám, tak mi vychází, že dynamické typování je znouzecnost. Nemá žádné benefity. Pletu se?
dynamický jazyk umožňuje napsat většinu konstrukcí jako ve statickém jazyce bez nutnosti přesvědčovat typechecker, že víte co děláte, taky se snadněji implementuje (protože nepotřebuje typechecker)

Re:Co si myslíte o OOP?
« Odpověď #312 kdy: 31. 12. 2018, 17:45:52 »
Je tu nejakej pythonak, kterej by rekl, jestli je to pouzitelne?
Existující kód prostě běží dál, změny se projeví jenom v nově nataženém.


Kadet

Re:Co si myslíte o OOP?
« Odpověď #314 kdy: 31. 12. 2018, 17:49:22 »
Zajímalo  by mě pár kousků  těch bambilionu jiných, kde dynamické typování je vhodnější (nikoliv jediné technicky možné).
Neříkal jsem, že je vhodnější, ale že je bambilion případů, kdy musíš statické typování opustit a přejít na dynamické, protože prostě typ v době překladu neznáš. Je to jakákoliv situace, kdy data načítáš z externího zdroje. Z principu věci ti typový systém může zaručit, že je někde nějaký typ, jenom za předpokladu, že ten zdroj těch dat má pod kontrolou. Kdykoli načítáš ze sítě nebo z disku, typy nemáš.
Já nevím, tohle se mi nezdá. Když mám data z externího zdroje, stále to můžu otypovat. Typy dělají jakoby "cestičky". Prostě mám vstup od uživatele (co může být více nespolehlivé). A vím, typem určím, že buď zadá číslo, a pak ho zpracuju, nebo zadá nečíslo, a pak mu hodím chybovku. Tohle jde udělat compile-time.

Uvazujes tak, ze uz vis presne, co s temi prichozimi daty chces udelat. Tj. ziskat jmeno, cislo, pripadne hodit error, kdyz se to nepovede.

Ale aby sis moh s temi prichozimi daty hrat a prozkoumavat je, musis je bud plne otypovat nebo pouzit dynamicky typovani. Zjistili jsme ze plne typovat ty jsony nechces, dynamicky typovat je taky nechces, tak mi z toho vyplyva opet, ze potrebujes presny zadani, jinak odmitas pracovat.

To reprezentuje tu sortu programatoru, ktery se nehnou z mista, dokud nemaji precizne zpracovany zadani. S preciznim zadanim je pak suna fuk jestli pouzijes python nebo haskell, protoze jsi dostal definici vstupu a vystupu, tak z toho akorat napises funkci.

Programivani je ale casto o prozkoumavani moznych reseni. A proto v nejistych podminkach dynamicky jazyky vzdy zvitezily.