Typické! O maďarské konferenci mloc.js a statickém typování při vývoji webových aplikací

To je tak typické! Ptáte se co? Že po mnoha letech alibistického ujišťování se, že statické typování v JavaScriptu není vlastně nutné, že lze vše pokrýt testy, se najednou jak houby po dešti rodí desítky projektů, jichž hlavním smyslem je přivést do vývoje webových aplikací statické typování. Záměrně píšu webové aplikace a ne javascriptové, protože to co se děje, už se netýká jen JavaScriptu.

Co to je statické typování?

Ti, co vědí, mohou odstavec přeskočit a pro ty, co nevědí, jen lehký úvod. Statické typování je to, čím se liší skriptování od programování. Bez typů je kód jen hloupou sadou příkazů, bez soudržnosti a vnitřní logiky. Bez typů vidí počítač náš program asi takhle:

function foo(a, b, c) {
  a.???
}

Co je to a? Je to metoda nebo hodnota? Můžu na tom volat co? Nevíme. Kód bez typů je pouze interpretovaný text. Proč na tom záleží? Chceme-li do HTML stránky přidat Lightbox, typy nejsou nutné. Přidám Lightbox, reloadnu prohlížeč, a hned vidím, jestli vše funguje nebo ne. To ovšem už neplatí pro autora Lightboxu. Ten by byl naopak moc rád, kdyby po každé změně nemusel celou svou miniappku ručně proklikávat.

Ano už to slyším: „Na co máme testy? V ideálním růžovo-poníkatém světě máme přeci vše krásně otestované.“ Ano máme. A teď mi ukaž svou poslední aplikaci, a projdeme si, jaké testy v ní jsou. Tohle je na samostatný článek (napíšu později), takže to uzavřu historkou. Zrovna minulý týden jsem se bavil s programátorem, který rok pracoval na projektu, co rok předtím psal jeden nejmenovaný, teoreticky velmi vzdělaný, OOP, TDD atd. purista a dogmatik. Nešlo o nic složitého, prostě backend pro ukládání pár modelů. Po roce a více vývoje v produkci skoro nepoužitelné. Spousta bugů, mizerný výkon, špatná architektura. Ale unit testů tam bylo nekonečně. Jen neodhalily žádnou skutečnou chybu. Prostě tam jen tak tlely a zdržovaly při refaktorování.

Testy jsou must have pro knihovny určené k dalšímu použití. Stabilizují API, poskytují dokumentaci k použití. Aplikace je málokdy určená ke znovupoužití. Psát aplikaci tak, aby se od začátku dalo testovat a skutečně testovalo vše, skoro nikdo neumí. Napsat, že metoda getUser vrací typ app.user.Model, a že name je typu string, umí každý. Je tedy zřejmé, že unit testy statické typování nenahradí.

Mloc.js

Prostory, ve kterých se velmi příjemně organizovaná konference konala.

m-loc.js konference

Tohle vše si uvědomila firma prezi.com, a rozhodla se uspořádat zajímavou konferenci zasvěcenou statickému typování pro vývoj webových aplikací. Já jsem byl pozván na krátký lightening talk. Na větší přednášku už nezbyl prostor, takže pokud se chystáte jet někam přednášet, raději svůj talk navrhněte co nejdříve. Hlavní produkt Prezi je napsán v technologii Flash, což je pomalu, ale jistě odumírající platforma. Proto se vývojáři Prezi rozhlížejí po alternativách. A že jich je, když se podíváte na program konference.

Naprostá většina přístupů se řídí stejným principem: Když už jeden staticky kompilovaný jazyk máme, proč bychom to nemohli udělat tak, aby se kompiloval i do JavaScriptu? Takže jsme viděli C#, Scalu, Haxe, Dart a další jazyky kompilované do JavaScriptu. Šmahem je všechny odsuzuji jako akademické, a jen málo použitelné leaky abstraction projekty. Tedy krom Dartu, který je od začátku pro web (nejen) zamýšlen. Pak také izraelský sharpkit.net mne ohromil svou pragmatičností a kvalitou, avšak obávám se, že s pozvolným příchodem www.typescriptlang.org, raison d’etre SharpKitu pomine.

Jmenuji se Daniel Steigerwald a pomáhám firmám i jednotlivcům s vývojem webových aplikací. Pořádám školení, která si můžete objednat na javascript-skoleni.cz. Pokud máte dotazy, napište mi.

Jaké projekty považuji za reálné a proč

