18. Jun 2021Android

Java vs Kotlin, ktorý programovací jazyk je lepší na vývoj Android aplikácie?

Java nám developerom priniesla veľa radosti (aj smútku) pri vývoji Android aplikacií. Je celosvetovo uznávana nie len v oblasti mobilných zariadení. Kotlin je tu síce krátko, ale má toho čo ponúknuť. Prečítaj si nasledujúce porovnanie z profesionalného pozadia a utvor si názor sám.

Tomáš ParonaiAndroid Developer

Čo je to Java? 

Java je známy objektovo orientovaný programovací jazyk. Jazyk je navrhnutý tak, aby mal čo najmenej závislostí od implementácie. Java bola vydaná v roku 1996 spoločnosťou Sun Microsystems. Zdrojové kódy Javy sú aj verejne dostupné na GitHube. Väčšina mobilných android aplikácií, ktoré nájdete na Google Play, Amazon Appstore alebo Aptoide, je naprogramovaná v Jave.

Čo je to Kotlin?

Kotlin 1.0 bol vydaný začiatkom roka 2016 spoločnosťou JetBrains. Kotlin je staticky typovaný programovací jazyk. Pri kompilácií je preložený na Java bytecode, ktorý beží na JVM (Java Virtual Machine). Kotlin nie je taký populárny ani rozšírený ako Java, ale existuje niekoľko známych spoločností, ktoré tento jazyk používajú: Pinterest, Trello, Kickstarter, GoodRequest...

Syntax

Kotlin bol od začiatku navrhnutý tak, aby bol kompatibilný s Javou. Toto dokonale uľahčuje vývojárom nie len migrovať projekty na Kotlin, ale aj používať knižnice naprogramované v Jave. Jazyk je dizajnovaný tak, aby sme dokázali spraviť viac za menej času.

Trieda v Jave

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Trieda v Kotline

class Person(val name: String, val age: Int)

//alebo
data class Person(val name: String, val age: Int)

Pri Kotline sa nám už automaticky generujú gettery a settery. Samozrejme nezabudnime spomenúť aj slávnu funkciu copy, ktorá je súčasťou každej datovej triedy. Dátové triedy sú nemenné, čo nám uľahčuje prácu vo viac vláknových programoch. Copy nám skopíruje inštanciu a vytvorí novú, kde vieme posunúť iné hodnoty.

val person = Person("Android developer", 30)
val copyPerson = person.copy(age = 50)

NullPointerException

V Jave je veľkou nevýhodou Nullable. Keď si definujeme premennú String name , nevieme s určitosťou povedať, že či name má v sebe hodnotu, alebo nemá. Môže sa bežne stať, že pri práci s premennou, môžeme dostať NullPointerException.

V Kotline máme voľbu, že či premennú definujeme ako Nullable (v Kotline sa to nazýva Optional) val name: String? . Tu s istotou vieme povedať, že premenná môže obsahovať null. Ak by sme definovali bez otáznika, vieme s istotou povedať, že premenná nikdy nemôže mať null.

Null safety Java

Person person = new Person(null, 21);
try {
    System.out.println(person.getName().charAt(0));
} catch (NullPointerException e) {
    System.out.println("No name");
}

Null safety Kotlin

data class Person(val name: String?, val age: Int)
val person = Person(null, 30)
person.name?.get(0)?.let(::println)

V Jave musíme počítať s tým, že môže byt null, v Kotline to vieme zabezpečiť znakom ? čo nám zabezpečí, že inštrukcia nepokračuje ďalej v prípade null.

Patríš do tímu milovníkov Mačiek a Kotlinu? Náš Android tím hľadá posily!

Otvorená pozícia pre Android Developerov

Rýchlosť

Môžeme povedať, že Java a Kotlin majú rovnakú rýchlosť kódenia. Kotlin má viac lakonických konštrukcií, ktoré umožňujú Android developerovi menej písať. Ale má to jeden háčik, hľadanie riešenia úlohy v Kotline potrebuje viac času ako na Jave. To znamená, že Kotlin má väčšiu kognitívnu záťaž ako Java. Ak ste fantastický abstraktný mysliteľ, Kotlin je vaša voľba.

