Kotlin vs Java - mi a különbség a kettő között?

Szerző: John Stephens
A Teremtés Dátuma: 24 Január 2021
Frissítés Dátuma: 1 Július 2024
Anonim
Kotlin vs Java - mi a különbség a kettő között? - Alkalmazások
Kotlin vs Java - mi a különbség a kettő között? - Alkalmazások

Tartalom


A Java továbbra is az első programozási nyelv, amely eszébe jut, amikor az Android-ra gondol, de nem van a Java használata az Android fejlesztéshez. Valójában a Kotlin most a Googleelőnyben részesítetthivatalos nyelv az Android!

Ha többet szeretne megtudni a Java-ról, ingyenes bevezetőt kaphat a Java tanfolyamra a Make Android Apps webhelyen.

Todaym, az Android Studio a Kotlin támogatott beépített verzióval érkezik, így a Kotlin-kódot értő Android-projekt létrehozása ugyanolyan egyszerű, mint a jelölőnégyzet kiválasztása az Android Studio projektkészítő varázslójában. A túl túlórák miatt növekedett a támogatás, arra a pontra, hogy ez a döntés most elsősorban a preferenciára esik.

De ha átvált a Java-ról a Kotlin-re, akkor pontosan mit nyersz? Milyen tulajdonságokkal rendelkezik Kotlin, amelyeknek nincs a Java, és fordítva?


Ebben a cikkben megvizsgáljuk a Kotlin és Java közötti főbb különbségeket.

Kotlin vs Java, a későbbi tömörebb kódot kínál - findViewByIds nélkül

Ha összehasonlítjuk egy Kotlin osztályt és egy Java osztályt, amelyek ugyanazt a munkát végzik, akkor a Kotlin osztály általában sokkal tömörebb, de van egy olyan terület, ahol Kotlin komolyan csökkentheti az írandó kazánlemez kód mennyiségét: findViewByIds.

A Kotlin Android kiterjesztések lehetővé teszik, hogy egy nézetet hivatkozással importáljon a tevékenységi fájlba, amelyen akkor működhet azzal a nézettel, mintha az a tevékenység része. Az eredmény? Soha többé nem kell írnia új findViewById módszert!

Mielőtt használná ezeket a kiterjesztéseket, hozzá kell adnia egy extra plugint a modulszintű build.gradle fájlhoz (alkalmaznia kell a plugint: 'kotlin-android-kiterjesztések'), de utána készen áll a Nézetek importálására, Példa, ha az activity_main.xml fájl tartalmaz egy TextView-t a textView azonosítóval, akkor a következőt kell hozzáadnia tevékenységéhez:


import kotlinx.android.synthetic.main.activity_main.textView

Ezután hozzáférhet ehhez a TextView-hoz, csak annak azonosítójával:

textView.setText ("Hello World")

Ez sokkal tömörebb, mint a Java-egyenérték:

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

A Kotlin alapértelmezés szerint nem biztonságos

A NullPointerExceptions hatalmas csalódást okoz a Java fejlesztők számára. A Java lehetővé teszi a null hozzárendelését bármelyik változóhoz, de ha olyan objektumos hivatkozást próbál meg használni, amelynek nulla értéke van, akkor készüljön fel egy NullPointerException oldalra!

Olvassa el: Kotiln az Android bevezetéséhez

Kotlin-ben alapértelmezés szerint az összes típus nem nulla (nem képes null értéket tartani). Ha megkísérel nullát hozzárendelni vagy visszaadni a Kotlin-kódban, akkor fordítási időben sikertelen lesz, tehát a következő sorok egyikének sem fog fordulnia:

val name: karakterlánc = null

fun getName (): String = null

Ha te igazán egy null értéket szeretne hozzárendelni egy változóhoz Kotlinben, akkor ezt a változót kifejezetten nulla értékként kell megjelölnie egy kérdőjel hozzáadásával a típus után:

