Python - zbožňovaný lidmi?

v

Re:Python - zbožňovaný lidmi?
« Odpověď #120 kdy: 17. 09. 2017, 10:50:39 »
Pokud jde o typy, tak tam je jasno. Je to otrava. Ale ideální stav je, když přímo kompilátor vypíše, že je něco špatně, a odmítne vypotit binárku. Větší otrava je totiž hledat, kde že to do proměnné s teplotou člověk cpe tlak. Jednodušší je říct kompilátoru, že tohle není obecný číslo, ale teplota a pokud tam naleju něco jinýho, tak ať dá vědět. A současně s tím mu můžu dát vědět, jak velkou paměť má pro tu danou věc alokovat,... Proto jsem zastánce silné typové kontroly. A ideálem je možnost s typem svázat i konverzní rutiny pro jiný typy (v C++ přetížení operátoru =), předdefinovat defaultní hodnoty, pojmenovat významný hodnoty pro ladění (Null, NaN, EmptyList,..). A využití v šablonách, samozřejmě, jinak se kód zbytečně duplikuje.

Pro silnou typovou kontrolu za běhu jsou v Pythonu dekorátory. Záleží však jen na vývojáři, jak moc je chce využívat - nejsou totiž povinné.

Staticky můžeš dělat typovou kontrolu jen v testech, neboť Python je interpretr a v době překladu vůbec nemusí tušit, do jaké podoby se aplikace sestaví za běhu.

Ovšem ani kompilované jazyky na tom nejsou o mnoho lépe, například v Javě projde přes statickou typovou kontrolu v pohodě i null a v navazujícím kódu za běhu vyhazuje oblíbené výjimky NullPointerException.
moje babička, budiž jí země lehká, by vám řekla "mluvi mluvi a duša v něm spi", já bych dodal, že fakt není jediný kompilovaný jazyk


Re:Python - zbožňovaný lidmi?
« Odpověď #121 kdy: 17. 09. 2017, 12:53:48 »
Ovšem ani kompilované jazyky na tom nejsou o mnoho lépe, například v Javě projde přes statickou typovou kontrolu v pohodě i null a v navazujícím kódu za běhu vyhazuje oblíbené výjimky NullPointerException.
Což je správně, protože null je legitimní hodnota daného typu. Chyba je právě v tomhle, ne v typovém systému (v tomhle případě).

Citace
I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.
T. Hoare

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #122 kdy: 17. 09. 2017, 13:32:10 »
Ovšem ani kompilované jazyky na tom nejsou o mnoho lépe, například v Javě projde přes statickou typovou kontrolu v pohodě i null a v navazujícím kódu za běhu vyhazuje oblíbené výjimky NullPointerException.
Což je správně, protože null je legitimní hodnota daného typu. Chyba je právě v tomhle, ne v typovém systému (v tomhle případě).

PHP 7.0 null za legitimní hodnotu nepovažuje a je to tak správně.

Re:Python - zbožňovaný lidmi?
« Odpověď #123 kdy: 17. 09. 2017, 13:57:37 »
PHP 7.0 null za legitimní hodnotu nepovažuje a je to tak správně.
Nejen PHP 7 :) https://stackoverflow.com/a/34570644/3150343

P.S. zásadní jazyk, který tam chybí, je Scala.
« Poslední změna: 17. 09. 2017, 14:00:09 od Mirek Prýmek »

Lemming

Re:Python - zbožňovaný lidmi?
« Odpověď #124 kdy: 17. 09. 2017, 14:53:03 »
P.S. zásadní jazyk, který tam chybí, je Scala.

No a pak tam chybí i ta Java, která od verze 8 rovněž má Optional typ.

Ale jak už bylo napsáno výše, problém s NPE opravdu není ve špatné typové kontrole.


Re:Python - zbožňovaný lidmi?
« Odpověď #125 kdy: 17. 09. 2017, 15:50:39 »
No a pak tam chybí i ta Java, která od verze 8 rovněž má Optional typ.
Nejde ani tak o to, jestli ho jazyk má, jako spíš nakolik se v něm používá (např. ve standardní knihovně).

Kate

Re:Python - zbožňovaný lidmi?
« Odpověď #126 kdy: 17. 09. 2017, 17:00:28 »
No a pak tam chybí i ta Java, která od verze 8 rovněž má Optional typ.
Nejde ani tak o to, jestli ho jazyk má, jako spíš nakolik se v něm používá (např. ve standardní knihovně).
Asi tak. On je optional už i v C++ (17), ale proti Rustu kde je jeho použití prakticky nutnost je to krapet jinde.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #127 kdy: 17. 09. 2017, 17:10:09 »
Jenom na okraj, je třeba rozlišovat dynamické a statické typování. Python je silně dynamicky typovaný jazyk. V praxi se hodí oboje. Občas třeba šílím při tvorbě generických tříd ve staticky typovaném jazyku a přemýšlím, že bych tam vlastně chtěl mít možnost dynamických typů. Jindy si statické typy pochvaluji, protože mám přehled a výborně se to refaktoruje.

Takže ono to je zase jako se vším. Praxe není černobílá, a je třeba se vždy rozhodnout dle konkrétního problému který se má řešit.

Chybný přístup je imho vybrat si nějaký jazyk a ten cpát na všechno. Přednost má mít zadání úkolu, jeho analýza a z té pak vyplyne co se hodí použít.

Chytrej programátor se učí používat více jazyků a pečlivě volí, který zrovna použije.

