Co si myslíte o OOP?

Kit

Re:Co si myslíte o OOP?
« Odpověď #600 kdy: 06. 01. 2019, 20:36:25 »
To je, spolu s dalšími změnami včetně anotací typů odpověď vývojářů jazyka na otázku, zda by se příklon ke statickým programovacím jazykům přece jenom občas nehodil.
Příklon ke statičnosti se hodí vždycky, to může popírat jenom někdo s hodně velkýma klapkama na očích.

Statické typy používám v PHP také, ale jen tam, kde to dává smysl - zejména v rozhraní. V kolekcích už význam nemají.

Dynamické typování přináší jednu užitečnou vlastnost: Program je možné snadno řídit tokem dat.


Kit

Re:Co si myslíte o OOP?
« Odpověď #601 kdy: 06. 01. 2019, 20:39:11 »
Proto pokud potřebuju v dynamickém jazyce nějak reagovat na "všechny typy", není jich zas tak moc.
To je sice možné, ale když si mám vybrat mezi: kontrolovat, zda přišel správný typ, a pokud ne, tak chcípnout; a mezi tím, že vždy přijde správný typ...

Proč by měl program v dynamicky typovaném jazyce chcípat, když nepřijde ten správný typ? Tenhle FUD opakuješ pořád dokola. Zbytečně.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #602 kdy: 06. 01. 2019, 20:46:09 »
To je sice možné, ale když si mám vybrat mezi: kontrolovat, zda přišel správný typ, a pokud ne, tak chcípnout; a mezi tím, že vždy přijde správný typ...
Souhlasím, ale to jsi skočil do jiného tématu. My jsme pořád ještě u toho, že dynamické typování je vlastně jenom takový "trochu širší" součtový typ :)
Pardon :-)

Já si myslím, že není. Protože dynamické typování je úplně jiná (samozřejmě špatná) filozofie programování. Ale nerad bych se opakoval. :-)
« Poslední změna: 06. 01. 2019, 20:48:43 od BoneFlute »

Re:Co si myslíte o OOP?
« Odpověď #603 kdy: 07. 01. 2019, 00:47:42 »
Já si myslím, že není. Protože dynamické typování je úplně jiná (samozřejmě špatná) filozofie programování. Ale nerad bych se opakoval. :-)
To se nevylučuje. Používat v celém programu takhle široký součtový typ je úplně jiná (podle někoho samozřejmě špatná) filosofie programování ;)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #604 kdy: 07. 01. 2019, 01:31:54 »
Já si myslím, že není. Protože dynamické typování je úplně jiná (samozřejmě špatná) filozofie programování. Ale nerad bych se opakoval. :-)
To se nevylučuje. Používat v celém programu takhle široký součtový typ je úplně jiná (podle někoho samozřejmě špatná) filosofie programování ;)

Nejde o to, že je špatná.

Když napíšu staticky typovanej program, tak je to jako když si vypálím cestičky, kterým potom tečou data. Ty jednotlivé typy kontrolujou, zda jsou jednotlivé cesty na sebe správně napojený. Druhý význam typů je, že určuje odbočky. Například parsování čísla.
V dynamickém jazyce typy slouží jako aserty při vstupech. A jako informace, podle kterého může (ale nemusí) můj if udělat odbočku (ve statickém jazyce si tu odbočku musím připravit).

Kód: [Vybrat]
type Person = {name: String, surname: String, age: Int}

parsePerson(s: String) : Maybe Person = ...

str.concat (a: String, b: String) = ...

readIO(io) =
    case (parsePerson(io.read())):
        Just x -> console.log str.concat("person: ", x)
        Nothing -> console.error "Je třeba definice Person."
Dá se to zapsat v statickém i dynamickém jazyce. V obou použiju stejný druh typu. Dokonce stejnou konstrukci (ač u dynamických jazyků jsou obvyklejší výjimky). Jenže dynamický jazyk tu chybu pustí.

Přijde mi, že se používá stejný nástroj (typ), ale každý úplně jiným způsobem.


Re:Co si myslíte o OOP?
« Odpověď #605 kdy: 07. 01. 2019, 01:40:27 »
Asi se už dost opakujeme, ale tak co už :) Ve všem souhlas, jenom tomuhle nerozumím:

Jenže dynamický jazyk tu chybu pustí.

V dynamickém jazyce bude výsledkem parsePerson buď hodnota typu Person nebo výjimka, ve statickém buď Just Person nebo Nothing. Nevidím tam žádný zásadní "světodějný" rozdíl. Jediný rozdíl, který tam vidím (a souhlasím, že je docela podstatný), je, že statický jazyk tě donutí obě varianty explicitně ošetřit, zatímco dynamický tě klidně nechá výjimku nechat probublat až do main a nechat program spadnout v produkci :)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #606 kdy: 07. 01. 2019, 02:06:26 »
Asi se už dost opakujeme, ale tak co už :) Ve všem souhlas, jenom tomuhle nerozumím:

Jenže dynamický jazyk tu chybu pustí.

V dynamickém jazyce bude výsledkem parsePerson buď hodnota typu Person nebo výjimka, ve statickém buď Just Person nebo Nothing. Nevidím tam žádný zásadní "světodějný" rozdíl. Jediný rozdíl, který tam vidím (a souhlasím, že je docela podstatný), je, že statický jazyk tě donutí obě varianty explicitně ošetřit, zatímco dynamický tě klidně nechá výjimku nechat probublat až do main a nechat program spadnout v produkci :)

