Java vs. Kotlin: Rozdíly, které by měl každý developer znát
Patrik Dendis|25.10.2022
Jak si vybrat mezi populárními jazyky Java a Kotlin, jaké jsou jejich konkrétní výhody a nevýhody? Podívejte se na porovnání programovacích jazyků očima developera.
Java se při psaní kódu řídí tradičním přístupem a může se zdát, že oproti Kotlinu je zbytečně "mnohomluvným" jazykem. Naopak Kotlin je známý svou stručností, která nám umožňuje výrazně snížit množství kódu. Samozřejmě platí, že čím méně kódu, tím hrozí méně chyb způsobených vývojářem. Pojďme však v porovnání trochu hlouběji.
Java i Kotlin jsou kompatibilní. To znamená, že když zkompiluji Java nebo Kotlin kód, tak se vytvoří byte-code v souboru .class. V článku bychom proto přiblížili oba programovací jazyky a následně poukázali na rozdíly s praktickými ukázkami.
Java
Java je velmi populární objektově orientovaný programovací jazyk. Byla založena v roce 1995 společností Oracle, která ji nadále spravuje. Syntax je inspirována programovacími jazyky C a C++. Od ostatních programovacích jazyků se liší tím, že zdrojový kód se nekompiluje do strojového kódu, ale do takzvaného "byte-kódu", který se následně vykonává a zpracovává v JVM (Java Virtual Machine).
Výhody
- Platformově nezávislý programovací jazyk. Funguje prakticky na jakémkoliv zařízení, serveru nebo operačním systému.
- Nabízí dynamickou správu paměti (Garbage collector), která usnadňuje programátorovi správu paměti na rozdíl od jazyka C a C++.
- Podpora multithreadingu. Pro dosažení maximálního využití procesoru nám Java nabízí možnost spustit více než jedno vlákno najednou.
- Stabilita a podpora. Jelikož Java je jedním z nejpoužívanějších programovacích jazyků, je skutečně jednoduché najít řešení jakéhokoliv problému.
Nevýhody
- Syntax je odlišná od jazyků, jako jsou C++ nebo Python.
- Kvůli kompilaci do byte-kódu mohou být aplikace pomalejší oproti C++ aplikacím.
- Aplikace vyžadují obvykle více paměti.
- Nepodporuje nízkoúrovňové programování.
- Na trhu je mnoho starších projektů, které používají starší technologie a také starší verze Javy. To znamená, že i když nové verze Javy implementují některé moderní funkcionality, vývojář je často nemůže použít nebo jejich použitím vytváří kód s velkou fragmentací.
Kotlin
Kotlin je stejně jako Java objektově orientovaný programovací jazyk, navíc však obsahuje i podporu funkčně orientovaného programování, které se stává čím dál populárnějším. Firma JetBrains v roce 2011 odhalila projekt Kotlin jako nový jazyk pro JVM (Java Virtual Machine). Po 8 letech vývoje oznámila společnost Google, že Kotlin bude plně podporován operačním systémem Android. Od tohoto kroku si Kotlin začal získávat popularitu zejména mezi mobilními vývojáři pro Android. V současnosti je Kotlin preferovanější než Java při vývoji Android aplikací.
Kotlin má samozřejmě všechny výhody i nevýhody programovacího jazyka Java, proto poukážeme jen na některé odlišnosti.
Výhody
- Open source jazyk.
- Intuitivní a stručná syntax, která do značné míry zvyšuje efektivitu.
- Kompatibilní s kódem napsaným v Javě.
- Jednoduchý přechod z Javy do Kotlinu. Existuje několik aplikací, které automaticky generují Kotlin kód z Javy.
- Staticky typizovaný jazyk. Typ proměnných explicitně neurčujeme, ale kompilátor sám doplní vhodný datový typ.
Nevýhody
- Jelikož je Kotlin relativně nový jazyk, podpora je slabší.
- Potřeba učit se nový jazyk.
- V současnosti je na trhu méně Kotlin vývojářů než Java vývojářů.
- Rozdíl je sice minimální, ale kompilace a exekuce Kotlin kódu je pomalejší než v Javě.
Porovnání
Nulová bezpečnost (Null Safety)
Jednou z největších nevýhod programovacího jazyka Java je umožnění přiřadit nulovou hodnotu proměnným. Výsledkem je nejznámější výjimka “NullPointerException”, která nastane při volání reference s nulovou hodnotou.
Proto Kotlin přichází s řešením, které standardně neumožňuje přiřadit nulovou hodnotu do proměnné. Pokud to zkusíme, aplikace se neskompiluje. Pokud však programátor potřebuje přiřadit nulovou hodnotu, je možné explicitně označit příslušnou proměnnou jako nulovou. Použije se na to symbol “?”.
Rozšíření (Extension Functions)
Kotlin nám umožňuje rozšiřovat funkčnost existujících tříd bez dědění. Chcete-li deklarovat rozšiřující funkci, musíte před její název uvést typ, který se rozšiřuje. Jako příklad se můžeme podívat na funkci “swap”, která vymění hodnoty na zadaných indexech pro generický “MutableList<T>”.
Inteligentní typování (Smart cast)
Jak jsme již výše zmínili, Kotlin používá inteligentní kompilátor. Smart cast je funkce, která automaticky kontroluje typ a přetypování proměnné. Operátor “is” nebo “!is” se používá na kontrolu typu proměnné a následně kompilátor automaticky přetypuje proměnnou na cílový typ.
Datové třídy (Data Classes)
Jazyk Kotlin zavedl koncept datových tříd, jejichž hlavním účelem je jednoduše uchovávat data bez zbytečného kódu. Jednoduše řečeno, řešení v Kotlinu nám umožňuje vyhnout se programování metod getter, setter, equals a hashCode, takže třídy modelů jsou čistější a čitelnější. Datové třídy se výborně hodí při práci s daty, která spolu souvisí, a to jak v rámci tříd, tak přímo v těle funkcí. Naproti tomu v Javě musí mít vývojář větší přehled o souvisejících datech, nebo se používají neměnné třídy, jako Pair nebo Triple, což má za následek méně přehledný kód. Aby Java držela krok s nejnovějšími trendy, tak od verze 14 nabízí nový typ “record”, který je podobný jako data class v jazyku Kotlin. Na příkladech můžeme vidět obrovský rozdíl mezi Kotlinem a klasickou třídou v Javě.
Primitívne typy (Primitive types)
V Jave platí, že premenné primitívneho typu (int, byte, short, double, float, boolean, char, and long) nie sú objekty. Ak chceme vytvoriť objekt z primitívneho typu, musíme použiť takzvaný wrapper (Integer, Double, Boolean,…). Oproti tomu v Kotline, akonáhle inicializujete premennú primitívneho typu, bude automaticky považovaná za objekt. Následne kompilátor sám určí, či použije primitívny typ alebo objekt, čo sa dá využiť pri potrebe výkonu.
Functional programming (Funkcionálne programovanie)
Veľmi dôležitá vlastnosť jazyka Kotlin je možnosť funkcionálneho programovania. Funkcie v Kotline sú považované za prvotriedne hodnoty, to znamená, že môžu byť priradené k premenným a zdieľané s parametrami. Podporuje užitočné metódy, medzi ktoré patria funkcie vyššieho rádu, lambda funkcie, preťaženie operátora, neskoré vyhodnotenie (lazy evaluation) a mnoho ďalších.
Coroutines
Kotlin přinesl nové možnosti pro asynchronní operace ve formě "Coroutines". Jeho koncept je podobný vláknu (Thread) v tom smyslu, že pro spuštění je potřebný blok kódu, který funguje současně se zbytkem kódu. Coroutines umožňují vývojáři psát kód, pozastavit provádění a později ho znovu obnovit. Na provádění využívají vlákno, ale nejsou vázané na konkrétní vlákno. To znamená, že operace je spuštěna na jednom vláknu, ale po přerušení a opětovném spuštění se může dokončit na jiném vláknu. Proto místo vytváření více vláken, které musí vývojář zpracovat později, se coroutines vyhýbají tomu, aby měly příliš mnoho vláken. Navíc jsou jasnější a stručnější než řešení v jazyku Java.
Závěr
Mezi programovacími jazyky Java a Kotlin nelze vybrat vítěze. Z článku se může zdát, že Kotlin je lepší než Java, ale skutečně záleží na preferencích vývojáře a požadavcích projektu. Osobně bych si vybral Kotlin pro menší projekt a určitě pro Android aplikaci. Naopak bych upřednostnil Javu pro robustní projekt a pro začínající vývojáře. Začínajícím vývojářům se může zdát syntax Kotlinu přívětivější a snazší na učení, ale podle mě vám Java dá hlubší znalosti a návyky v programování. Poté už bude přechod z Javy na Kotlin jednoduchý.