The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2022-05-18
Vývoj softwaru

Proč je Kotlin úžasný, ale vy stejně zůstanete u Javy

The Codest

Marcin Perlikowski

Starší vývojář v jazyce Java

Pokud jste vývojářem v jazyce Java, je pravděpodobné, že máte alespoň nějaké zkušenosti s jinými programovými jazyky. Někteří z nás začali své programátorské dobrodružství s jiným jazykem, jako je C/C++, JavaScript, C#, Python nebo možná dokonce něco jako Pascal nebo Basic. Někteří však začínali s Javou a ostatním jazykům se prostě nikdy příliš nevěnovali a nepříjemně vzpomínali na to, jak jednou potřebovali rychle něco nakódovat na straně frontendu.

Bez ohledu na to, do které skupiny patříte, existuje důvod, proč zůstáváte s. Java. A neobviňuji vás. Má pravděpodobně nejrozvinutější, nejuniverzálnější a nejkomplexnější ekosystém v celém světě. podnik svět. Jazyk má pěkně přizpůsobenou sadu schopností, někde na pomezí příliš mnoho a příliš málo. A nové funkce jsou pomalu, ale vytrvale přidávány, což jej většinou udržuje v souladu s novými trendy ve světě programování.

Víte, že Lombok ačkoli? Pokud ne, vřele doporučuji vyzkoušet. Pokud se vám to líbí, pak mám něco právě pro vás k vyzkoušení. Úplně nový jazyk, který svými vlastnostmi dělá Lombok zastaralým. Jmenuje se Kotlin.

Kotlin? Myslíte jazyk pro Android?

Ano, ale vlastně ne

Kotlin na Androidu dostal požehnání od samotného Googlu do té míry, že se stal de facto jazykem volby pro tuto platformu. Na to se v tomto článku nezaměřím, ale Android je skutečně místem, kde jsem se s Kotlinem poprvé setkal.

Můj kolega v práci vyvíjel aplikaci pro tehdy aktuální projekt, a to samostatně. Termíny se však rychle blížily, a tak jsem byl pověřen, abych mu je pomohl splnit. Dovolte mi, abych se nyní přenesl v čase zpět do tohoto okamžiku. Aaaand... YUCK! Proč používá nějaký divný jazyk, který zní jako. značka kečupu!? Vypadá to hrozně!

Proč je před každou funkcí napsáno "fun"? Jako bych už nevěděl, co to je. A taky už mám zábava s Java každopádně. A kde je návratový typ? Na konci? Zbláznil ses? Co to je, přiřazuješ něco funkci? To nedává žádný smysl! Všechno to vypadá jako Java s dalšími kroky! Počkat, kam patří třída, do které tato metoda patří? Kam jsi ji schoval, ty kečupově znějící, Java napodobující výmluvu na programovací jazyk? Ale ne. Ale ne, to jste neudělali. JE TO GLOBÁLNÍ FUNKCE? To je vše, končím, volám policii.

Pozor, spoiler: nevolal jsem orgány činné v trestním řízení. Ať už se mi to líbilo, nebo ne, musel jsem své myšlení zaměřené na Javu přizpůsobit jinému jazyku. Nebude to ale tak špatné, ne? Pořád je to jazyk JVM, určitě je to jen jiný. Java. Možná i s nějakými skvělými funkcemi navíc? Neochotně jsem na projektu začal pracovat.

Java s dalšími kroky

Pokud je Java tak skvělá, proč neexistuje Java 2? Vtipy stranou, To je to, co jsem si myslel, pro sebe. Prostě budu předstírat, že Kotlin je Java 2. Nová syntaxe a tak, ale musím se jí naučit dost na to, abych projekt dokončil. Chlapče, ach chlapče, mýlil jsem se.

Po jednom nebo dvou dnech zkoušení jsem si rychle uvědomil, že Kotlin i Java nejsou tak pružné. Pokusy o jejich ohnutí k sobě nevyhnutelně končí tím, že se jeden z nich přetrhne napůl. Začalo být zřejmé, že Kotlin je věc sama o sobě, a to, že funguje na JVM, neznamená z programátorského hlediska téměř nic. (Jen na okraj, umí se také transpirovat do jazyka JavaScriptnebo zkompilovat do nativního binárního souboru).

Pak tedy plán B. Vlastně se seznamte s jazykem. Při prvním čtení dokumentace běhá zkušenému programátorovi Javy mráz po zádech. Například:
- dříve zmíněný kontext nejvyšší úrovně alias globální kontext
- typy parametrů a návratových typů funkcí uvedené na konci

fun sum(a: Int, b: Int): Int {
   return a + b
}

tělem funkce může být výraz (s použitím znaménka rovnosti)

 fun sum(a: Int, b: Int) = a + b