O Google Closure Tools jsem se zmínil zde zmínil několikrát. Je to dnes jediná ready to production technologie. Což však už nemusí platit za rok.

Dart

Dart se kvapem vyvíjí. Ale má jeden problém. Není to JavaScript = neseženete na něj lidi. A to se hned tak nezmění. Kdybych měl vlastní firmu, s oddaným nefluktuačním týmem horlivým se učit nové věci, a nechtěl reuse existujícího javascriptového kódu, stál by Dart za zvážení.

TypeScript

TypeScript. Microsoft se probudil, a konečně vytvořil zajímavou a užitečnou technologii, která udeřila přesně hřebíček na hlavičku. Problém: Ohromná spousta již napsaného netypového kódu. Řešení: Dodat všem typy adhoc, viz. například github.com/borisyankov/DefinitelyTyped.

TypeScript není nový jazyk. Je to evoluční vylepšení JavaScriptu, se všemi jeho libůstkami. Přesně to, co svět potřeboval. Typy a progres směrem k ECMAScript 6, použitelné už dnes.

CoffeeScript

Můj milovaný CoffeeScript. Jak se zde ocitl, vždyť typy nemá? Nemá, ale ve spojení s typovými anotacemi Closure Compileru, tedy tak jak ho já používám v github.com/Steida/este, typy má. A ve velmi blízké budoucnosti jej čekají příjemné novinky. CoffeeScript 2 je překvapivě na první pohled identický s CoffeeScriptem 1.x Ty podstatné změny se odehrály uvnitř. Jeremy Ashkenas, autor CoffeeScriptu jej navrhl… ne zcela ideálně architektonicky, což zapříčinilo ne zcela jednoduché rozšiřování jazyka. Proto vznikl CoffeeScript 2, který napsal a navrhnul spoluautor předchozí verze. Peníze získal přes kickstarter.com. A výsledek se velmi povedl. Lepší je vše. Error reporting, parsování, AST stromy, změny jazyka, spolehlivost a další.

Závěr

Dart je nový vesmír IMHO se šancí zabít Javu na Androidu. TypeScript je starý dobrý vesmír, který známe, mírný progres v mezích zákona s opravdu chytře přidaným statickým typováním. Něco, na co bych babičku znalou JavaScriptu dokázal přeučit. A CoffeeScript? Velmi si slibuji od projektu https://github.com/michaelficarra/coffee-of-my-dreams. Do toho se Michael pustí hned, jak dokončí přepis CoffeeScriptu, a bude to bomba. Jak tedy vidíte, pro každého něco, a tak to má být.

Independent software gardener, libertarian, web applications consultant and trainer. Google Developer Expert since 2012.

Komentáře: 42

Přehled komentářů

Martin Kozák Perla měsíce
Martin Hassman Re: Perla měsíce
Martin Kozák Re: Perla měsíce
Martin Hassman Re: Perla měsíce
blizz Re: Perla měsíce
BoneFlute Re: Perla měsíce
Martin Kozák Dodatek
Milan Křepelka Re: Dodatek
Sergej Statické typování
Daniel Steigerwald Re: Statické typování
Milan Křepelka Re: Statické typování
Daniel Steigerwald
Ladislav Thon
Daniel Steigerwald Re:
Tomas Novotny Re:
Ladislav Thon Re:
Borek Bernard Re:
Daniel Steigerwald Re:
Ladislav Thon Re:
Velda Statické typování v Javascriptu
satai Re: Statické typování v Javascriptu
Martin Kozák Re: Statické typování v Javascriptu
satai Re: Statické typování v Javascriptu
maras Re: Statické typování v Javascriptu
Peto nativna podpora Dartu
Ladislav Thon Re: nativna podpora Dartu
Radek Miček Zkracování kódu
Ladislav Thon Re: Zkracování kódu
Radek Miček Re: Zkracování kódu
Radek Miček TypeScript je hrůza
Daniel Steigerwald Re: TypeScript je hrůza
Radek Miček Re: TypeScript je hrůza
Aleš Roubíček Re: TypeScript je hrůza
Petr Prchal Par detailu k oprave
Honza Marek Téma článku
Martin Hassman Re: Téma článku
Jiri Musil Haxe
Martin Hassman Re: Haxe
LollaPalooza dart a typescript
Daniel Steigerwald Re: dart a typescript
Data
To ani nechtej vedet ...
Zdroj: https://www.zdrojak.cz/?p=7627