Kotlin vs Java - jaký je rozdíl mezi nimi?

Autor: John Stephens
Datum Vytvoření: 24 Leden 2021
Datum Aktualizace: 1 Červenec 2024
Anonim
Kotlin vs Java - jaký je rozdíl mezi nimi? - Aplikace
Kotlin vs Java - jaký je rozdíl mezi nimi? - Aplikace

Obsah


Java může být stále prvním programovacím jazykem, který vás napadne, když přemýšlíte o Androidu, ale nemáte to mít používat Java pro vývoj Androidu. Kotlin je ve skutečnosti Googleupřednostňovánoficiální jazyk pro Android!

Chcete-li se dozvědět více o Java, získejte bezplatný úvod do kurzu Java na stránce Make Android Apps.

Dnes je Android Studio dodáván se zabudovanou podporou Kotlin, takže vytvoření projektu Android, který rozumí kódu Kotlin, je stejně snadné jako zaškrtnutí políčka v průvodci vytvořením projektu pro Android Studio. Podpora pro tuto možnost narostla příliš přesčas, a to až do té míry, že toto rozhodnutí nyní přichází hlavně na preference.

Ale pokud uděláte přechod z Java na Kotlin, co přesně získáte? Jaké vlastnosti má Kotlin, že Java nemá, a naopak?


V tomto článku se podíváme na všechny hlavní rozdíly mezi Kotlinem a Javou.

Kotlin vs Java, později nabízí stručnější kód - bez findViewByIds

Pokud porovnáte třídu Kotlin a třídu Java, které vykonávají stejnou práci, pak bude třída Kotlin obecně mnohem stručnější, ale je tu zejména jedna oblast, kde může Kotlin vážně snížit množství kódu kotlové desky, které potřebujete napsat: findViewByIds.

Rozšíření Kotlin pro Android vám umožní importovat odkaz na pohled do vašeho souboru aktivity, kdy budete moci s tímto pohledem pracovat, jako by to bylo součástí aktivity. Výsledek? Už nikdy nebudete muset psát další metodu findViewById!

Než budete moci tato rozšíření použít, musíte do souboru build.gradle na úrovni modulu přidat další plugin (použít plugin: 'kotlin-android-extensions'), ale poté jste připraveni začít importovat pohledy příklad, pokud váš soubor activity_main.xml obsahoval textové zobrazení s ID textView, přidali byste do své aktivity následující položky:


importovat kotlinx.android.synthetic.main.activity_main.textView

K tomuto TextView pak můžete přistupovat pouze pomocí jeho ID:

textView.setText ("Ahoj svět")

Tohle je hodně stručnější než ekvivalent Java:

TextView text = (TextView) findViewById (R.id.textView); text.setText ("Hello World");

Kotlin je ve výchozím nastavení bezpečný

Výjimky NullPointerException jsou pro vývojáře Java obrovským zdrojem frustrace. Java vám umožňuje přiřadit null k libovolné proměnné, ale pokud se pokusíte použít odkaz na objekt, který má nulovou hodnotu, potom se postavte, abyste narazili na NullPointerException!

Přečtěte si také: Kotiln pro zavedení systému Android

Ve společnosti Kotlin jsou všechny typy ve výchozím nastavení nulitelné (nelze udržet nulovou hodnotu). Pokud se pokusíte přiřadit nebo vrátit null v kódu Kotlin, pak to selže v době kompilace, takže žádný z následujících řádků nebude kompilován:

název val: String = null

fun getName (): String = null

jestli ty opravdu chcete přiřadit nulovou hodnotu k proměnné v Kotlinu, pak je třeba tuto proměnnou explicitně označit jako nullable přidáním otazníku za typ:

val číslo: Int? = null

Díky tomu je téměř nemožné setkat se s NullPointerExceptions v Kotlinu - ve skutečnosti, pokud se setkáte s touto výjimkou, pak je pravděpodobné, že jste výslovně požádali Kotlin, aby jednu hodil, nebo NullPointerException pochází z externího kódu Java.

Rozšiřující funkce

Kotlin dává vývojářům možnost rozšířit třídu o nové funkce, což je ideální, pokud existuje třída, o které jste vždy cítili, že chybí důležitá metoda!

Tyto „rozšiřující funkce“ nejsou dostupné v Javě, ačkoli jsou dostupné v jiných programovacích jazycích, které můžete použít pro vývoj Androidu, například C #.

Číst dále: Výukový program Java pro začátečníky

Funkci rozšíření vytvoříte předponou názvu třídy, kterou chcete rozšířit (například „String“), na název funkce, kterou vytváříte („styleString“), například:

