Kotlin vs Java - vad är skillnaden mellan de två?

Författare: John Stephens
Skapelsedatum: 24 Januari 2021
Uppdatera Datum: 1 Juli 2024
Anonim
Kotlin vs Java - vad är skillnaden mellan de två? - Appar
Kotlin vs Java - vad är skillnaden mellan de två? - Appar

Innehåll


Java kan fortfarande vara det första programmeringsspråket som kommer att tänka på när du tänker på Android, men det gör du inte ha att använda Java för Android-utveckling. Faktum är att Kotlin nu är Googlesföredragetofficiellt språk för Android!

För att lära dig mer om Java får du en gratis introduktion till Java-kurs på Make Android Apps.

I dag levereras Android Studio med inbyggt Kotlin-stöd, så att skapa ett Android-projekt som förstår Kotlin-koden är lika enkelt som att välja en kryssruta i Android Studios projektguide. Stödet har vuxit för alternativet för övertid, till den punkten att detta beslut nu främst kommer till preferenser.

Men om du gör övergången från Java till Kotlin, vad exakt tjänar du på? Vilka funktioner har Kotlin, som Java inte har, och vice versa?


I den här artikeln kommer vi att titta på alla de stora skillnaderna mellan Kotlin och Java.

Kotlin vs Java, den senare erbjuder mer kortfattad kod - utan findViewByIds

Om du jämför en Kotlin-klass och en Java-klass som utför samma arbete, kommer Kotlin-klassen i allmänhet att vara mycket mer kortfattad, men det finns ett område i synnerhet där Kotlin på allvar kan minska mängden pannplåtkod du behöver skriva: findViewByIds.

Med Kotlin Android-tillägg kan du importera en referens till en vy till din aktivitetsfil, då kan du arbeta med den vyn som om den var en del av aktiviteten. Resultatet? Du kommer aldrig att behöva skriva en annan findViewById-metod igen!

Innan du kan använda dessa tillägg måste du lägga till en extra plugin till din build-grader-fil på modulnivå (applicera plugin: 'kotlin-android-extensions') men efter det är du redo att börja importera vyer, för exempel om din Activity_main.xml-fil innehöll en TextView med ID textView, skulle du lägga till följande i din aktivitet:


importera kotlinx.android.synthetic.main.activity_main.textView

Du kan sedan komma åt den här TextView med bara dess ID:

textView.setText ("Hej världen")

Detta är mycket mer kortfattad än Java-motsvarigheten:

TextView text = (TextView) findViewById (R.id.textView); text.setText ("Hej världen");

Kotlin är nollsäker som standard

NullPointerExceptions är en enorm källa till frustration för Java-utvecklare. Java tillåter dig att tilldela noll till vilken variabel som helst, men om du försöker använda en objektreferens som har ett nollvärde, så stag själv för att möta en NullPointerException!

Läs också: Kotiln för Android introduktion

I Kotlin är alla typer som inte är nullabara (kan inte hålla nollvärde) som standard. Om du försöker tilldela eller returnera noll i din Kotlin-kod kommer den att misslyckas vid kompileringstidpunkten, så ingen av följande rader kommer att kompilera:

valnamn: String = null

fun getName (): String = null

Om du verkligen vill tilldela ett nollvärde till en variabel i Kotlin, då måste du markera den variabelen uttryckligen som nullable, genom att lägga till ett frågetecken efter typen:

valnummer: Int? = noll

Detta gör det nästan omöjligt att stöta på NullPointerExceptions i Kotlin - om du faktiskt stöter på detta undantag, är det troligt att det beror på att du uttryckligen bad Kotlin att kasta en, eller att NullPointerException härstammar från extern Java-kod.

Förlängningsfunktioner

Kotlin ger utvecklarna möjligheten att utöka en klass med ny funktionalitet, vilket är idealiskt om det finns en klass som du alltid kände saknade en viktig metod!

Dessa "förlängningsfunktioner" är inte tillgängliga i Java, även om de finns tillgängliga på andra programmeringsspråk som du kan använda för Android-utveckling, till exempel C #.

Läs nästa: Java-handledning för nybörjare

Du skapar en tilläggsfunktion genom att prefixera namnet på den klass du vill utöka (till exempel 'String') till namnet på den funktion du skapar ('styleString') till exempel:

fun String.styleString (): String {// Style strängen och sedan returnera den //}

Du kan sedan ringa den här funktionen i instanser av den utökade klassen via. notation, som om det var en del av den klassen:

myString.styleString ()

Coroutines är förstklassiga medborgare

När du påbörjar en långvarig operation, till exempel nätverks I / O eller CPU-intensivt arbete, blockeras anropstråden tills operationen är klar. Eftersom Android som standard är trådat med en tråd, så snart du blockerar huvudtråden kommer appens gränssnitt att frysa, och det kommer inte att svara tills operationen är klar.

I Java har lösningen traditionellt varit att skapa en bakgrundstråd där du kan utföra detta intensiva eller långvariga arbete, men att hantera flera trådar kan leda till en komplex, felbenägen kod och att skapa en ny tråd är en dyr operation.

Medan du kan skapa ytterligare trådar i Kotlin, kan du också använda koroutiner. Coroutines utför långa och intensiva uppgifter genom att avbryta körningen vid en viss punkt utan att blockera tråden och sedan återuppta denna funktion vid en senare punkt, eventuellt på en annan tråd. Detta låter dig skapa asynkron kod som inte blockerar den utseende synkron, och är därför mer tydlig, kortfattad och mänsklig läsbar. Coroutines är också stacklösa, så de har en lägre minnesanvändning jämfört med trådar, och de öppnar dörren för ytterligare stilar av asynkron icke-blockerande programmering, till exempel async / väntar.

Det finns inga kontrollerade undantag

Kotlin har inte kontrollerade undantag, så du behöver inte fånga eller förklara några undantag.

Oavsett om det här är något som drar dig till Kotlin eller gör att du vill hålla fast vid Java beror på din åsikt om kontrollerade undantag, eftersom det här är en funktion som delar utvecklargemenskapen. Om du är trött på att försöka / fånga block med röran i din Java-kod, kommer du att vara nöjd med detta utelämnande, men om du tycker att kontrollerade undantag uppmuntrar dig att tänka på felåterställning och i slutändan driva dig mot att skapa mer robust kod, då är det mer troligt att du ser detta som ett område där Java har kanten över Kotlin.

Infödda stöd för delegationen

Till skillnad från Java stöder Kotlin designmönstret "komposition över arv" via förstklassig delegation (ibland känd som implicit delegation). Delegering är där ett mottagande objekt delegerar operationer till ett andra delegatobjekt, vilket är ett hjälparobjekt med det ursprungliga sammanhanget.

Kotlins klassdelegation är ett alternativ till arv som gör det möjligt att använda flera arv. Samtidigt hjälper Kotlins delegerade egenskaper att förhindra duplicering av kod, till exempel om du behöver återanvända samma kod för flera egenskaper för bokstäver och inställningar, kan du extrahera den här koden till en delegerad egenskap. Fastighetsdelegaten måste definiera operatörsfunktionen getValue och eventuellt setValue-operatören:

klass delegat {operator fun getValue (...) ... ... ...} operator fun setValue (...) ... ... ...}}

Sedan, när du skapar en egendom, kan du förklara att getter- och setterfunktionerna för den här egenskapen hanteras av en annan klass:

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

Dataklasser

Det är inte ovanligt att ett projekt har flera klasser som inte gör annat än att ha information. I Java hittar du dig själv som skriver massor av pannkodskoder för dessa klasser, även om klasserna själva har mycket liten funktionalitet. Vanligtvis måste du definiera en konstruktör, fält för att lagra data, getter och setterfunktioner för varje fält, plus hashCode (), lika () och toString () -funktioner.

I Kotlin, om du inkluderar nyckelordet "data" i din klassdefinition, kommer kompilatorn att utföra allt detta arbete åt dig, inklusive att generera alla nödvändiga brev och inställningar:

dataklass Datum (var månad: String, var dag: Int)

Smarta kast

I Java måste du ofta kontrollera typ och sedan kasta ett objekt i situationer där det redan är klart att objektet kan kastas.

Kotlins smarta casts kan hantera dessa överflödiga casts för dig, så du behöver inte kasta in ett uttalande om du redan har kontrollerat det med Kotlins operatör "är". Exempelvis vet kompilatorn att följande roll är säkert:

if (Hej är String) {printString (Hej)}

Support för konstruktörer

