Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - BoneFlute

Stran: 1 ... 61 62 [63] 64 65 ... 133
931
Vývoj / Re:Co si myslíte o OOP?
« kdy: 06. 01. 2019, 05:01:39 »
Na tom příkladu se sinusem bych chtěl vidět jednu věc: chci, aby parametrem mohl být i zlomek, nejen float...
A výsledek chci mít možnost obojí, podle toho, jak to vyjde, abych neztratil přesnost výpočtu. Ha?
To je triviální, prostě rozhraním.
Díky, člověk rychle zapomene, že je něco takového ve statických jazycích potřeba...

Ve statických jazycích je nutné ho i implementovat nějakou přetíženou metodou.
Kite, Kite. Ty kdyby si tomu aspoň rozuměl, co?

Kód: [Vybrat]
type RatioNum = RatioNum Num
          |  RatioNumFract Num Num
          deriving show

sin :: RatioNum -> RatioNum
sin RatioNum num = ...
sin RatioNumFract num denom = ...

print $ sin (RatioNum 5)
print $ sin (RatioNumFract 5 2)

932
Vývoj / Re:Co si myslíte o OOP?
« kdy: 06. 01. 2019, 01:54:15 »
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ěď
Tak třeba typová kontrola umí zajistit, že funkce vrací sudé číslo. Testem to nejde, nejsou-li ty výsledky shora omezené.
Pouštíš se na tenkej led :-) Bohatě stačí, že typová kontrola umí zajistit, že funkce vrátí celé číslo. Už v takovém případě test nebude stačit.

933
Vývoj / Re:Co si myslíte o OOP?
« kdy: 06. 01. 2019, 01:48:24 »
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 ;)

:-)

Pro mě je to úplně-extrémně-maximálně-úplně-ultimátně-základně-úplně nutný.

Primus: Dynamický jazyk mě obvykle nepřinutí ošéfovat tu druhou větev (čest výjimkám). Zapomenu na to. Vždycky. Každej. I Kit. Zatímco v Staticky typovaném jazyce, když tu větev zamatlám, a neošetřím to (ne, že by to nešlo), tak je to moje vědomé, opakovaně varované, rozhodnutí.
Secundus: Dynamický jazyk tu větev projde na produkci, což je naprosto pozdě.

934
Vývoj / Re:Co si myslíte o OOP?
« 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é.)

935
Vývoj / Re:Co si myslíte o OOP?
« 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.

936
Vývoj / Re:Co si myslíte o OOP?
« 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

937
Vývoj / Re:Co si myslíte o OOP?
« kdy: 05. 01. 2019, 23:42:16 »
Kód: [Vybrat]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

def vypis(kolekce):
    print(type(kolekce))
    for i in kolekce:
        print(i)
    print()

seznam = ["Alfa", 42, 42, ("Beta", "Gamma")]
mnozina = {"Alfa", 42, 42, ("Beta", "Gamma")}
vypis(seznam)
vypis(mnozina)

Jak vidíš, tak proceduře vypis() je v daném případě jedno, zda jí předhodíš seznam nebo množinu. Vypíše obojí. Pokud je budu potřebovat rozlišit, stále ještě mohu použít reflexi.

Tento příklad krásně ilustruje problém dynamicky typovaných jazyků. Procedura vypis() implicitně předpokládá, že parametr kolekce se dá iterovat a že iterací dostanu objekty, pro které má smysl volat print(). Když nebudou splněny obě tyto podmínky, funkce havaruje. Pravděpodobně vyhodí nějakou výjimku, kterou buď očekávám a musím na ni nějak zareagovat, nebo výjimka shodí celý program. Kdybych se chtěl výjimce vyhnout, musel bych v kódu nějak ošetřit chování funkce pro všechny typy, které nejsou "iterable<printable>". Ovšem ze zadání může plynout, že nemá smysl volat vypis() na takové typy. Ve staticky typovaném jazyce bych jednoduše přidal parametru kolekce typ iterable<printable> a mohl bych se spolehnout, že případné chyby odhalí kompilátor při překladu. V dynamicky typovaném jazyce můžu tento požadavek tak akorát napsat do dokumentace a případně doufat, že na každé použití této funkce někdo napíše test, že se v tom kokrétním místě vždy volá se správným typem.

Na tomto příkladu můžeme vidět ještě jednu vlastnost dynamických typů.

Jsem pečlivý programátor, a do tý funkce print() dám aserci, abych varoval, že vkládám špatné vstupy. Tím dosáhnu toho, že ta funkce bude házet výjimky, což je ale další rozměr, který té funkci přidám. Ty výjimky musím ne/odchytit. Nesmí se mi poplést. Neměl bych je přehlédnout. A hlavně, hmm, kdy vlastně nastane? Díky Murphymu, tak na produkci, a budu rád, když budu logovat.

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ší.