fun String.styleString (): String {// Řetězec stylizujte a poté jej vraťte //}

Tuto funkci pak můžete zavolat na instancích rozšířené třídy pomocí. notace, jako by to bylo součástí té třídy:

myString.styleString ()

Coroutines jsou prvotřídní občané

Kdykoli zahájíte dlouhodobou operaci, například práci na síti I / O nebo práci náročnou na CPU, je volací vlákno blokováno, dokud není operace dokončena. Vzhledem k tomu, že Android je ve výchozím nastavení jednovláknový, jakmile zablokujete hlavní vlákno, uživatelské rozhraní aplikace zamrzne a zůstane přestat reagovat, dokud nebude operace dokončena.

V Javě bylo řešením tradičně vytvoření podprocesu na pozadí, kde můžete provádět tuto intenzivní nebo dlouhodobou práci, ale správa více podprocesů může vést ke složitému kódu náchylnému k chybám a vytvoření nového vlákna je nákladná operace.

Zatímco v Kotlinu můžete vytvářet další vlákna, můžete také použít coroutiny. Coroutines provádějí dlouhodobé a intenzivní úkoly pozastavením provádění v určitém bodě bez blokování podprocesu a poté obnovením této funkce v pozdějším bodě, případně na jiném podprocesu. To vám umožní vytvořit neblokující asynchronní kód, který vzhled synchronní, a proto je jasnější, stručnější a čitelnější pro člověka. Coroutines jsou také bez stohu, takže mají ve srovnání s vlákny nižší využití paměti a otevírají dveře dalším stylům asynchronního neblokujícího programování, jako je async / čekají.

Neexistují žádné kontrolované výjimky

Kotlin nemá kontrolované výjimky, takže nemusíte žádné výjimky chytit ani prohlásit.

Zda to je něco, co vás přitahuje do Kotlin, nebo vás chce držet Java, bude záležet na vašem názoru na kontrolované výjimky, protože to je funkce, která rozděluje vývojářskou komunitu. Pokud jste nemocní zkuste / chytit bloky zaplnit váš kód Java, pak budete spokojeni s tímto opomenutím, ale pokud zjistíte, že kontrolované výjimky povzbudit, abyste přemýšleli o obnovení chyb a nakonec vás tlačí k vytvoření robustnější kód, pak to pravděpodobně uvidíte jako oblast, kde Java má výhodu nad Kotlinem.

Nativní podpora delegace

Kotlin, na rozdíl od Java, podporuje návrhový vzorec „složení přes dědičnost“ prostřednictvím prvotřídní delegace (někdy známé jako implicitní delegování). Delegování je místo, kde přijímající objekt deleguje operace na druhý delegovaný objekt, což je pomocný objekt s původním kontextem.

Kotlinova delegace třídy je alternativou dědičnosti, která umožňuje použít vícenásobné dědictví. Mezitím Kotlinovy ​​delegované vlastnosti pomáhají zabránit duplicitě kódu, například pokud potřebujete znovu použít stejný kód pro getery a setters s více vlastnostmi, pak můžete tento kód extrahovat do delegované vlastnosti. Delegát vlastnosti musí definovat funkci operátora getValue a případně operátora setValue:

class Delegate {operator fun getValue (...) ... ... ...}} operátor fun setValue (...) ... ... ...}}

Když vytváříte vlastnost, můžete prohlásit, že funkce getter a setter pro tuto konkrétní vlastnost jsou zpracovány jinou třídou:

class MyClass {var property: String by Delegate ()}

Datové třídy

Není neobvyklé, že projekt má více tříd, které nedělají nic jiného než uchování dat. V Javě se ocitnete v psaní velkého kódu pro tyto třídy, i když samotné třídy mají jen velmi malou funkčnost. Obvykle budete muset definovat konstruktor, pole pro ukládání dat, funkce getteru a setteru pro každé pole plus funkce hashCode (), equals () a toString ().

Pokud v Kotlinu zahrnete klíčové slovo „data“ do vaší definice třídy, kompilátor provede tuto práci za vás, včetně vygenerování všech potřebných getterů a setterů:

datová třída Datum (var měsíc: String, var den: Int)

Inteligentní obsazení

V Javě je často nutné zkontrolovat typ a poté odevzdat objekt v situacích, kdy je již jasné, že objekt lze obsadit.

Inteligentní obsazení Kotlinu zvládne tyto nadbytečné obsazení za vás, takže nemusíte vkládat prohlášení, pokud jste to již zkontrolovali u Kotlinova operátora. Kompilátor například ví, že následující obsazení je bezpečné:

if (ahoj je String) {printString (ahoj)}

Podpora konstruktérů

Na rozdíl od Java může mít třída Kotlin primární konstruktor a jednoho nebo více sekundárních konstruktorů, které vytvoříte zahrnutím do deklarace třídy:

konstruktor třídy MainActivity (jméno: String) {}

Žádná podpora pro implicitní rozšíření konverzí

Kotlin nepodporuje implicitní rozšíření konverzí pro čísla, takže menší typy nejsou implicitně převedeny na větší typy. Pokud chcete v Kotlinu přiřadit hodnotu typu Byte k proměnné Int, musíte provést explicitní převod, zatímco Java má podporu pro implicitní konverze.

Knihovny zpracovávající anotace s Kotlinem

Kotlin podporuje všechny existující rámce a knihovny Java, včetně pokročilých rámců, které se spoléhají na zpracování anotací, ačkoli některé knihovny Java již poskytují Kotlin rozšíření, jako je RxKotlin.

Pokud chcete použít knihovnu Java, která se spoléhá na zpracování anotací, je přidání do projektu Kotlin trochu odlišné, protože závislost je třeba určit pomocí kotlin-kapt plugin a poté místo nástroje annotationProcessor použijte nástroj pro zpracování anotací Kotlin (kapt). Například:

// Použít plugin // Apply plugin: kotlin-kapt // Přidejte příslušné závislosti pomocí konfigurace kapt // Závislosti {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

Zaměnitelnost s Java

Při debatě o tom, zda použít Kotlin nebo Java pro vývoj Androidu, byste měli vědět, že existuje třetí možnost: použijte oba. Přes všechny rozdíly mezi těmito dvěma jazyky jsou Java a Kotlin 100% interoperabilní. Můžete volat kód Kotlin z Javy a můžete volat kód Java z Kotlin, takže je možné mít třídy Kotlin a Java vedle sebe ve stejném projektu a všechno se bude stále kompilovat.

Tato flexibilita při přechodu mezi dvěma jazyky je užitečná, když začínáte s Kotlinem, protože vám umožňuje postupně zavádět Kotlin do existujícího projektu, ale můžete také raději používat oba jazyky trvale. Například mohou existovat určité funkce, které chcete psát v Kotlin, a některé funkce, které je pro vás snadnější psát v Javě. Jelikož se Kotlin i Java kompilují do bajtkódu, vaši koncoví uživatelé nebudou moci zjistit, kde končí váš kód Java, a začíná kód Kotlin, takže není důvod, proč nemůžete uvolnit aplikaci, která se skládá z Java a Kotlinův kód.

Pokud si chcete Kotlin vyzkoušet sami, pak pokud máte nainstalovanou Android Studio 3.0 nebo vyšší, můžete začít několika způsoby:

  • Vytvořte nový projekt Android Studio. Nejjednodušší metodou je vytvoření nového projektu a zaškrtnutí políčka Zahrnout podporu Kotlin z průvodce vytvořením projektu.

  • Přidejte třídu Kotlin do existujícího adresáře. Klepněte pravým tlačítkem myši na dotyčný adresář a poté vyberte „Soubor> Nový> Soubor / třída Kotlin.“ Aplikace Android Studio zobrazí banner s výzvou ke konfiguraci projektu pro podporu Kotlin; klikněte na odkaz „Konfigurovat“ a postupujte podle pokynů na obrazovce.

  • Převést existující soubory Java na Kotlin. Jakýkoli soubor Java můžete spouštět pomocí převaděče Kotlin kliknutím na soubor Control a výběrem položky Kód> Převést soubor Java na soubor Kotlin.

Zabalení

Jak vidíte, existuje mnoho dobrých důvodů, proč preferovat Kotlin před Javou, ale existuje několik oblastí, kde Java má navrch. Snad nejvíce pozoruhodně: mnoho vývojářů Androidu je v tomto bodě Java jednoduše obeznámen. Pravděpodobně se debata Kotlin vs Java nevyrovná v dohledné době a obě budou mít své vlastní zásluhy. Takže se chystáte přejít na Kotlin, nebo máte pocit, že Java je stále nejlepší volbou pro vývoj Androidu?

Číst dále: Úvod do syntaxe Java pro vývoj Androidu

WhatApp nevyžaduje helo nebo PIN, aby bylo možné otevřít, což znamená, že kdokoli má přítup k vašemu účtu, pokud je váš telefon odemknutý. Naštětí polečnot...

WhatApp je jedním z nejlepších komunikačních nátrojů na větě, ale jeho popularita také znamená falešné zprávy a fámy šířené jako požár. Našt...

Zajímavý