Till skillnad från Java kan en Kotlin-klass ha en primärkonstruktör och en eller flera sekundära konstruktörer, som du skapar genom att inkludera dem i din klassdeklaration:

klass MainActivity-konstruktör (firstName: String) {}

Inget stöd för implicit breddande konverteringar

Kotlin stöder inte implicit breddande konverteringar för nummer, så mindre typer konverteras inte implicit till större typer. Om du vill tilldela ett värde av typen Byte till en Int-variabel i Kotlin, måste du utföra en uttrycklig konvertering, medan Java har stöd för implicita konverteringar.

Annotationsbearbetningsbibliotek med Kotlin

Kotlin stöder alla befintliga Java-ramverk och -bibliotek, inklusive avancerade ramverk som bygger på annoteringsbehandling, även om vissa Java-bibliotek redan tillhandahåller Kotlin-tillägg, till exempel RxKotlin.

Om du vill använda ett Java-bibliotek som förlitar sig på anteckningsbearbetning är det något annorlunda att lägga till det i ditt Kotlin-projekt eftersom du måste ange beroendet med Kotlin-kapt plugin och använd sedan bearbetningsverktyget Kotlin Annotation (kapt) istället för annotationProcessor. Till exempel:

// Använd plugin // applic plugin: kotlin-kapt // Lägg till respektive beroenden med kapt-konfiguration // beroende {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

Utbytbarhet med Java

När du diskuterar om du vill använda Kotlin eller Java för Android-utveckling bör du vara medveten om att det finns ett tredje alternativ: Använd båda. Trots alla skillnader mellan de två språken är Java och Kotlin 100% interoperabla. Du kan ringa Kotlin-kod från Java och du kan ringa Java-kod från Kotlin, så det är möjligt att ha Kotlin- och Java-klasser sida vid sida inom samma projekt, och allt kommer fortfarande att sammanställas.

Denna flexibilitet att flytta mellan de två språken är användbar när du kommer igång med Kotlin eftersom det gör att du kan introducera Kotlin i ett befintligt projekt stegvis, men du kanske också föredrar att använda båda språken permanent. Till exempel kan det finnas vissa funktioner som du föredrar att skriva i Kotlin och vissa funktioner som du tycker är lättare att skriva i Java. Eftersom Kotlin och Java båda kompilerar till bytecode kan dina slutanvändare inte säga var din Java-kod slutar, och Kotlin-koden börjar, så det finns ingen anledning till att du inte kan släppa en app som består av Java och Kotlin-kod.

Om du vill prova Kotlin själv, så finns det några sätt att komma igång så länge du har förhandsvisning av Android Studio 3.0 eller högre:

  • Skapa ett nytt Android Studio-projekt. Den enklaste metoden är att skapa ett nytt projekt och markera kryssrutan "Inkludera Kotlin-support" från guiden för att skapa projekt.

  • Lägg till en Kotlin-klass i en befintlig katalog. Kontrollklicka på katalogen i fråga och välj sedan 'File> New> Kotlin File / Class.' Android Studio visar ett banner som ber dig konfigurera ditt projekt för att stödja Kotlin; Klicka på länken "Konfigurera" och följ instruktionerna på skärmen.

  • Konvertera befintliga Java-filer till Kotlin. Du kan köra vilken Java-fil som helst genom en Kotlin-omvandlare, genom att klicka på filen och välja 'Kod> Konvertera Java-fil till Kotlin-fil.'

Avslutar

Som ni ser finns det många goda skäl att föredra Kotlin framför Java, men det finns ett par områden där Java har överhanden. Kanske mest anmärkningsvärt: många Android-utvecklare är helt enkelt mer bekanta med Java på denna punkt. Troligen kommer Kotlin och Java-debatten inte att lösa någon gång snart, med båda har sina egna meriter. Så kommer du att byta till Kotlin eller känner du att Java fortfarande är det bästa alternativet för Android-utveckling?

Läs nästa: En introduktion till Java-syntax för Android-utveckling

Android 9 Pie-friläppandet är beviet i den ordpråkiga puddingen att Android om operativytem har kommit framåt. Android 9 Pie aknar varken underliggande funktioner eller ytpolka och...

Att veta hur du använder LinkedIn och hitta LinkedIn-jobb kan helt förändra ditt liv. Vi lever i en tid där teknikfärdigheter kapar enorma möjligheter om aldrig tidigare ...

Var Noga Med Att Läsa