938
Vývoj / Re:Co si myslíte o OOP?
« kdy: 05. 01. 2019, 02:18:52 »
Chlape, ty si nejdřív něco nastuduj o typových systémech, než budeš rozdávat pravdy.
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.

http://logan.tw/posts/2014/11/12/soundness-and-completeness-of-the-type-system/

Opět, Přijde mi to jako kombinace 2ky a neznalosti. Samozřejmě, že tento problém existuje, a statické jazyky si s ním umějí poradit.

939
Vývoj / Re:Co si myslíte o OOP?
« kdy: 04. 01. 2019, 20:49:57 »
Ja to vidim podobne jako Inkvizitor - taky jsem Python zacal pouzival okolo roku 2001, a v te dobe to bylo prijemne jednodussi nez vsechno ostatni okolo. Pozdeji jsem si oblibil Common Lisp a Haskell, ale Python mi porad jde nejlepe.

Ale zacinat znovu, tak rovnou u Haskellu... jak uz jsem ti psal, s dobrou typovou inferenci se vyhoda dynamickeho typovani znacne snizuje. Takze pocitam, ze soucasny trend je (velmi pomaly) postupny navrat ke statickemu typovani diky rozsireni typove inference.
Takže když si to shrnu, dynamické typování nemá žádné principielní výhody. Jen je to zkrátka a dobře jednodužší na implementaci a naučení. Můžeme se bavit o tom, že je tu jakýsi historický balast, který si vývojáři nesou (například představa ukecanosti, představa pouze základních typů, nepochopení důsledků typové kontroly, etc) vytvářející mýtus výhod, ale jinak asi nic výraznějšího tam nebude. Souhlas?

940
Vývoj / Re:Co si myslíte o OOP?
« kdy: 04. 01. 2019, 20:20:58 »
Jako starý Pythonista...
Mohu tě požádat o odpověď na mou otázku?

Důvody pro použití dynamických typů:
1. za běhu měnitelný systém (znám jen Erlang)
2. prototypování (takové to, když potřebuješ jen něco zkusit, a upřesňovat to budeš pozdějc)
3. neumím, nebo jazyk neumí typy

Doplníš další? (Kromě těchto scénářů nevím o ničem, kdy by netypování (př. dynamické typování) bylo užitečné.)
4. genericke programovani
5. flexibilita
6. jednodussi (prehlednejsi) kod
7. introspekce
8. interaktivita
Hele viděl jsi někdy nějaký moderní statický typovaný jazyk?
Nevim co povazujes za moderni. Znam ty, ktere se se pouzivaji a je potreba je znat. C, C#, Java. Na akademicke jako je Haskell neplytvam casem.
Aha. Takže houby víš, ale názor se ti už udělal.
To bych nerekl. Zabyvam se tim pragmaticky. I kdyby haskell nebyl tak tezkopadny, jako v praxi pouzivane staticke jazyky, tak je to bezvyznamna zajimavost, protoze v praxi je to nepouzitelny jazyk. Zajimaji me a posuzuji vlastnosti praktickych jazyku.

A že půlka těch věcí neplatí ani u Javy třebas o F# nebo Scale nemluvě...
Že i na takovou obludu jako je javascript se roubujou typy (Flow, google-closure, TypeScript), protože bez nich žádnou větší aplikaci prostě neudržíš.

941
Vývoj / Re:Co si myslíte o OOP?
« kdy: 04. 01. 2019, 19:34:49 »
Hele viděl jsi někdy nějaký moderní statický typovaný jazyk?
Nevim co povazujes za moderni. Znam ty, ktere se se pouzivaji a je potreba je znat. C, C#, Java. Na akademicke jako je Haskell neplytvam casem.
S tou Javou a C# jsi si jist? ;-)

942
Vývoj / Re:Co si myslíte o OOP?
« kdy: 04. 01. 2019, 19:32:06 »
Takže zpátky k výhodám Pythonu - čitelnost, dobrá komunita, batteries included, v jazyku se cítím docela přirozeně. Pro prototypy je celkem super a i větší věci se v něm dají dělat, ne že ne. Dobré je, že můžeš mít kolekce s různorodými prvky, prostě se s tím hezky pracuje a zároveň se vždycky můžeš vyptat, co je ten prvek zač a podle toho s ním naložit. Prostě hezká hračka, lego, které se dá použít i na praktické věci. Mám ty výhody zobecňovat? Perl nesnáším, Ruby nemusím, Smalltalk je úplně jiný svět, PHP beru jako praktický nástroj, ale jinak mi taky nejde moc od ruky.

