1321
Vývoj / Re:Typový system versus unittesty
« kdy: 25. 06. 2018, 16:38:46 »Ale mám za to, že jsme se tu všichni shodli, že typová kontrola nemůže nahradit jednotkové testy ani naopakTak na to ať si udělá názor každý sám :-)
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.
Ale mám za to, že jsme se tu všichni shodli, že typová kontrola nemůže nahradit jednotkové testy ani naopakTak na to ať si udělá názor každý sám :-)
Akorát teda pak zápis těch podmínek nebude moc připomínat typování, spíš nějaký lambda kalkul.Ale hlavně se tomu nesmí říkat unit-testy... že?
To samozřejmě jde, měl jsem na mysli aparát, ve kterém se nadefinuje, co je prvočíslo, co je iracionální číslo a jak se odmocňuje. Možná jsem zvolil špatný příklad.
Person = {
name: String 1 50
surname: String 1 100
birth: Date * now
sex: Male | Female
spouse: Person | None
} where [
if spouse == Person:
sex != spouse.sex
birth < Now - (18 * year)
]
vedle typování a jednotkových testů se někdy taky používá obecné dokazování korektnosti při překladu, vývojář napíše podmínky v nějaké deklarativní notaci, které pak překladač vyhodnotí, než vygeneruje kód. Formálně to je jen zobecnění typové kontroly, ale za použití neomezené logiky. Například si můžu “staticky” vyžádat, že odmocnina prvočísla je vždy iracionální apod.
nthRoot = x : PrimeNum -> IrrationalNum
Ta "vyšší objektovost" je ale spíš nevýhoda, ne?Objektovost bych jí nevyčítal.
Nevím, jestli je ta averze psát si vlastní jazyk opodstatněná. Elasticsearch má vlastní jazyk. Nevím, jak by to vyřešili s nějakou Luou...Lua je skvělá. Malá, kompaktní, šikovná, rychlá. Ale není funkcionální a nepřekvapivě nemá žádné typy.
Co na tom nechapes?
Let 〈T, η, μ〉 be a monad over a category C. The Kleisli category of C is the category CT whose objects and morphisms are given by
Obj(CT) = Obj(C),
Hom_CT(X,Y) = Hom_C(X,TY)
Sorry jako, ale to jsou zcela trivialni pojmy.
Před seznámením se z Haskellem jsem to psal proto, protože je to tak správně. Po seznámení s Haskellem jsem začal chápat proč.To už je o zvyku a disciplíně bez ohledu na jazyk.Aha. Takže když vytvořím instanci třídy Person s věkem -50, tak ti to je jedno, protože...Ono hodně dělají zvyky z těch statických typu. Pro nás už jen představa existence nevalidního objektu je neprijatelná.
V případě netypovych jazyku kde to může kdykoliv kdekoliv chcipnout - to tolik neprozivaji.
Prasit jde i v Haskellu.To mě zajímá. Ne, to, zda to jde, ale nějakou pěknou ukázku prasení v Haskellu.
Aha. Takže když vytvořím instanci třídy Person s věkem -50, tak ti to je jedno, protože...
Jak kdy. Pokud potřebuji pozdní vazbu, tak nevím, co bych v tom konstruktoru testoval.Hele, založ si vlastní vlákno!
Šel jsem oběma cestama. A musím říct, že napsat aplikaci, kde spolehlivost bude stát jen na testech je peklo.empatie by mohla pomoct, třeba tady SB, banda rádobychytrých pseudomatematiků se mu snaží nacpat, že nějaké conditional conformance burrito je lepší než to prostě napsat v pythonu
Mou jedinou otázkou (odpovídající původnímu dotazu), na kterou mě zajímala odpověď, bylo, zda se mi vyplatí budovat typové systémy, nebo mě vyjde jednodušeji a pružněji celý tento aparát odbourat a nechat to na oněch testech (kterým se možná stejně nevyhnu). Nechci se kvůli tomu hádat, každý si stejně vybere to svoje.
Obávám se, že ještě horší je, když někdo jenom zahlédne nějaký kousíček, a už má pocit, že to chápe. To je pak ten neznalý, který si ale navíc nenechá vysvětlit, že je neznalý.Tak ona je taková dobrá zásada, když člověk něco zjišťuje, tak vyfiltrovat zdroje/lidi, které evidentně nejsou k užitku.
Jen jsem volně citoval, nicméně asi skutečně existují lidé, co nechápou třeba jen funkce vyššího řádu. A i ti píšou komerční kód.Tak to nechápou no. Tak přijde senior, řekne jim - to je tak a tak, voni na to - hmm, pomaleji... Zkusí to na malém příkladu, vyzkouší na části projektu, po pěti aplikacích (toho konceptu) budou tvrdit, že to znali vždycky.
Jinak čistě pragmaticky - v případě Swiftu proběhla diskuse, jestli podporovat HKT, protože "jsou moc složité a málokdo jim rozumí" (což je určitě pravda). Úplně stejnou věc debatovali tvůrci Rustu ("skoro nikdo to není schopen pochopit, takže se to nebude používat"). Haskellisti si tuto otázku nějak moc nekladli, pročež má teď Haskell nálepku esoterického a akademického jazyka, protože naučit se jej nad rámec povrchního seznámení se syntaxí zvládne jen zlomek lidí, co se považují za programátory (i když určitě by to dalo 100% teoretických fyziků například). V tomto vlákně se opět manifestuje staré známé "nejsem-li něco schopen pochopit, je to k ničemu". Aneb na co používat bagr, když mám lopatu...No tak nemusím být ani nijak zvlášť inteligentní. Tak tomu prostě dám pár hodin navíc no.
Nic ve zlym Vaclave, ale kdyby se vsechno bohatstvi rovnomerne rozdelili tak vsichni mame hovno. To bohatstvi je pro chude treba v US ten american dream - mit dum auto spoustu prahu za ktere si koupis cokoliv a kohokoliv. Prave to bohatstvi motivuje chude lidi k tomu aby sli makat do sve spatne placene prace a jednou mozna vydelali na to o cem sni. Kdyby meli vsichni hovno tak nikoho nebavi vstavat do prace.Drahý Kkt, vidíš někde v tom, co jsem napsal, přání toho aby se vše rozdělilo rovnoměrně? Měl by sis trochu zlepšit schopnost porozumění psanému textu.
American dream je naopak největší neštěstí chudých američanů. Proč? Třeba i proto, že tolerují když je někdo ojebává, protože si představují jak budou časem na jeho místě a budou ojebávat podobné zoufalce zase oni. Ale oni se tam nikdy nedostanou...