Čo sa rýchlosti kompilácie týka, Kotlin je o niečo pomalší ako Java. V oboch prípadoch sa prekladajú inštrukcie do Java bytcodu. Kotlin ma viac vlastnosti ako Java, a preto vidíme rozdiel. Rovnako aj exekúcia inštrukcií je v Jave rýchlejšia. Musím však podotknúť, že rozdiel je minimálny a pri dnešných strojoch zanedbateľný.

Stabilita

Java je tu s nami už niekoľko desaťročí. Verzie javy majú dlhodobú podporu od Java 8, čokoľvek by sa pokazilo, zakladatelia to vedia rýchlo opraviť. Kotlin je tu ešte len krátko a stále sa vyvíja. Stále tu existuje možnosť, že niektoré vlastnosti jazyka, ktoré sú dnes podporované v novších verziách už nebudú, čo môže spôsobiť problémy pri aktualizácií.

Z dôvodu, že Java je tu s nami už dlhšie, existuje mnoho kníh a návodov či dokumentácie, odkiaľ vieme čerpať vedomosti a know how. Kotlin síce má niekoľko dobrých oficiálnych zdrojov, ale to je asi všetko.

Kotlin & Android

Kotlin pracuje s Java bytecode, tu nie je žiaden problém. Ak sa pozrieme na Google trends, Java je stále o dosť populárnejšia na Slovensku ako Kotlin. Vo svete to nie je o nič iné. Kotlin je však práve dizajnovaný na vývoj mobilných aplikácií. JetBrains nie sú len jej autormi, ale tak isto autormi najznámejšiemu rozhraniu Android Studio. Naučiť sa Kotlin môže byť náročnejšie, lebo si to vyžaduje viac kognitívneho myslenia. Jave píšeme viac kódu na vyriešenie úlohy, ale máme viac know how a už hotových riešení, z ktorých vieme čerpať. Nie je žiaden problém naprogramovať android aplikáciu čisto len v Kotline. Pobeží rovnako dobre ako v Jave.

trends.embed.renderExploreWidget("TIMESERIES", {"comparisonItem":[{"keyword":"/m/07sbkfb","geo":"SK","time":"today 12-m"},{"keyword":"/m/0_lcrx4","geo":"SK","time":"today 12-m"}],"category":0,"property":""}, {"exploreQuery":"geo=SK&q=%2Fm%2F07sbkfb,%2Fm%2F0_lcrx4&date=today 12-m,today 12-m","guestPath":"https://trends.google.com:443/trends/embed/"});

Kotlin alebo Java?

Osobne preferujem Kotlin nad Javou. Skutočnosť, že menej kódu robí viac je pre mňa veľký faktor. V jednoduchosti je krása. Ak čítam kód, trávim pri Kotline menej času hľadaním ako pri Jave. Pochopiť základy a skryté triky jazyka boli ťažké a po rokoch stále existujú vlastnosti a riešenia, na ktoré prichádzam postupne. Statické rozšírenia (Kotlin extensions) existujúcich tried je tiež veľké plus.

Čo sa práce s viacerými vláknami týka, v Kotline mame natívnu podporu Kotlin Coroutines. V Jave si na to musíme zobrať na pomoc RxJava alebo používať callbacky. Coroutiny nám opäť zjednodušujú čitateľnosť kódu, ale vyžaduje si to o to väčšiu abstraktnú predstavivosť. Zase v opačnom prípade Javy, pri RxJave je potrebné študovať dlhšie kód a dokumentáciu.

S čím mám začať?

Toto rozhodnutie záleží od vás. Myslím si, že začať s Javou je jednoduchšie. Je viac rozšírená, existuje oveľa viac návodov a príručiek. Potom by som premostil na Kotlin. Pri Jave rýchlejšie pochopíte kolieska programu a čo sa prečo kde deje. Naučiť sa potom Kotlin už bude jednoduchšie. Treba brať do úvahy aj to, že Java je multiplatformový jazyk, ktorý nie je rozšírený len na vývoj mobilných aplikácií, ale aj na iné zariadenia, servery či operačné systémy.

Programovať v Kotline je zábava, programovať v Jave je práca.

Ak preferujete jednoduchosť a priamosť, jednoznačne Java.

Ak máte radi výzvu a abstraktnosť, jednoznačne Kotlin.

Nezabudnite navštíviť naše užitočné #goodroidtips

Tomáš ParonaiAndroid Developer