Co si myslíte o OOP?

Kit

Re:Co si myslíte o OOP?
« Odpověď #510 kdy: 05. 01. 2019, 23:58:23 »
Statické typování má tu výhodu, že taková situace jednoduše neexistuje. Pokud popletu vstupy, tak to na mě zařve kompilátor. Hned! Nemusím testovat, jestli ta funkce vyhodila nějakou chybu, protože jsem se překlpl. Spustu věcí nemusím dělat. Kód je kratší a přímočařejší.

Statické typování neodhalí logické chyby. Pokud napíši takovou funkci či metodu
Kód: [Vybrat]
float sin(float phi) {
    return 0.0;
}

tak kompilátorem v pohodě projde, ale je špatně. Navíc z ní vůbec není patrné, zda je parametr ve stupních, radiánech nebo v jiných jednotkách. Takže i ten typ "float" je de facto špatně, protože neobsahuje sémantiku. Když tam hodíš údaj v metrech, tak to typová kontrola nepozná. Takže bez testů se prostě neobejdeš, jinak ti podobná hloupá chyba proběhne až na produkci. Tam ti to neslítne, ale bude produkovat chybná data, což je ještě horší.


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #511 kdy: 05. 01. 2019, 23:58:42 »

A já se přitom nemusím bát, že se z nějakého podivného důvodu do nějaké pomocné funkce, která normálně dostává řetězce a volá na ně clear(), dostane jako parametr handle k databázi :)

Jestli potřebuješ staticky typovaný jazyk, aby sis byl jistý, že tvůj kód omylem nepromázne databázi, tak bys měl změnit obor. Nebo si alespoň pořídit hodně kvalitní pojistku na blbost.

Já už jsem ve svém programátorském životě viděl příliš mnoho chyb, které jsem buď sám udělal, nebo jsem je musel opravit, o nichž jsem byl přesvědčený, že nemohou nastat... :)

S trochou nadsázky - programátoři se dělí do několika podmnožin:
  • Ti, kteří dělají chyby, a nevědí, co s tím.
  • Ti, kteří dělají chyby, ale snaží se z nich poučit a snaží se používat nástroje, které jim pomohou chyby lépe odhalovat a odstraňovat.
  • Ti, kteří nedělají chyby.

Programátoři z první podmnožiny potřebují nabrat zkušenosti nebo, když toho nejsou schopni, najít si jiný obor. Programátoři z druhé podmnožiny dávají přednost staticky typovaným jazykům, protože jim pomáhají diagnostikovat chyby. Pro programátory ze třetí podmnožiny jsou lepší dynamicky typované jazyky, protože je nebrzdí v tvůrčím rozletu. Drobný problém je, že třetí podmnožina je prázdná.
+1

v

Re:Co si myslíte o OOP?
« Odpověď #512 kdy: 06. 01. 2019, 00:03:42 »
Navíc z ní vůbec není patrné, zda je parametr ve stupních, radiánech nebo v jiných jednotkách. Takže i ten typ "float" je de facto špatně, protože neobsahuje sémantiku. Když tam hodíš údaj v metrech, tak to typová kontrola nepozná.

Kód: [Vybrat]
sin :: Deg Float -> Float

Kit

Re:Co si myslíte o OOP?
« Odpověď #513 kdy: 06. 01. 2019, 00:07:42 »
S trochou nadsázky - programátoři se dělí do několika podmnožin:
  • Ti, kteří dělají chyby, a nevědí, co s tím.
  • Ti, kteří dělají chyby, ale snaží se z nich poučit a snaží se používat nástroje, které jim pomohou chyby lépe odhalovat a odstraňovat.
  • Ti, kteří nedělají chyby.

Programátoři z první podmnožiny potřebují nabrat zkušenosti nebo, když toho nejsou schopni, najít si jiný obor. Programátoři z druhé podmnožiny dávají přednost staticky typovaným jazykům, protože jim pomáhají diagnostikovat chyby. Pro programátory ze třetí podmnožiny jsou lepší dynamicky typované jazyky, protože je nebrzdí v tvůrčím rozletu. Drobný problém je, že třetí podmnožina je prázdná.

