Malý ostrov v Baltském moři (II.)
12. 12. 2018
Malý ostrov v Baltském moři (II.)

Kde se vidíte za 6 let?

Pokud tuhle otázku dostanete na pracovním pohovoru, můžete například odpovědět „určitě ne ve firmě, kde na mě zkoušejí ta nejhorší HR klišé na světě"; pokud jste ovšem právě dostali za úkol navrhnout a implementovat zbrusu nový programovací jazyk, je strategické říct „to už určitě budeme mít venku verzi 1.0, čestně!".

Třeba staré dobré C totiž do této fáze dospělo už po roce vývoje, dnes velmi oblíbenému Pythonu totéž trvalo 3 roky, Javě ještě o rok déle a základ všeho webu, technologie, na které stojí prakticky každá internetová stránka, všudypřítomný a esenciální JavaScript měl svůj první prototyp za 10 dní (to není překlep—a pokud aspoň trochu JavaScript znáte, tak jste to vždycky stejně tak nějak podvědomě tušili).

Kotlin si tedy se svými 6 lety dětství a puberty dal docela načas, takže—stálo to čekání za to?

Vynález zkázy

A začněme rovnou nechvalně proslulým, legendárním „omylem za miliardu dolarů", jak nulovou referenci nazval s odstupem času její vynálezce, sir Tony Hoare. Nulová reference je přitom akorát vznešený název pro programátorský ekvivalent skořápek.

Tuhletu hazardní hru denně ve vašem telefonu, počítači, autě a prakticky čemkoliv, co má v sobě aspoň jednoduchý čip, hrají autoři aplikací sestávajících z mnoha milionů řádků kódu, přičemž stačí, když jediná z tisíců kuliček není zrovna pod kalíškem, na který si ve svém programu vsadili: v tuhle chvíli (což je na téhle hře obzvlášť nefér) prohráváte ovšem vy—aplikace se nevybíravým způsobem odporoučí a vezme si s sebou i vaši rozdělanou práci.

