Java vs. Kotlin: Rozdiely, ktoré by mal každý developer poznať
Patrik Dendis|25.10.2022
Ako si vybrať medzi populárnymi jazykmi Java a Kotlin, aké sú ich konkrétne výhody a nevýhody? Pozrite si porovnanie programovacích jazykov očami developera.
Java sa pri písaní kódu riadi tradičným prístupom a môže sa zdať, že oproti Kotlinu je zbytočne “výrečným” jazykom. Naopak Kotlin je známy svojou stručnosťou, ktorá nám umožňuje výrazne znížiť množstvo kódu. Samozrejme platí, že čím menej kódu, tým hrozí menej chýb spôsobených vývojárom. Poďme však v porovnávaní trochu hlbšie.
Java aj Kotlin sú kompatibilné. To znamená, že ak skompilujem Java alebo Kotlin kód, tak sa vytvorí byte-code v súbore .class. V článku by sme preto priblížili obidva programovacie jazyky a následne poukázali na odlišnosti s praktickými ukážkami.
Java
Java je veľmi populárny objektovo orientovaný programovací jazyk. Bol založený v roku 1995 spoločnosťou Oracle, ktorá ho naďalej spravuje. Syntax je inšpirovaná programovacími jazykmi C a C++. Od ostatných programovacích jazykov sa líši tým, že zdrojový kód sa nekompiluje do strojového kódu, ale do takzvaného “byte-codu”, ktorý sa neskôr vykonáva a spracováva v JVM (Java Virtual Machine).
Výhody
- Platformovo nezávislý programovací jazyk. Pracuje prakticky na akomkoľvek zariadení, serveri alebo operačnom systéme.
- Ponúka dynamickú správu pamäte (Garbage collector), ktorá uľahčuje programátorovi správu pamäte na rozdiel od jazyka C a C++.
- Podpora multithreadingu. Na dosiahnutie maximálneho využitia procesora nám Java ponúka možnosť spustiť viac ako jedno vlákno naraz.
- Stabilita a podpora. Tým, že Java je jedným z najpoužívanejších programovacích jazykov, je skutočne jednoduché nájsť riešenia akéhokoľvek problému.
Nevýhody
- Syntax je odlišná od jazykov, ako sú C++ alebo Python.
- Kvôli kompilácii do byte-codu môžu byť aplikácie pomalšie oproti C++ aplikáciám.
- Aplikácie vyžadujú zväčša viac pamäte.
- Nepodporuje nízkoúrovňové programovanie.
- Na trhu je veľa starších projektov, ktoré používajú staršie technológie a takisto staršie verzie Javy. Znamená to, že aj keď nové verzie Javy implementujú niektoré moderné funckionality, developer ich často nemôže použiť alebo ich použitím vytvára kód s veľkou fragmentáciou.
Kotlin
Kotlin je rovnako ako Java objektovo orientovaný programovací jazyk, naviac však obsahuje aj podporu funkcionálne orientovaného programovania, ktoré sa stáva čoraz populárnejším. Firma JetBrains v roku 2011 odhalila projekt Kotlin ako nový jazyk pre JVM (Java Virtual Machine). Po 8 rokoch vývoja oznámila spoločnosť Google, že Kotlin bude plne podporovaný operačným systémom Android. Od tohto kroku si Kotlin začal získavať popularitu najmä medzi mobilnými vývojármi pre Android. V súčasnosti je Kotlin preferovanejší ako Java pri vývoji Android aplikácii.
Kotlin má samozrejme všetky výhody aj nevýhody programovacieho jazyka Java, preto poukážeme len na niektoré odlišnosti.
Výhody
- Open source jazyk.
- Intuitívna a stručná syntax, ktorá do značnej miery zvyšuje efektivitu.
- Kompatibilný s kódom písaným v Jave.
- Jednoduchý prechod z Java do Kotlinu. Existuje niekoľko aplikácii, ktoré automaticky generujú Kotlin kód z Javy.
- Staticky typizovaný jazyk. Typ premenných explicitne neurčujeme, ale kompilátor sám doplní vhodný dátový typ.
Nevýhody
- Keďže je Kotlin relatívne nový jazyk, podpora je slabšia.
- Potreba učiť sa nový jazyk.
- V súčasnosti je na trhu menej Kotlin developerov ako Java developerov.
- Rozdiel je síce minimálny, ale kompilácia a exekúcia Kotlin kódu je pomalšia ako v Jave.
Porovnanie
1. Nulová bezpečnosť (Null Safety)
Jednou z najväčších nevýhod programovacieho jazyka Java je umožnenie priradiť nulovú hodnotu premenným. Výsledkom je najznámejšia výnimka “NullPointerException”, ktorá nastane pri volaní referencie s nulovou hodnotou.
Preto Kotlin prichádza s riešením, ktoré štandardne neumožňuje priradiť nulovú hodnotu do premennej. Ak to skúsime, aplikácia sa neskompiluje. Ak však programátor potrebuje priradiť nulovú hodnotu, je možné explicitne označiť príslušnú premennú ako nulovú. Použije sa na to symbol “?”.
2. Rožšírenia (Extension Functions)
Kotlin nám umožňuje rozširovať funkčnosť existujúcich tried bez dedenia. Ak chcete deklarovať rozširujúcu funkciu, musíte pred jej názov uviesť typ, ktorý sa rozširuje. Ako príklad sa môžeme pozrieť na “swap” funkciu, ktorá vymení hodnoty na zadaných indexoch pre generický “MutableList<T>”.
3. Inteligentné typovanie (Smart cast)
Ako sme vyššie spomenuli, Kotlin používa inteligentný kompilátor. Smart cast je funkcia, ktorá automaticky kontroluje typ a pretypovanie premennej. Operátor “is” alebo “!is” sa používa na kontrolu typu premennej a následne kompilátor automaticky pretypuje premennú na cieľový typ.
4. Dátové triedy (Data Classes)
Jazyk Kotlin zaviedol koncept dátových tried, ktorých hlavným účelom je jednoducho uchovávať dáta bez zbytočného kódu. Jednoducho povedané, riešenie v Kotline nám umožňuje vyhnúť sa programovaniu metód getter, setters, equals a hashCode, takže triedy modelov sú čistejšie a čitateľnejšie. Dátové triedy sa vynikajúco hodia pri práci s dátami ktoré spolu súvisia, a to ako v rámci klás, tak aj priamo v tele funkcií. Oproti tomu v Jave musí mať developer väčší prehľad o súvisiacich dátach, alebo sa používajú nemenné klasy, ako Pair či Tripple, čo má za následok menej prehľadný kód. Aby Java držala krok s najnovšími trendami, tak od verzie 14 ponúka nový typ “record”, ktorý je podobný ako data class v jazyku Kotlin. Na príkladoch môžeme vidieť obrovský rozdiel medzi Kotlinom a klasickou triedou v Jave.
5. Primitívní typy (Primitive types)
V Javě platí, že proměnné primitivního typu (int, byte, short, double, float, boolean, char, and long) nejsou objekty. Pokud chceme vytvořit objekt z primitivního typu, musíme použít takzvaný wrapper (Integer, Double, Boolean,…). Oproti tomu v Kotlinu, jakmile inicializujete proměnnou primitivního typu, bude automaticky považována za objekt. Následně kompilátor sám určí, zda použije primitivní typ nebo objekt, čehož lze využít při potřebě výkonu.
6. Funkcionální programování (Functional programming)
Velmi důležitá vlastnost jazyka Kotlin je možnost funkcionálního programování. Funkce v Kotlinu jsou považovány za prvotřídní hodnoty, to znamená, že mohou být přiřazeny k proměnným a sdíleny s parametry. Podporuje užitečné metody, mezi které patří funkce vyššího řádu, lambda funkce, přetížení operátora, pozdní vyhodnocení (lazy evaluation) a mnoho dalších.
7. Coroutines
Kotlin priniesol nové možnosti pre asynchrónne operácie vo forme “Coroutines”. Jeho koncept je podobný vláknu (Thread) v tom zmysle, že na spustenie je potrebný blok kódu, ktorý funguje súbežne so zvyškom kódu. Coroutines umožňujú vývojárovi písať kód, pozastaviť vykonávanie a neskôr ho znova obnoviť. Na vykonávanie využívajú vlákno, ale nie sú viazané na konkrétne vlákno. To znamená, že operácia je spustená na jednom vlákne, ale po prerušení a opätovnom spustení sa môže dokončiť na inom vlákne. Preto namiesto vytvárania viacerých vlákien, ktoré musí vývojár spracovať neskôr, sa coroutines vyhýbajú tomu, aby mali príliš veľa vlákien. Navyše sú jasnejšie a stručnejšie ako riešenie v jazyku Java.
Záver
Medzi programovacími jazykmi Java a Kotlin nie je možné vybrať víťaza. Z článku sa môže zdať, že Kotlin je lepší ako Java, ale skutočne záleží od preferencií vývojára a požiadaviek projektu. Ja osobne by som si vybral Kotlin pre menší projekt a určite pre Android aplikáciu. Naopak by som uprednostnil Javu pre robustný projekt a pre začínajúcich vývojárov. Začínajúcim vývojarom sa môže zdať syntax Kotlinu priateľskejšia a ľahšia na učenie, ale podľa mňa vám dá Java hlbšie vedomosti a návyky v programovaní. Potom už bude prechod z Javy na Kotlin jednoduchý.