val száma: Int? = null

Ez szinte lehetetlenné teszi Kotlinban a NullPointerExmissions találkozását - valójában, ha találkozik ezzel a kivétellel, akkor valószínű, hogy azért van, mert kifejezetten felkérte Kotlinot, hogy dobjon egyet, vagy a NullPointerException külső Java kódból származik.

Bővítési funkciók

A Kotlin lehetőséget ad a fejlesztőknek, hogy kibővítsék az osztályt új funkciókkal, ami ideális, ha van olyan osztály, amelyről mindig úgy érezte, hogy hiányzik egy fontos módszer!

Ezek a „kiterjesztési funkciók” nem érhetők el a Java-ban, bár azok más programozási nyelveken is elérhetők, amelyeket az Android fejlesztéséhez használhat, például a C #.

Olvassa tovább: Java bemutató kezdőknek

Hozzon létre egy kiterjesztési függvényt azáltal, hogy előírta annak a osztálynak a nevét, amelyet kiterjeszteni szeretne (például 'String') a létrehozandó függvény nevéhez ('styleString'), például:

fun String.styleString (): String {// Írja be a karakterláncot, majd adja vissza //}

Ezután meghívhatja ezt a funkciót a kiterjesztett osztály példányaira, a. jelölés, mintha az osztály része lenne:

myString.styleString ()

A nőstények első osztályú polgárok

Ha egy hosszú ideig tartó műveletet kezdeményez, például hálózati I / O vagy CPU-igényes munkát, a hívó szál blokkolva van, amíg a művelet befejeződik. Mivel az Android alapértelmezés szerint egyszálú lesz, az alkalmazás felhasználói felületének lefagyásakor a fő szál blokkolása után az alkalmazás nem reagál, amíg a művelet be nem fejeződik.

A Java-ban a megoldás hagyományosan egy olyan háttér-szál létrehozása volt, ahol elvégezheti ezt az intenzív vagy hosszú ideje futó munkát, de több szál kezelése összetett, hibára hajlamos kódhoz vezethet, és egy új szál létrehozása drága művelet.

Miközben további szálakat hozhat létre a Kotlin-ban, használhat emellett is. A csúcsok hosszú távú és intenzív feladatokat hajtanak végre, ha egy adott ponton felfüggesztik a végrehajtást a szál blokkolása nélkül, majd ezt a funkciót egy későbbi időpontban folytatják, esetleg egy másik szálon. Ez lehetővé teszi a nem blokkoló aszinkron kód létrehozását úgy néz ki, szinkron, ezért egyértelműbb, tömörebb és emberilebben olvasható. A cserépdarabok szintén nem rakják egymást, így kevesebb memóriafelhasználással bírnak, mint a szálak, és megnyitják az ajtót az aszinkron nem blokkoló programozás további stílusai számára, például az async / várnak.

Nincsenek ellenőrzött kivételek

Kotlin nem ellenőrizte a kivételeket, így nem kell kivételeket elkapnia vagy bejelentenie.

Ez az, ami vonzza Önt Kotlinhez, vagy arra készteti, hogy ragaszkodjon a Java-hoz, az ellenőrzött kivételek véleményétől függ, mivel ez a szolgáltatás megosztja a fejlesztői közösséget. Ha elfárad a Java-kódot kipróbáló / elkapó blokkok miatt, akkor elégedett lesz ezzel a mulasztással, azonban ha úgy találja, hogy az ellenőrzött kivételek ösztönzik a hibajavításra gondolkodni, és végül ösztönözni fogja a robusztusabb termékek létrehozására kódot, akkor valószínűbb, hogy ezt olyan területnek fogja látni, ahol a Java előnye Kotlin felett van.

A küldöttség natív támogatása

Kotlin, a Java-val ellentétben, az „összetétel az öröklés felett” tervezési mintát támogatja első osztályú delegálással (néha implicit delegálással). A delegálás során a fogadó objektum műveleteket delegál egy második delegált objektumra, amely egy helper objektum az eredeti környezettel.

Kotlin osztálydelegációja az öröklés alternatívája, amely lehetővé teszi a többszörös öröklés felhasználását. Eközben a Kotlin delegált tulajdonságai segítenek megakadályozni a kód sokszorosítását, például ha ugyanazt a kódot újra kell használni a több tulajdonság getteréhez és beállítójához, akkor kibonthatja ezt a kódot egy delegált tulajdonságba. A tulajdonság-delegáltnak meg kell határoznia a getValue operátor funkciót és opcionálisan a setValue operátort:

osztály Delegált {operátor szórakoztató getValue (...) ... ... ...} operátor szórakoztató setValue (...) ... ... ...}}