Suše technicky vzato jde prostě o to, že ve starších jazycích může být v každé proměnné v každou chvíli Něco, nebo taky Nic. Je přitom jenom na programátorovi, aby si ohlídal, jestli náhodou nedereferencuje (tohle slovo zní o dost sofistikovaněji než „nešahá na") ono neoblíbené, ale občas bohužel užitečné Nic, což je právě ta věc, která pak okamžitě způsobí pád aplikace přesně podle rčení „kde nic není, ani procesor nebere".

Nebohý programátor se tak buď musí ve svém programu neustále ptát „Je tam ještě? A teď taky? A co teď?", což znamená, že si musí užitečný kód zaplevelit a hlavně znepřehlednit obřím množstvím těchto kontrol (pokud tedy na nějakou rovnou nezapomene, což se téměř jistě stane), případně se může spolehnout na slib někoho jiného, že zrovna pod daným kalíškem vždycky kulička bude, bez výjimek, fakt, no opravdu úplně pokaždé! Nemusím dodávat, že ani jedna varianta není ideální.

Naštěstí pro nás moderní jazyky, mezi které Kotlin (a třeba i Swift) patří, tuhletu situaci podchytily na úrovni překladače, resp. typového systému, který výslovně rozlišuje, která proměnná bude v sobě mít vždycky Něco a která může mít občas i Nic. Překladač se pak už postará o zbytek tak, že výsledný program je bezpečný (bez hazardu) a zároveň stále čitelný. Zmiňované kontroly totiž udělá sám překladač a zároveň nepřipustí potenciálně nebezpečné konstrukce.

Kdyby Kotlin neměl kromě této vlastnosti nic dalšího navíc, už tak by stál za to. Je prokázáno, že aplikace napsané v jazycích, které mají null safety vestavěnou, jsou výrazněji stabilnější. Na typovém systému Kotlinu tím pádem vydělají jak vývojáři, tak i uživatelé.

Opakování je matka neproduktivity

I když každý program je jiný, uvnitř vždycky najdeme konstrukce, které se opakují, mnohdy i v masovém měřítku. To je docela normální, zásadní otázka ale je, jak moc se musí opakovat vývojář, aby všechny tyhle nutné věci dostal do svého programu. Vyjadřovací síla (odborně též zvaná ukecanost) je důležitou vlastností programovacího jazyka, a tak není divu, že i na tomto poli Kotlin přinesl velká zlepšení.

Pojďme se podívat na jeden extrémní případ: Dejme tomu, že jsme právě založili startup postavený na brilantní myšlence online prodeje designérských monetárních knoflíků s národními motivy™ (vezmeme desetikorunu, navrtáme do ní dvě dírky a prodáme ji za 39 korun jako knoflík). Jako všechny startupy, ani my neztrácíme čas zkoumáním legálnosti našeho byznys modelu, a investujeme veškerou energii do překotného vývoje aplikace, přes kterou si budou zákazníci objednávat náš produkt, který will totally disrupt the way parts of your clothes hold together™.

V aplikaci tedy potřebujeme mít uložená data zákazníka, konkrétně jeho jméno, příjmení, adresu a udělení souhlasu s GDPR (ať už to znamená cokoliv). Zapsáno v Javě to vypadá takhle:

kotlin-ii-vnitrek-1.pngV Kotlinu takto:

kotlinProfit.

Kotlin za nás (zdaleka nejen v tomto případě) prostě napíše nezajímavé, opakující se části kódu, automaticky a bez chyb. Není výjimkou, že ve skutečných větších programech se vyskytují tisíce tříd tohoto typu, a tak se dostáváme ke druhé věci, kvůli které se Kotlin vyplatí: Aplikace napsané v Kotlinu jsou průměrně o čtvrtinu až třetinu kratší než ekvivalentní aplikace napsané v Javě. Budete raději udržovat 100.000 (dosaďte si svoje číslo), nebo 150.000 řádků kódu?

Jedna velká šťastná rodina

Mohli bychom pokračovat dál výčtem desítek vlastností a funkcionalit Kotlinu, kdy téměř každá je pro uživatele starších jazyků vysloveně zjevení (neprogramátoři teď prominou, ale namátkou: skvěle pojaté funkcionální programování, extenze nad typy, neuvěřitelně expresivní syntax objektových konstrukcí, konečně příčetné přetěžování operátorů, automatické chytré přetypování, výborně vybavená standardní knihovna, coroutiny, skriptování a mnoho, mnoho dalšího), nicméně ve finále by k ničemu moc nebyly, kdyby ekosystém Kotlinu začínal od nuly—takový ten stav, kdy máte fantastický, expresivní jazyk, který za svitu louče pazourkem tesáte do zdi jeskyně a úplně všechny věci musíte vyvinout znova.

A tím se dostáváme k asi nejlepší vlastnosti Kotlinu—dokonalé interoperabilitě s Javou. Pokud se rozhodnete vyzkoušet si Kotlin (což vřele doporučujeme, děkovat můžete později), nedostanete se do situace všechno, anebo nic. Žádné vynalézání kola, žádné přepisování všeho od začátku.

V jednom projektu totiž můžete mít vedle sebe libovolnou kombinaci Javy a Kotlinu tak, že kód napsaný v Javě si ani nevšimne, že na druhém konci volá kód napsaný v Kotlinu, a opačně. To znamená, že všechny svoje oblíbené javové knihovny máte stále beze změny k dispozici, akorát odteď je můžete používat výrazně příjemnějším způsobem. Vaši uživatelé za běhu také rozdíl nepoznají a případná migrace projektu z Javy do Kotlinu bude pozvolná a bezpečná. Zkuste to—dobrý nápad, za který prakticky nic nedáte, je začít třeba s testy.

Kromě Javy si s Kotlinem navíc můžete užívat čím dál lepšího propojení s JavaScriptem, Objective-C, Swiftem a nativním kódem—doba masivně sdíleného nativního kódu napříč i nečekanými platformami se nezadržitelně blíží. A jelikož za Kotlinem stojí titíž lidé, kteří vyvíjejí jedny z nejlepších profesionálních IDE, tak i pohodlný a pokročilý tooling je samozřejmostí, stejně jako kvalitní a podrobná dokumentace.

// FIXME: Convert to Kotlin

Podle databáze pracovních míst Dice narostla poptávka po Kotlin vývojářích za poslední rok a půl patnáctkrát, podle statistik JetBrains se počet uživatelů Kotlinu za dva roky zvýšil desetinásobně, počet mobilních aplikací obsahujících Kotlin se za poslední rok zečtyřnásobil, na GitHubu je Kotlin nejrychleji rostoucím jazykem a hlavně—Kotlin je podle průzkumu mezi uživateli StackOverflow druhým nejmilovanějším jazykem.

Nic z toho není náhoda a závěr je jasný: Pokud jste vývojáři (bez ohledu na platformu), udělejte sami sobě laskavost a naučte se Kotlin—budete odměněni vyspělým, expresivním a skvěle pragmatickým jazykem, se kterým je radost pracovat. Pokud jste manažeři, máte skvělou příležitost ušetřit náklady, zvýšit kvalitu dodávaných aplikací a v neposlední řadě nadchnout svůj tým. No a pokud jste zákazníci, vyžadujte moderní, do budoucna perspektivní technologie—to všechno Kotlin zařídí. Tak do toho!

Jiří Hutárek