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 ... 60 61 [62] 63 64 ... 133
916
Vývoj / Re:Co si myslíte o OOP?
« kdy: 08. 01. 2019, 22:34:32 »
Aha, tak to je nesmysl, i testy se opiraji o typovy system.

Pokud bych tě mohl požádat; začal jsem tento svůj offtopic narážkou na tvrzení, že dynamické typování má nějakou zásadní výhodu proti statickému typování. Zajímalo by mě o jakou jde. Zatím zde žádný z příznivců to nebyl schopen srozumitelně vypíchnout.

Já, jako fanatik do statického typování uznávám dvě(tři) situace:
1. Erlang dokáže za chodu opravovat/upravovat kód. Někde jsem četl (ale možná je to kec), že tam typy nedali, protože se jim nepovedlo vymyslet jak na to.
2. Někdy se hodí, zejména na prototypování, když jsou typy volitelné, a následně to při refactoringu upřesňovat. Protože ze začátku člověk třeba nemá jasno, jak to má vypadat, a tak samozřejmě dost dobře nemůže ty typy určit. V Haskellu například všechno je přísně otypováno, jako kdyby to šlo na produkci. Což může být nepohodlné.
3. Jazyk, nebo člověk neumí typy a nechce se je učit.

Napadá tě něco?

Děkuji.

917
Vývoj / Re:Co si myslíte o OOP?
« kdy: 08. 01. 2019, 22:09:17 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1
Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
inc je funkce.
Otázka nezní zda lze typem zcela nahradit testy, ale vaše opačné tvrzení, že typy lze nahradit testy.
Nečetl jsem poctivě celou diskusi, ale předpokládám, že takové tvrzení tu nezaznělo. Diskuse běží na téma potřebnosti statických typů k ověření bezchybnosti programu, nikoliv nahrazení typů.

918
Vývoj / Re:Co si myslíte o OOP?
« kdy: 08. 01. 2019, 21:45:18 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:
Kód: [Vybrat]
inc (x: Int) = x + 1
Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.
Testy se nedělají na jeden řádek kódu, ale na funkční celek, třeba funkci. Jak typem zkontroluješ, že jsi omylem nenapsal 2 místo 1?
inc je funkce.
Otázka nezní zda lze typem zcela nahradit testy, ale vaše opačné tvrzení, že typy lze nahradit testy.

919
Vývoj / Re:Co si myslíte o OOP?
« kdy: 08. 01. 2019, 14:21:44 »
Taky si to myslím. Typový systém nahradit testy jde.
Nahraď mi prosím typy za testy u tohoto příkladu:

Kód: [Vybrat]
inc (x: Int) = x + 1

Každopádně problém místních je v tom, že si nečtou argumenty. Takže za mě končím.

920
Vývoj / Re:Co si myslíte o OOP?
« kdy: 08. 01. 2019, 14:18:30 »
Testy typovym systemem nahradit nelze, protoze neexistuje zadne obecne spravne chovani platne pro vsechny pripady. Jeden a ten samy kod muze byt jednou spatne a po druhe dobre. Funkce, ktera ma na vstupu 1 a na vystupu 0 muze fungovat pro jeden pripad dobre a pro druhy spatne. Jestli funguje podle ocekavani se da zkontrolovat jedine testem, v kterem nase ocekavani bude zahrnuto.

To je samozřejmě pravda. Problém je v tom, že naopak je to ještě horší. Pár scénářů, které typy nezvládnou, zatímco většina scénářů, které pro změnu nezvládnou testy.

Takže druhé housle hrají testy.

921
Vývoj / Re:Co si myslíte o OOP?
« kdy: 07. 01. 2019, 16:45:48 »
Pak samozřejmě můžeš dojít k závěru, že nevíš, a že tam chceš dát cokoliv. Tak dáš typ *, a budeš tam moct uložit opravdu cokoliv.

Vizte můj příspěvek dříve: Není problémem vytvořit seznam s prvky typu objekt a najebat do něj cokoliv, problémem je potom nad tímto seznamem spustit sumu na vlastnost "cena" nebo "objem". Jak se to udělá v statickém jazyku?

Není to problém. Prostě nad tím pustím tu funkci sum() která vynucuje vlastnost "cena" či "objem". A ono se to transitivně propíše i do toho seznamu. Takže někdy v tom okamžiku mi kompilátor začne řvát, že tam má něco nedomyšleného, ať to laskavě domyslím.

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

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

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

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

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

927
Vývoj / Re:Co si myslíte o OOP?
« kdy: 06. 01. 2019, 20:30:23 »
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...

928
Vývoj / Re:Co si myslíte o OOP?
« kdy: 06. 01. 2019, 17:28:34 »
Zatímco příklad parsováním vstupu je naopak situace, kdy ten jazyk ví všechno.
Neví, jestli výpočet půjde cestou A nebo B, to se rozhodne až za běhu.
Ano. Což ale pro naše potřeby není vůbec důležitá informace. Ví všechno potřebné (, když tedy slovíčkaříš).

Pokud porovnáváš tuto nerozhodnost, s tupostí dynamických jazyků, tak ti udělám radost, a nebudu už v diskusi pokračovat :-P

929
Vývoj / Re:Co si myslíte o OOP?
« kdy: 06. 01. 2019, 17:19:37 »
Statické jazyky občas něco neví
No jo, ale uvádíš blbej příklad.

Dobrej příklad je dělení nulou. Což ve většině statických jazyků nejde, a dokonce to zbuchne.
Zatímco příklad parsováním vstupu je naopak situace, kdy ten jazyk ví všechno. Takže blbej příklad.

930
Vývoj / Re:Co si myslíte o OOP?
« kdy: 06. 01. 2019, 16:52:22 »
v Inkvizitorově příkladu se transformuje hodnota staticky daného typu na jinou (opět staticky známého typu), žádné "rozhodování o typu" se tam neděje, stejně jako když třeba porovnáváte celá, v době překladu neznámá, čísla
Jak jsem psal někde výš: "Znát typ" není nc jiného než "mít nějakou znalost o datech v tomhle místě programu". "Statické jazyky" se snaží v době překladu ze struktury programu vydedukovat co nejvíc znalostí. "Dynamické jazyky" na to rezignují a znalosti získávají až v době běhu. V tom je ten zásaní rozdíl.

Když použiju součtový typ "StringVal String | IntVal Int", tak tím jenom dávám překladači najevo, že vím, že v tomhle místě programu se za běhu objeví buď integer nebo string. Dynamický jazyk vlastně říká totéž: v tomhle (každém) místě programu nevím, co za běhu bude: int, string, list, ...

Statické typování: předem vím, co se může stát, a tomu přizpůsobím program.
Dynamické typování: teprve za běhu řeším, co se stalo, a podle toho mám napsaný program.

Zásadní rozdíl je (dle mého chápání) compile-time, versus run-time.

Ve statickém jazyce nepřeložím.
V dynamickém jazyce mi vypadne výjimka za běhu.

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