s tímhle naprosto souhlasím. Bavíme se zde o webovém frontendu a borci sem tahají C a assembler. K typování - viděl jsem dost projektů ve statických jazycích, na které se bál kdokoliv sáhnout a naopak přehledné a protestované projekty a knihovny v dynamických jazycích. V JS používám flow, ale nevidím v tom jen samé výhody.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #128 kdy: 17. 09. 2017, 17:29:47 »
Větší otrava je totiž hledat, kde že to do proměnné s teplotou člověk cpe tlak. Jednodušší je říct kompilátoru, že tohle není obecný číslo, ale teplota a pokud tam naleju něco jinýho, tak ať dá vědět. A současně s tím mu můžu dát vědět, jak velkou paměť má pro tu danou věc alokovat,... Proto jsem zastánce silné typové kontroly.

Chyby tohoto typu se často stávají při přehození pořadí parametrů funkce nebo konstruktoru v jazycích neumějících pojmenované parametry.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #129 kdy: 17. 09. 2017, 17:38:50 »
Pro silnou typovou kontrolu za běhu jsou v Pythonu dekorátory. Záleží však jen na vývojáři, jak moc je chce využívat - nejsou totiž povinné.

Staticky můžeš dělat typovou kontrolu jen v testech, neboť Python je interpretr a v době překladu vůbec nemusí tušit, do jaké podoby se aplikace sestaví za běhu.

Ovšem ani kompilované jazyky na tom nejsou o mnoho lépe, například v Javě projde přes statickou typovou kontrolu v pohodě i null a v navazujícím kódu za běhu vyhazuje oblíbené výjimky NullPointerException.

Myslíte něco jako typecheck dokorátor? Ten není moc použitelný. Kontrolovat za běhu, že pole intů je skutečně pole intů, by bylo dost neefektivní. Pro statickou kontrolu neslouží testy, ale nástroje jako Mypy.

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #130 kdy: 17. 09. 2017, 17:43:25 »
Větší otrava je totiž hledat, kde že to do proměnné s teplotou člověk cpe tlak. Jednodušší je říct kompilátoru, že tohle není obecný číslo, ale teplota a pokud tam naleju něco jinýho, tak ať dá vědět. A současně s tím mu můžu dát vědět, jak velkou paměť má pro tu danou věc alokovat,... Proto jsem zastánce silné typové kontroly.

Chyby tohoto typu se často stávají při přehození pořadí parametrů funkce nebo konstruktoru v jazycích neumějících pojmenované parametry.

S pojmenovanými parametry je v některých jazycích trochu potíž. V PHP jsem to nahradil předáváním hodnot přes array a dost se mi to osvědčilo. Metoda si snadno zkontroluje, zda má všechna potřebná data a provede požadovanou akci.

Array se v PHP předává hodnotou (líná kopie), objekt odkazem. I to je dobré brát v potaz. V Pythonu bude asi vše odkazem, nebo snad ne? Zas tak dalece jsem Python nezkoumal.

atarist

Re:Python - zbožňovaný lidmi?
« Odpověď #131 kdy: 17. 09. 2017, 17:50:48 »
S pojmenovanými parametry je v některých jazycích trochu potíž. V PHP jsem to nahradil předáváním hodnot přes array a dost se mi to osvědčilo. Metoda si snadno zkontroluje, zda má všechna potřebná data a provede požadovanou akci.

Array se v PHP předává hodnotou (líná kopie), objekt odkazem. I to je dobré brát v potaz.

Takže k parametrům přistupuješ přes indexy toho pole? tyjo...

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #132 kdy: 17. 09. 2017, 17:52:08 »
Myslíte něco jako typecheck dokorátor? Ten není moc použitelný. Kontrolovat za běhu, že pole intů je skutečně pole intů, by bylo dost neefektivní. Pro statickou kontrolu neslouží testy, ale nástroje jako Mypy.

Není náhodou Mypy jen jinou implementací dekorátorů pro typovou kontrolu? Pokud je to jen pro statickou typovou kontrolu, tak se IMHO jedná jen o sadu unifikovaných jednotkových testů, což samozřejmě není špatně.

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #133 kdy: 17. 09. 2017, 17:57:50 »
S pojmenovanými parametry je v některých jazycích trochu potíž. V PHP jsem to nahradil předáváním hodnot přes array a dost se mi to osvědčilo. Metoda si snadno zkontroluje, zda má všechna potřebná data a provede požadovanou akci.

Array se v PHP předává hodnotou (líná kopie), objekt odkazem. I to je dobré brát v potaz.

Takže k parametrům přistupuješ přes indexy toho pole? tyjo...

To není pole, ale slovník či seznam. Pole by mi k ničemu nebylo, neboť by mi chyběly ty názvy.

Ovšem může to být jakákoli struktura, například strom. Vždy si však musím rozmyslet, zda ji potřebuji předat hodnotou či odkazem. Například u $_POST je to vcelku jedno, neboť jeho obsah (snad) nikdo nemění. Přesto ho předávám pro jistotu hodnotou.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #134 kdy: 17. 09. 2017, 17:59:35 »
S pojmenovanými parametry je v některých jazycích trochu potíž. V PHP jsem to nahradil předáváním hodnot přes array a dost se mi to osvědčilo. Metoda si snadno zkontroluje, zda má všechna potřebná data a provede požadovanou akci.

Array se v PHP předává hodnotou (líná kopie), objekt odkazem. I to je dobré brát v potaz.

Takže k parametrům přistupuješ přes indexy toho pole? tyjo...

v PHP se slovník nazývá pole.