23. Feb 2023Android

Java vs. Kotlin, který programovací jazyk je lepší pro vývoj aplikací pro Android?

Java nám developerům přinesla mnoho radosti (i smutku) při vývoji aplikací pro Android. Je celosvětově uznávaná nejen v oblasti mobilních zařízení. Kotlin je sice na světě krátce, ale má co nabídnout. Přečtěte si následující srovnání z profesionálního prostředí a utvořte si vlastní názor.

Tomáš ParonaiAndroid Developer

Co je to Java? 

Java je známý objektově orientovaný programovací jazyk. Jazyk je navržený tak, aby měl co nejméně implementačních závislostí. Java byla vydaná v roce 1996 společností Sun Microsystems. Zdrojové kódy Javy jsou navíc veřejně dostupné na GitHubu. Většina mobilních aplikací pro Android, které najdete na Google Play, Amazon Appstore nebo Aptoide, je naprogramovaná v Javě.

Co je to Kotlin?

Kotlin 1.0 byl vydaný na začátku roku 2016 společností JetBrains. Kotlin je staticky typovaný programovací jazyk. Při kompilaci je přeložen do bytecode Javy, který běží v JVM (Java Virtual Machine). Kotlin není tak oblíbený ani rozšířený jako Java, ale existuje několik známých společností, které tento jazyk používají: Pinterest, Trello, Kickstarter, GoodRequest...

Syntaxe

Kotlin byl od začátku navržený tak, aby byl kompatibilní s Javou. Díky tomu mohou vývojáři nejen snadno migrovat projekty do jazyka Kotlin, ale taky používat knihovny naprogramované v Javě. Jazyk je navržený tak, abychom toho zvládli víc za kratší dobu.

Třída v Javě

Třída v Kotlinu

V Kotlinu už se nám automaticky generují gettery a settery. Samozřejmě nesmíme zapomenout zmínit i slavnou funkci copy, která je součástí každé datové třídy. Datové třídy jsou neměnné, což nám usnadňuje práci ve vícevláknových programech. Copy nám zkopíruje instanci a vytvoří novou, do které můžeme přesunout další hodnoty.

NullPointerException

V Javě je velkou nevýhodou Nullable. Když definujeme řetězcovou proměnnou String name, nemůžeme s jistotou říct, zda v ní name má, nebo nemá hodnotu. Běžně se může stát, že při práci s proměnnou dostaneme výjimku NullPointerException.

V Kotlinu máme možnost rozhodnout, zda proměnnou definujeme jako Nullable (v Kotlinu se nazývá Optional) val name: String?. Tady můžeme s jistotou říct, že proměnná může obsahovat null. Pokud bychom definovali bez otazníku, můžeme s jistotou říct, že proměnná nemůže být nikdy null.

Null safety Java

Null safety Kotlin

V Javě musíme počítat s tím, že může být null, v Kotlinu jsme schopní to zajistit znakem ?, což nám zajistí, že instrukce v případě null nepokračuje dál.

Rychlost

Dá se říct, že Java a Kotlin mají stejnou rychlost kódování. Kotlin má víc lakonických konstrukcí, které umožňují Android developerovi méně psát. Má to ale jeden háček, hledání řešení úlohy v Kotlinu vyžaduje víc času než v Javě. To znamená, že s Kotlinem je spojená větší kognitivní zátěž než s Javou. Pokud jste geniální abstraktní myslitelé, Kotlin je jasná volba.

Z hlediska rychlosti kompilace je Kotlin o něco pomalejší než Java. V obou případech se instrukce překládají do bytecode Javy. Kotlin má víc vlastností než Java, a proto vidíme rozdíl. Stejně tak je v Javě rychlejší i provedení instrukcí. Musím ale podotknout, že rozdíl je minimální a vzhledem k dnešním strojům zanedbatelný.

Stabilita

Java je tu s námi už několik desetiletí. Od verze 8 mají verze Javy dlouhodobou podporu, když se něco pokazí, zakladatelé jsou schopní to rychle opravit. Kotlin je na světě teprve krátce a stále se vyvíjí. Stále existuje možnost, že některé dnes podporované vlastnosti jazyka už v novějších verzích nebudou, což může způsobit problémy při aktualizacích.

Protože Java je tu s námi už delší dobu, existuje řada knih a návodů nebo dokumentací, ze kterých můžeme čerpat vědomosti a know-how. Kotlin sice má několik kvalitních oficiálních zdrojů, ale to je asi tak všechno.

Kotlin a Android

Kotlin pracuje s bytecodem Javy, tady není žádný problém. Pokud se podíváme na Google trends, je Java na Slovensku stále o dost populárnější než Kotlin. A ve světě to je to samé. Kotlin je nicméně navržený právě pro vývoj mobilních aplikací. JetBrains jsou autory nejen Kotlinu, ale i nejznámějšího rozhraní Android Studio. Naučit se Kotlin může být náročnější, protože si žádá víc kognitivního myšlení. V Javě sice k vyřešení úlohy napíšeme víc kódu, ale máme víc know-how a hotových řešení, ze kterých můžeme čerpat. Není žádný problém naprogramovat aplikaci pro Android čistě v Kotlinu. Bude fungovat stejně dobře jako v Javě.

Kotlin, nebo Java?

Osobně dávám přednost Kotlinu před Javou. Skutečnost, že míň kódu nadělá víc muziky, je pro mě důležitým faktorem. V jednoduchosti je krása. Při čtení kódu strávím hledáním v Kotlinu míň času než v Javě. Pochopit základy a skryté triky jazyka bylo obtížné a i po letech stále existují vlastnosti a řešení, na které přicházím postupně. Velké plus představují i statická rozšíření (Kotlin extensions) stávajících tříd.

Pokud jde o práci s více vlákny, máme v Kotlinu nativní podporu Kotlin Coroutines. V Javě si k tomu člověk musí vzít na pomoc RxJava nebo používat callbacky. Coroutiny opět zjednodušují čitelnost našeho kódu, ale vyžadují ještě větší abstraktní představivost. Naopak v Javě je zase u RxJavy nutné déle studovat kód a dokumentaci.

Čím začít?

Tohle rozhodnutí je na vás. Myslím, že jednodušší je začít s Javou. Je rozšířenější a existuje mnohem víc návodů a příruček. Pak bych přešel na Kotlin. V Javě rychleji pochopíte soukolí programu a co a proč se kde děje. Kotlin se pak už naučíte snáz. Taky je třeba vzít v úvahu, že Java je multiplatformový jazyk, který je rozšířený nejen při vývoji mobilních aplikací, ale i aplikací pro jiná zařízení, servery nebo operační systémy.

Programování v Kotlinu je zábava, programování v Javě je práce.

Pokud preferujete jednoduchost a přímočarost, zvolte jednoznačně Javu.

Pokud máte rádi výzvy a abstraktnost, pak jednoznačně Kotlin.

Nezapomeňte navštívit naše užitečné #goodroidtips

Tomáš ParonaiAndroid Developer