Popis druhé podmnožiny je neúplný. Patří do ní i programátoři, kteří píší testy.

Kit

Re:Co si myslíte o OOP?
« Odpověď #514 kdy: 06. 01. 2019, 00:11:38 »
Navíc z ní vůbec není patrné, zda je parametr ve stupních, radiánech nebo v jiných jednotkách. Takže i ten typ "float" je de facto špatně, protože neobsahuje sémantiku. Když tam hodíš údaj v metrech, tak to typová kontrola nepozná.
Kód: [Vybrat]
sin :: Deg Float -> Float

To je zápis signatury v Haskellu. Pokud sis nevšiml, tak nejenže to bylo napsáno v jiném jazyce, ale ani jsi nevyřešil problém s návratovou hodnotou.


anonym

Re:Co si myslíte o OOP?
« Odpověď #515 kdy: 06. 01. 2019, 00:31:43 »
Hosi, divejte se, resite tu uplne blbosti. K rozreseni vsech svych zivotnich otazek potrebujete jenom jednu vec, a to Javu. To je lek na vsechny vase psychicke neduhy. Musite jen poznat tu silu.

Timto uzaviram tuto diskuzi. Krcmi, muzes!


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #516 kdy: 06. 01. 2019, 00:33:50 »
S trochou nadsázky - programátoři se dělí do několika podmnožin:
  • Ti, kteří dělají chyby, a nevědí, co s tím.
  • Ti, kteří dělají chyby, ale snaží se z nich poučit a snaží se používat nástroje, které jim pomohou chyby lépe odhalovat a odstraňovat.
  • Ti, kteří nedělají chyby.

Programátoři z první podmnožiny potřebují nabrat zkušenosti nebo, když toho nejsou schopni, najít si jiný obor. Programátoři z druhé podmnožiny dávají přednost staticky typovaným jazykům, protože jim pomáhají diagnostikovat chyby. Pro programátory ze třetí podmnožiny jsou lepší dynamicky typované jazyky, protože je nebrzdí v tvůrčím rozletu. Drobný problém je, že třetí podmnožina je prázdná.

Popis druhé podmnožiny je neúplný. Patří do ní i programátoři, kteří píší testy.
Jako doplňek k statickým typů jsou samozřejmě testy výborným nástrojem.

Re:Co si myslíte o OOP?
« Odpověď #517 kdy: 06. 01. 2019, 00:34:48 »
Nevím, zda si rozumíte:
Jestliže ve Smalltalku přepíšu za běhu (Smalltalk má běh pořád) metodu, všechny instance dané třídy, přestože se nijak nezměnily, budou používat novou metodu, protože nositelem metod objektu je zde třída (způsob implementace metod). Když v Javascriptu změním kód, který generuje objekty včetně metod (bez "prototypování", ad-hoc), pak samozřejmě nové chování budou mít až ty nové objekty.
Taky nevím, jestli si rozumíme, ale to, co já chápu pod "hot code (re)loading" je každopádně to první, ne to druhé. Myslím, že jsem to několikrát celkem jasně napsal.

Re:Co si myslíte o OOP?
« Odpověď #518 kdy: 06. 01. 2019, 00:40:13 »
Je to ošetřený a rozhodnutý v době překladu. To je to co mě zajímá.
Nevím, jestli jsme si tady rozuměli. V době překladu víš jenom to, že
1. z externího zdroje dostaneš posloupnost bajtů (vstup uživatele nebo síťový packet)
2. víš, že bys chtěl, aby ta posloupnost bajtů byl nějaký typ (např. integer zakódovaný jako string)

Jestli se tvoje "compile time přání" v run time splní nebo ne - to není nic jiného než dynamické typování.