V tom řádku s Just je právě schválně chyba. Kde statický jazyk si "všimne" při překladu, že x není string. To považuju za dost "světodějný".

Re:Co si myslíte o OOP?
« Odpověď #607 kdy: 07. 01. 2019, 02:11:31 »
V tom řádku s Just je právě schválně chyba. Kde statický jazyk si "všimne" při překladu, že x není string. To považuju za dost "světodějný".
Ajo, promiň, toho jsem si nevšiml. Ale co tím demonstruješ? Jenom to, že statické jazyky umí některé chyby odhalit už v době překladu. To ale přece všichni víme, ne?!

A proč to demonstrovat tak krkolomně? Stačilo úplně:

Kód: [Vybrat]
def some_func_anywhere():
  return 1 + "x"
- Python ti tohle ochotně pustí do produkce i když by to krásně mohl odhalit. No, je to tak, dělá míň práce, než by mohl :)

Kit

Re:Co si myslíte o OOP?
« Odpověď #608 kdy: 07. 01. 2019, 02:12:03 »
Asi se už dost opakujeme, ale tak co už :) Ve všem souhlas, jenom tomuhle nerozumím:
Jenže dynamický jazyk tu chybu pustí.
V dynamickém jazyce bude výsledkem parsePerson buď hodnota typu Person nebo výjimka, ve statickém buď Just Person nebo Nothing. Nevidím tam žádný zásadní "světodějný" rozdíl. Jediný rozdíl, který tam vidím (a souhlasím, že je docela podstatný), je, že statický jazyk tě donutí obě varianty explicitně ošetřit, zatímco dynamický tě klidně nechá výjimku nechat probublat až do main a nechat program spadnout v produkci :)

Nevidím důvod, proč by v dynamicky typovaném jazyce měla aplikace padat v produkci. Ovšem pokud někdo píše testy jen podle metrik...

Statické typy neodhalí logickou chybu v kódu. V tom případě bude vývojář spokojen, že se mu aplikace hezky zkompilovala, ale bude mu produkovat vadná data - což je ještě horší, než kdyby na té produkci spadla.

Re:Co si myslíte o OOP?
« Odpověď #609 kdy: 07. 01. 2019, 02:19:38 »
Nevidím důvod, proč by v dynamicky typovaném jazyce měla aplikace padat v produkci. Ovšem pokud někdo píše testy jen podle metrik...
Mohl úplně jednoduše na otestování nějakého edge casu zapomenout. Probublal mu None někam, kde správně neměl být povolený, uložilo se to na disk, nikdo na ty data deset let nešáhl a nikdo už dneska neví, že tam kdysi None být mohl.

Jistě, můžeš si vymýšlet pohádky o tom, že to byla změna kontraktu, která měla být zaznamenána do dokumentace a bla bla bla. Ať si ten důvod pojmenuješ jak chceš, tak výsledek je stejný: spadlo to v produkci.

Kit

Re:Co si myslíte o OOP?
« Odpověď #610 kdy: 07. 01. 2019, 02:20:49 »
A proč to demonstrovat tak krkolomně? Stačilo úplně:
Kód: [Vybrat]
def some_func_anywhere():
  return 1 + "x"
- Python ti tohle ochotně pustí do produkce i když by to krásně mohl odhalit. No, je to tak, dělá míň práce, než by mohl :)

Nepustí:
Kód: [Vybrat]
File "list.py", line 11, in some_func_anywhere
    return 1 + "x"
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Re:Co si myslíte o OOP?
« Odpověď #611 kdy: 07. 01. 2019, 02:22:09 »
Nepustí:
No dobře, tak ten string bude trochu víc zakuklenej no. Třeba do atributu.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #612 kdy: 07. 01. 2019, 03:23:17 »
Ajo, promiň, toho jsem si nevšiml. Ale co tím demonstruješ? Jenom to, že statické jazyky umí některé chyby odhalit už v době překladu. To ale přece všichni víme, ne?!

Pokoušel jsem se na ladit ne ten váš problém, co řešíte. Evidentně se mi to nepovedlo :-)

Re:Co si myslíte o OOP?
« Odpověď #613 kdy: 07. 01. 2019, 03:27:37 »
Pokoušel jsem se na ladit ne ten váš problém, co řešíte. Evidentně se mi to nepovedlo :-)
Ne, nepovedlo :) Pointa je v tom, že v obou systémech se program větví na základě typu a v obou k tomu dojde až za běhu.

To, co's udělal, je, že jsi do té jedné větve dal chybu, kterou dynamický jazyk neodhalí. Ale tím jsi nic nového neřekl - je totiž úplně jedno, jestli takovou chybu dáš hned na začátek té větve (hned ze matchnutí Just x) nebo až někam za deset jiných volání jiných funkcí :) Prostě pořád je to ta samá chyba.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #614 kdy: 07. 01. 2019, 03:46:54 »
Ne, nepovedlo :) Pointa je v tom, že v obou systémech se program větví na základě typu a v obou k tomu dojde až za běhu.
Ale jen u toho dynamického dojde za běhu k tomu "vymejšlení". (Což je ale také věc, kde záleží na tom, jak se to vezme.)

Čo chceš dokázat?