Co se mi líbí:

1. Neukecaná syntaxe - to ale řeší i typová inference apod.
2. Vysokoúrovňové idiomy a datové struktury - to je ale obecný trend a není to statická ani dynamická věc
3. Automatická správa paměti (ať už jde o RC, GC nebo paměťový model a la Rust)
4. Kvalitní knihovny
5. Dobré nástroje pro organizaci kódu - moduly, balíčky apod.

Python mnohé z toho splňuje, jiné jazyky taky. Dynamické typování nepovažuju za takovou výhodu. Python to dělá takhle a docela mu to jde. Jiné jazyky to umí jinak. Kdybych si mohl svobodně zvolit jazyk, šel bych spíš cestou Rustu/Scaly/Haskellu/F#. Python mě živí, umím ho nejlíp a často je to pragmaticky správná volba. Ale z dynamických vlastností nedělám fetiš, na těch to nestojí. Spousta věcí se díky nim dá spíchnout skoro "zadarmo", jenže má to samozřejmě dlouhodobé náklady. Důležitý je proces a produkt. A svět programovacích jazyků se vyvíjí k lepšímu - i Python.
Podepisuju se.

A díky!

Já tedy postupem času u dynamických jazycích přešel na Luu, protože mi přijde taková subtilnější a rychlejší. A stejně jsem vždycky narazil na to, že tam spousta věcí musím zase dělat ručně. V porovnání s Haskellem je to jako dláto verzus CNC soustruh. Dláto mohu použít hned, jednoduše, a nemusím nic řešit. Ale taky se udřu.

943
Vývoj / Re:Co si myslíte o OOP?
« kdy: 04. 01. 2019, 19:16:27 »
Jako starý Pythonista...
Mohu tě požádat o odpověď na mou otázku?

Důvody pro použití dynamických typů:
1. za běhu měnitelný systém (znám jen Erlang)
2. prototypování (takové to, když potřebuješ jen něco zkusit, a upřesňovat to budeš pozdějc)
3. neumím, nebo jazyk neumí typy

Doplníš další? (Kromě těchto scénářů nevím o ničem, kdy by netypování (př. dynamické typování) bylo užitečné.)

4. pripady, kdy staticky typovy system je prilis prisny a nepovoli preklad programu, ktery by dynamicky jazyk v pohode zvladnul a navic je takovy program lidsky intuitivni
Jediné co se mi vybavilo jsou IO monády v Haskellu. Jinak mě nenapadá, kdy by měl být typový systém příliš přísný. A i u těch IO monádách je to vlastně lepší, než bez toho.

Přijde mi to jako kombinace 2ky a neznalosti.

944
Vývoj / Re:Co si myslíte o OOP?
« kdy: 04. 01. 2019, 18:38:22 »
Jako starý Pythonista...
Mohu tě požádat o odpověď na mou otázku?

Důvody pro použití dynamických typů:
1. za běhu měnitelný systém (znám jen Erlang)
2. prototypování (takové to, když potřebuješ jen něco zkusit, a upřesňovat to budeš pozdějc)
3. neumím, nebo jazyk neumí typy

Doplníš další? (Kromě těchto scénářů nevím o ničem, kdy by netypování (př. dynamické typování) bylo užitečné.)

945
Vývoj / Re:Co si myslíte o OOP?
« kdy: 04. 01. 2019, 18:26:52 »
Kód: [Vybrat]
~ $ cat hint_test.py
class ContactForm:
    def __init__(self):
        self.name = none
        self.age = none

def assetContactForm(ContactForm form, string name, int age):
    form.name = name
    form.birth = age
    return form
~ $
~ $ python hint_test.py
  File "hint_test.py", line 6
    def assetContactForm(ContactForm form, string name, int age):
                                        ^
SyntaxError: invalid syntax
~ $
~ $ pylint hint_test.py
Using config file /data/data/com.termux/files/home/.pylintrc
************* Module hint_test
E:  6, 0: invalid syntax (<string>, line 6) (syntax-error)
~ $

Jak vidis, tak tuhle blbost ti python odchytne. Tvrzeni ze typing z pythonu udela staticky typovany jazyk je dalsi nesmysl. Az se prokouses moznostmi a schopnostmi typingu, probereme si moznosti cythonu.

Chtěl jsem vyjít vstříc, a napsat to v jazyku, kterému oslovený rozumí, a takto on spolupracuje. OK, beru na vědomí.

Stran: 1 ... 61 62 [63] 64 65 ... 133