příkaz if může poskytnout výsledek

 val y = if (x == 1) {
 "one"
 } else if (x == 2) {
 "dva"
 } else {
 "druhý"
 }

Dobře, budu si na to muset zvyknout. Jen jiná syntaxe. Co dalšího můžete nabídnout, pane Kotline?

 value?.method() // provést, pokud není null

Dobře, zbavit se if (value == null), bod pro vás. Co ještě máte?

fun check(list: List, alternative: Boolean) = when {
 list je LinkedList -> print("linked")
 alternative -> print("alternative")
 list.size > 50 -> print("big")
 else -> print("jiný")
 }

Hmm pěkné, by mohlo být užitečné, aby se zabránilo, pokud ostatní bloky, stále se zdá jako trik ačkoli.

 objekt SingularObject: Counter() {
 var a = 14
 fun test() = if (a > 10) "more" else "less"
 }

Ok, ten vypadá skutečně užitečně, líbí se mi! Na druhou stranu, singleton mohu vytvořit i v Javě. Možná to nebude tak elegantní, ale není to nic nového. Máš nějaká esa v rukávu? Třeba opravdové těžké údery?

 var s: String = null // nezkompiluje se, nenulový typ

Počkat... cože?

Omyl za miliardu dolarů

Představte si kódovou základnu, kde se nemusíte starat o nulovou bezpečnost. Představte si, že prostě považujete za samozřejmé, že každá reference skutečně obsahuje něco smysluplného. Představte si, že máte jistotu, že každý problém související s nulou je předem vyřešen.
Víc si nepředstavujte. Všechny reference v Kotlinu nejsou ve výchozím nastavení nulovatelné. Pokud je chcete učinit nulovatelnými, musíte vědomě učinit toto rozhodnutí a výslovně uvést v kód:

 var s: String? = null

Chápu, že v tuto chvíli můžete být k celé myšlence skeptičtí. Jste zvyklí na nulovatelné odkazy. Při kódování je máte v hlavě. Dozvěděli jste se, kde si musíte dávat pozor. Přesně to si myslím. Pocházím z Java, bylo to zpočátku opravdu divné. Jakože, jaký to má smysl? Přece díky tomu zázračně nezmizí všechny související problémy. Jen budu muset všude přidávat "?", zní to jako fuška.

Ale rozhodl jsem se ponořit do jazyka, že? Ať je po vašem, pane Kotlin. Začal jsem se snažit eliminovat co nejvíce nulovatelných proměnných, polí a parametrů. Krok za krokem jsem se naučil používat vlastnosti jazyka, které usnadňovaly eliminaci nulovatelných odkazů, např. operátor safe call "?.", operátor elvis "?:", delegované vlastnosti, metoda "let" a další.

Postupem času se mi podařilo dosáhnout toho, že některé třídy obsahují pouze nenulová pole a parametry metod. V podstatě jsem věděl, že pokud je třída úspěšně instancována, mohu na nulovatelnost v tělech metod téměř zapomenout. Bylo to blaho. Postupem času jsem to oceňoval čím dál víc. Nakonec jsem to však nepovažoval za killer feature, Java se stále cítil jako doma. Dokud...

Návrat

Projekt se blížil ke konci. Stále více jsem poznával Kotlin a díky těmto znalostem byl kód stále úhlednější, čitelnější a stručnější. Zlepšení jste mohli vidět pouhým okem v historii revizí. Nakonec však nadešel čas. S nečekaně příjemnými vzpomínkami na nový jazyk nastal čas rozloučit se a vrátit se do sladké komfortní zóny jazyka Java. Nebo jsem si to alespoň myslel.

Znáte ten pocit, kdy si něčeho začnete vážit až ve chvíli, kdy to zmizí? Když si neuvědomíte, jak moc si na něčem zakládáte, dokud to už nemůžete používat? Byl to ten nejlepší příklad tohoto pocitu, jaký jsem v životě pravděpodobně zažil.

Když jsem se vrátil k psaní kódu v Java, téměř mě vyděsila absence některých funkcí. Bylo to, jako by můj mozek podvědomě, chybně zpětně instaloval funkce Kotlinu do Javy. Zažil jsem situace, kdy jsem skutečně začal něco implementovat, abych zjistil, že to v tomto jazyce nebude fungovat. V nejlepším případě bych to mohl napsat podobně jako Kotlin, ale bylo by to objemné, nečitelné a/nebo by to vyžadovalo příliš mnoho boilerplate.

Nulová bezpečnost byla samozřejmě funkce, která mi chyběla nejvíce. Ale překvapilo mě, kolik menších věcí se pro mě stalo přirozenými: pojmenované parametry, vlastnosti místo getterů a setterů, "==" jako equals a "===" jako referenční rovnost, kvalifikované "this", rozšiřující funkce, implicitní singulární lambda parametr, "_" pro nepoužité lambda parametry, datové třídy, scope funkce, další Kotlin stdlib funkce, operátory a další. A jak to všechno do sebe pěkně zapadá. Ve srovnání s tím mi Java připadala... primitivní.