Ezután egy tulajdonság létrehozásakor kijelentheti, hogy az adott tulajdonság getter és setter funkcióit egy másik osztály kezeli:

osztály MyClass {var tulajdonság: String by Delegate ()}

Adat osztályok

Nem szokatlan, hogy egy projektnek több olyan osztálya van, amelyek nem tesznek semmit, csak tárolnak adatokat. A Java-ban találsz magadnak sok kazánlemez-kódot írni ezekre az osztályokra, annak ellenére, hogy maguk az osztályok nagyon kevés funkcionalitással rendelkeznek. Általában meg kell határoznia egy kivitelezőt, az adatok tárolására szolgáló mezőket, az egyes mezők getter és setter funkcióit, valamint a hashCode (), equals () és toString () függvényeket.

Kotlinben, ha belefoglalja az „adatok” kulcsszót az osztálydefinícióba, akkor a fordító elvégzi az összes ezt a munkát az Ön számára, beleértve az összes szükséges getter és setter létrehozását:

adat osztály Dátum (var hónap: karakterlánc, var nap: Int)

Intelligens öntések

A Java-ban gyakran ellenőriznie kell a betűtípust, majd át kell adnia egy objektumot olyan helyzetekben, amikor már egyértelmű, hogy az objektum leadható.

A Kotlin intelligens castjai kezelhetik ezeket a redundáns castokat az Ön számára, így nem kell beírnia egy nyilatkozatot, ha már ellenőrizte Kotlin operátorával. Például a fordító tudja, hogy a következő leadás biztonságos:

if (hello is String) {printString (hello)}

Támogatás az építők számára

A Java-val ellentétben a Kotlin osztálynak lehet elsődleges konstruktora és egy vagy több másodlagos konstruktora, amelyeket úgy hozhat létre, hogy beillesztik őket az osztálynyilatkozatba:

osztály MainActivity konstruktor (firstName: String) {}

Nem támogatja az implicit bővülő konverziókat

Kotlin nem támogatja a számok implicit kibontását, így a kisebb típusok nem kerülnek implicit módon nagyobb típusokká konvertálására. Kotlinben, ha a Bájt típusú értéket szeretne hozzárendelni egy Int változóhoz, akkor explicit konvertálást kell végrehajtania, míg a Java támogatja az implicit konverziókat.

Jegyzetek feldolgozása könyvtárak Kotlin segítségével

A Kotlin támogatja az összes létező Java keretrendszert és könyvtárat, beleértve a fejlett keretrendszereket is, amelyek a kommentárok feldolgozására támaszkodnak, bár egyes Java könyvtárak már biztosítanak Kotlin kiterjesztéseket, mint például az RxKotlin.

Ha olyan Java könyvtárat szeretne használni, amely a kommentárok feldolgozására támaszkodik, akkor a Kotlin projekthez történő hozzáadása kissé eltér, mivel a függőséget a Kotlin-kapt plugin, majd a annotationProcessor helyett használja a Kotlin Annotation feldolgozó eszközt (kapt). Például:

// Alkalmazza a beépülő modult // plugin alkalmazása: kotlin-kapt // Adja hozzá a megfelelő függőségeket a kapt konfiguráció segítségével // függőségek {kapt "com.google.dagger: dagger-fordító: $ dagger-version" ... ... ...}

Cserélhetőség a Java-val

Annak vitatásakor, hogy a Kotlin vagy a Java-t Android-fejlesztésre használja-e, tudnia kell, hogy van egy harmadik lehetőség: használja mindkettőt. A két nyelv közötti különbség ellenére a Java és a Kotlin 100% -ban interoperábilis. Felhívhatjuk a Kotlin kódot a Java-ból, és hívhatjuk a Java-kódot a Kotlin-ből, így lehetséges, hogy a Kotlin és a Java osztályok egymás mellett vannak ugyanazon a projekten belül, és minden továbbra is összeáll.

Ez a rugalmasság a két nyelv közötti váltáshoz akkor hasznos, ha elkezdi a Kotlin alkalmazását, mivel ez lehetővé teszi Kotlin beépítését egy létező projektbe fokozatosan, de érdemes lehet, ha mindkét nyelvet állandóan használja. Például lehet bizonyos funkciókat, amelyeket inkább Kotlin-ben ír, és bizonyos funkciókat, amelyeket könnyebben írhat a Java-ban. Mivel a Kotlin és a Java is bájtkódra fordulnak, a végfelhasználók nem tudják megmondani, hol végződik a Java kódod, és elindul a Kotlin kód, tehát nincs oka annak, hogy miért nem szabad kiadni egy Javaból álló alkalmazást és Kotlin kód.

Ha saját magának akarja kipróbálni a Kotlin-t, addig, amíg telepítve van az Android Studio 3.0 előzetes verziója vagy újabb verziója, az indításhoz van néhány módszer:

  • Hozzon létre egy új Android Studio projektet. A legegyszerűbb módszer egy új projekt létrehozása, és a projekt létrehozása varázslóban a „Kotlin-támogatás beillesztése” jelölőnégyzet kiválasztása.

  • Adjon hozzá egy Kotlin osztályt egy meglévő könyvtárhoz. A Vezérlőgombbal kattintson a kérdéses könyvtárra, majd válassza a „Fájl> Új> Kotlin fájl / osztály” lehetőséget. Az Android Studio megjelenik egy szalaghirdetés, amelyben felkéri a projektet a Kotlin támogatására; kattintson a 'Konfigurálás' linkre, és kövesse a képernyőn megjelenő utasításokat.

  • A meglévő Java fájlok konvertálása Kotlin formátumba. Bármely Java fájlt egy Kotlin konverter segítségével futtathat, ha a Vezérlőgombbal kattint a fájlra, és kiválasztja a "Kód> Java fájl konvertálása Kotlin fájlba" lehetőséget.

Csomagolás

Mint láthatja, számos jó oka van annak, hogy a Kotlin-et a Java-ra preferálják, azonban van néhány terület, ahol a Java a felsőbbrendű. Talán leginkább: sok Android-fejlesztő egyszerűen jobban ismeri a Java-t ezen a ponton. Valószínűleg a Kotlin vs Java vita nem hamarosan rendeződik, mindegyiknek megvan a maga érdeme. Tehát átvált a Kotlinre, vagy úgy érzi, hogy a Java továbbra is a legjobb megoldás az Android fejlesztéshez?

Olvassa tovább: Bevezetés a Java szintaxishoz az Android fejlesztéséhez

Ha bármilyen nehéz üzleti munkát végez a telefonján vagy táblagépén, akkor tudja, hogy az ujjaival a képernyőre koppintá kié fruztrál&#...

Ne gondoljon rá, a 100 dollár alatti legjobb Bluetooth hangzóró a JBL Flip 4. A Bluetooth hangzórók egy tucat fillér, é ha elég hozúnak látzik, m...

Érdekes