Re:Co si myslíte o OOP?
« Odpověď #519 kdy: 06. 01. 2019, 00:41:25 »
V JVM, co jsem se dočetl, hot reloading jde, ale nemůžeš měnit signatury ani odstraňovat nebo přidávat metody. Takže vlastně můžeš jenom měnit implementaci existujících věcí.
A to je právě jedním z důsledků toho, že Java nemá zasílání zpráv, ale volání funkcí.
Intuitivně bych to taky tak tipoval. Ale nemám dostatek erudice, abych to mohl tvrdit s jistotou :)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #520 kdy: 06. 01. 2019, 00:45:16 »
Je to ošetřený a rozhodnutý v době překladu. To je to co mě zajímá.
Nevím, jestli jsme si tady rozuměli. V době překladu víš jenom to, že
1. z externího zdroje dostaneš posloupnost bajtů (vstup uživatele nebo síťový packet)
2. víš, že bys chtěl, aby ta posloupnost bajtů byl nějaký typ (např. integer zakódovaný jako string)

Jestli se tvoje "compile time přání" v run time splní nebo ne - to není nic jiného než dynamické typování.
Podstatné je, že já sice chci integer, ale stroj ví, že to nemusí být jen integer. A tak mě přinutí, compile-time, ošetřit obě možnosti.

(Jsem si vědom, že to není univerzální pravda, a že ne každý staticky typovaný jazyk se bude takto chovat. Ale je to má motivace, proč ano, a proč ne dynamické.)

Kadet

Re:Co si myslíte o OOP?
« Odpověď #521 kdy: 06. 01. 2019, 00:45:37 »
Je tu nejak mnohi zastancu statickejo typovani. Prijde mi, ze maji spoustu casu na psani na internetu a zapasenim s kompilatorem.

Mezitim lidi v Pythonu dodavaji vysledky a nemusi o tom zvanit.

Ono tech praci v haskellu stejne ani moc neni, mad nekde na akademii. Chapu ze to mrzi ze se s haskellem uzivi jen hrstka lidi.

https://www.reddit.com/r/haskell/comments/635d05/haskell_or_other_fp_programmer_positions_in_europe/

Re:Co si myslíte o OOP?
« Odpověď #522 kdy: 06. 01. 2019, 00:46:46 »
Pro případ, že by to Blbcovi uniklo, tenhle příspěvek si myslím stojí za samostatné téma, tak jsem si ho dovolil založit :)

Existujou validní programy, který statickej jazyk neuzná. Žádnej statickej typovej systém nebude nikdy dostatečně silnej na to, aby uznal všechny validní programy - viz Godelovy věty o nekompletnosti.

https://forum.root.cz/index.php?topic=20479

Re:Co si myslíte o OOP?
« Odpověď #523 kdy: 06. 01. 2019, 00:52:17 »
Podstatné je, že já sice chci integer, ale stroj ví, že to nemusí být jen integer. A tak mě přinutí, compile-time, ošetřit obě možnosti.

(Jsem si vědom, že to není univerzální pravda, a že ne každý staticky typovaný jazyk se bude takto chovat. Ale je to má motivace, proč ano, a proč ne dynamické.)
No, skoro bych řekl, že to je univerzální pravda. Protože ten jazyk prostě musí nějak ošetřit tu druhou možnost.

Čili, jinak řečeno: myslím, že tady propadáš falešnému dilematu: není tady žádný rozdíl mezi statickým a dynamickým jazykem. "Statický" tě typicky donutí tu eventualitu explicitně ošetřit, dynamický typicky vyhodí výjimku (přičemž to, že máš povinnost nějak ošetřit výjimky je implicitní).

Nehádám se s tebou, přijde mi taky lepší mít explicitně dvě větve, když tam věcně nutně jsou, ale nevidím mězi těmi dvěma možnostmi, jak k tomu přistupovat, tak světodějný rozdíl jako ty ;)

Re:Co si myslíte o OOP?
« Odpověď #524 kdy: 06. 01. 2019, 00:54:31 »
Dá se pro libovolný program napsat testovací sada, která nalezne všechny chyby, jež by nalezla statická typová kontrola, a přitom nebude zahrnovat (jakkoliv zakamuflovanou) statickou typovou kontrolu?
Ne

Já si to myslím taky, ale na akademickou otázku by mě zajímala akademická odpověď, tedy přeformulování otázky do formální podoby a matematický důkaz...
Mě by zas enormně zajímalo, jak bys chtěl vágní pojmy typu "jakkoliv zakamuflovaná statická typová kontrola" přeformulovat do formální podoby :)