Vlastně jsem se cítil tak špatně, že jsem začal uvažovat o úplném přechodu na Kotlin. Teoreticky je plně interoperabilní s Javou, stačí přidat podporu Kotlinu do stávajícího projektu a začít psát nové třídy. Strana Kotlinu ví, jak "mluvit" s Javou, a strana Javy ani neví, že "mluví" s jiným jazykem. A po kompilaci do bajtového kódu to pro JVM vlastně není žádný rozdíl.

Seznamte se s odborníkem na Javu

Kontrola reality

Tak na co čekáte? Pokud je jazyk tak dobrý, jak říkáte, prostě ho používejte! Možná ne v existujících projektech, i když vím, že by měl být interoperabilní, ale míchat takto dva různé jazyky zní ošklivě.

Dobře, takže pro nové moduly - Kotlin je to. Nebo ano? Pracujete v tým. Musíte se s nimi poradit a přesvědčit je o velikosti tohoto nového jazyka. Co? Nelíbí se jim to? To zní, jako by prostě nechtěli vynaložit úsilí, aby se ho naučili. Nemůžete se jim ale divit, vy jste byli zpočátku také skeptičtí.

Projektový manažer! Ano! Určitě pochopí, jak velkou hodnotu by Kotlin našemu týmu přinesl. Ach, ta velikost, která přijde!
-No
-Počkat, proč?
-Tým to neví.
-Naučí se to!
-Nechtějí se učit.
-Můžete je vyrobit!
-Nepotřebují se učit.
-To je sice pravda, ale představte si ty možnosti!
-Ano, co kdybyste se nejprve zamysleli nad problémy.

Legenda říká, že existuje projekt. Projekt, který je velký a složitý, ale pěkně napsaný v každé části. Projekt, kde jsou všichni vývojáři zajedno ohledně použitých řešení. Kde nové funkce jen plynule přicházejí z klávesnic programátorů. Kde jsou chyby vzácné a snadno opravitelné.

Viděli jste někdy takový projekt? Já ne. Některé se tomu blížily, ale většina z nich je velký nepořádek ve starém kódu. A pokud nejsou, pravděpodobně se jím někdy v budoucnu stanou. A teď si představte, že do toho všeho přihodíte další jazyk. Zavádí to nové způsoby, jak dělat chyby. Vyžaduje, aby vývojáři věděli, co dělají. Je to přinejmenším riziko.

Nyní zvažte také rotaci vývojářů. Lidé přicházejí a odcházejí. Budete nutit každého nového vývojáře, aby se naučil celý nový jazyk? Ne, to je kontraproduktivní. Budete najímat především vývojáře pro Kotlin? Tak to hodně štěstí, najmout dobrého vývojáře Javy je dost těžké.

Lidé to zkoušeli. Musím říct, že s většinou tvrzení v tomto článku nesouhlasím. Je tam sice oprávněná kritika, ale myslím, že nepoužívali Kotlin dostatečně na to, aby skutečně pochopili "způsob Kotlinu". Mnoho komentátorů pod tím článkem si zřejmě myslí něco podobného.

Na tom ale nezáleží. Vsadím se, že by se to stalo i ve vašem projektu. "Zkusil jsem to, nelíbilo se mi to". Nedonutíte je, aby nad tím strávili více času. Nedonutíte je, aby to zkusili znovu. Nedonutíte je, aby tomu dali další šanci. A z praktického hlediska mohou mít pravdu. Java je tak populární, že se použití čehokoli jiného v JVM zdá být zbytečné.

Proč tedy tento článek?

Právě jste strávil značné množství času psaním článku, který zřejmě nemá smysl. Proč bych se měl snažit učit jazyk, když stejně tvrdíte, že to nemá smysl?

Nemyslím si, že je to zbytečné. Pořád si myslím, že Kotlin je skvělý. Pořád ho chci skutečně používat (a skutečně ho používám pro své soukromé projekty). Kdybych mohl, prostě bych na něj přešel a zapomněl na omezení Javy. Ale současná realita říká, že nemůžu. A já se to chci pokusit změnit.

Mým záměrem je, abys, milý čtenáři, alespoň zkusil vystoupit z útulné komfortní zóny Javy. Protože možná, jen možná, si Kotlin zamilujete stejně jako já. A pokud ano, bude o jednoho vývojáře znalého Kotlinu více. trh.

Přečtěte si více:

Nejlepší typy projektů pro Javu

3 nejčastější problémy začínajících firem při vývoji softwarových produktů

Správný způsob, jak najít špičkové vývojáře Java

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

    cs_CZCzech
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech