Kotlin versus Java - wat is het verschil tussen de twee?

Schrijver: John Stephens
Datum Van Creatie: 24 Januari 2021
Updatedatum: 1 Juli- 2024
Anonim
Kotlin vs Java | Java or Kotlin for Android Development | Kotlin Tutorial | Edureka
Video: Kotlin vs Java | Java or Kotlin for Android Development | Kotlin Tutorial | Edureka

Inhoud


Java is misschien nog steeds de eerste programmeertaal die in je opkomt als je aan Android denkt, maar dat is het niet hebben om Java te gebruiken voor Android-ontwikkeling. In feite is Kotlin nu van Googlegeprefereerdeofficiële taal voor Android!

Voor meer informatie over Java krijgt u een gratis inleidende cursus voor Java bij Make Android Apps.

Tegenwoordig wordt Android Studio geleverd met ingebouwde Kotlin-ondersteuning, dus het maken van een Android-project dat Kotlin-code begrijpt, is net zo eenvoudig als het selecteren van een selectievakje in de wizard voor het maken van projecten van Android Studio. De ondersteuning voor de optie is ook overuren gegroeid, tot het punt dat deze beslissing nu vooral neerkomt op voorkeur.

Maar als u de overstap maakt van Java naar Kotlin, wat wint u dan precies? Welke functies heeft Kotlin, die Java niet, en vice versa?

In dit artikel gaan we kijken naar alle grote verschillen tussen Kotlin en Java.


Kotlin versus Java, de laatste biedt meer beknopte code - zonder findViewByIds

Als je een Kotlin-klasse en een Java-klasse vergelijkt die hetzelfde werk uitvoeren, dan is de Kotlin-klasse over het algemeen veel beknopter, maar er is één gebied in het bijzonder waar Kotlin de hoeveelheid boilerplate-code die je moet schrijven aanzienlijk kan verminderen: findViewByIds.

Met Kotlin Android-extensies kunt u een verwijzing naar een weergave in uw activiteitenbestand importeren. Op dat moment kunt u met die weergave werken alsof deze deel uitmaakt van de activiteit. Het resultaat? U hoeft nooit meer een nieuwe findViewById-methode te schrijven!

Voordat u deze extensies kunt gebruiken, moet u een extra plug-in toevoegen aan uw build.gradle-bestand op moduleniveau (plug-in toepassen: 'kotlin-android-extensions') maar daarna bent u klaar om Views te importeren, voor bijvoorbeeld als uw bestand activity_main.xml een TextView met de ID textView bevatte, zou u het volgende aan uw activiteit toevoegen:


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

U krijgt dan toegang tot deze TextView met alleen zijn ID:

textView.setText ("Hallo wereld")

Dit is veel beknopter dan het Java-equivalent:

TextView text = (TextView) findViewById (R.id.textView); text.setText ("Hallo wereld");

Kotlin is standaard nulveilig

NullPointerExceptions zijn een enorme bron van frustratie voor Java-ontwikkelaars. Met Java kunt u null toewijzen aan elke variabele, maar als u probeert een objectverwijzing met een null-waarde te gebruiken, zet u dan schrap om een ​​NullPointerException tegen te komen!

Lees ook: Kotiln voor Android introductie

In Kotlin zijn alle typen standaard niet nullabel (kan geen nulwaarde bevatten). Als u probeert nul in uw Kotlin-code toe te wijzen of terug te geven, mislukt het tijdens het compileren, dus geen van de volgende regels zal compileren:

val name: String = null

fun getName (): String = null

als jij werkelijk een nulwaarde aan een variabele in Kotlin wilt toewijzen, moet u die variabele expliciet als nullabel markeren door een vraagteken na het type toe te voegen:

val nummer: Int? = null

Dit maakt het bijna onmogelijk om NullPointerExceptions in Kotlin tegen te komen - als je deze uitzondering tegenkomt, is de kans groot dat je Kotlin expliciet hebt gevraagd er een te gooien, of dat de NullPointerException afkomstig is van externe Java-code.

Uitbreiding functies

Kotlin geeft ontwikkelaars de mogelijkheid om een ​​klasse uit te breiden met nieuwe functionaliteit, wat ideaal is als er een klasse is waarvan je altijd dacht dat die een belangrijke methode miste!

Deze ‘uitbreidingsfuncties’ zijn niet beschikbaar in Java, hoewel ze beschikbaar zijn in andere programmeertalen die u kunt gebruiken voor Android-ontwikkeling, zoals C #.

Volgende lezen: Java-tutorial voor beginners

U maakt een uitbreidingsfunctie door de naam van de klasse die u wilt uitbreiden (zoals ‘String’) voor te voegen aan de naam van de functie die u maakt (‘styleString’), bijvoorbeeld:

fun String.styleString (): String {// Style de string en retourneer deze //}

U kunt deze functie vervolgens op instanties van de uitgebreide klasse aanroepen via de. notatie, alsof het deel uitmaakte van die klasse:

myString.styleString ()

Coroutines zijn eersteklas burgers

Wanneer u een langdurige bewerking start, zoals netwerk-I / O of CPU-intensief werk, wordt de aanroepende thread geblokkeerd totdat de bewerking is voltooid. Omdat Android standaard single-threaded is, zal de gebruikersinterface van je app vastlopen zodra je de hoofdthread blokkeert, en deze zal niet reageren totdat de bewerking is voltooid.

In Java is de oplossing van oudsher het creëren van een achtergrondthread waar u dit intensieve of langdurige werk kunt uitvoeren, maar het beheren van meerdere threads kan leiden tot complexe, foutgevoelige code en het maken van een nieuwe thread is een dure operatie.

Hoewel je extra threads kunt maken in Kotlin, kun je ook coroutines gebruiken. Coroutines voeren langdurige en intensieve taken uit door de uitvoering op een bepaald punt te onderbreken zonder de thread te blokkeren en deze functie op een later tijdstip te hervatten, mogelijk op een andere thread. Hiermee kunt u niet-blokkerende asynchrone code maken looks synchroon, en is daarom duidelijker, beknopter en leesbaar voor de mens. Coroutines zijn ook stapelloos, dus ze gebruiken minder geheugen dan threads, en ze openen de deur naar aanvullende stijlen van asynchrone niet-blokkerende programmering, zoals async / await.

Er zijn geen aangevinkte uitzonderingen

Kotlin heeft geen uitzonderingen gecontroleerd, dus u hoeft geen uitzonderingen te vangen of aan te geven.

Of dit iets is dat je naar Kotlin trekt, of ervoor zorgt dat je bij Java wilt blijven, hangt af van je mening over aangevinkte uitzonderingen, omdat dit een functie is die de ontwikkelaarscommunity verdeelt. Als je ziek bent van try / catch-blokken die je Java-code volproppen, dan zul je blij zijn met deze omissie, maar als je vindt dat aangevinkte uitzonderingen je aanmoedigen om na te denken over foutherstel en je uiteindelijk duwen om robuuster te maken code, dan zie je dit eerder als een gebied waar Java een voorsprong heeft op Kotlin.

Eigen ondersteuning voor delegatie

Kotlin ondersteunt, in tegenstelling tot Java, het ontwerppatroon 'Composition over inheritance', via eersteklas delegatie (ook wel impliciete delegatie genoemd). Delegeren is waar een ontvangend object bewerkingen delegeert aan een tweede gedelegeerd object, dat een helperobject is met de oorspronkelijke context.

Kotlins klassendelegatie is een alternatief voor overerving dat het mogelijk maakt om meerdere overerving te gebruiken. Ondertussen helpen de gedelegeerde eigenschappen van Kotlin het dupliceren van code te voorkomen, bijvoorbeeld als u dezelfde code opnieuw moet gebruiken voor getters en setters van meerdere eigenschappen, dan kunt u deze code extraheren in een gedelegeerde eigenschap. De gedelegeerde eigenschap moet de getValue-operatorfunctie definiëren en, optioneel, de setValue-operator:

class Delegate {operator fun getValue (...) ... ... ...} operator fun setValue (...) ... ... ...}}

Wanneer u vervolgens een eigenschap maakt, kunt u verklaren dat de functies getter en setter voor deze specifieke eigenschap door een andere klasse worden afgehandeld:

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

Dataklassen

Het is niet ongebruikelijk dat een project meerdere klassen heeft die niets anders doen dan gegevens bevatten. In Java zul je merken dat je veel boilerplate-code voor deze klassen schrijft, hoewel de klassen zelf weinig functionaliteit hebben. Doorgaans moet u een constructor definiëren, velden om de gegevens, getter- en setter-functies voor elk veld op te slaan, plus hashCode (), is gelijk aan () en toString ().

Als u in Kotlin het trefwoord ‘data’ in uw klassedefinitie opneemt, zal de compiler al dit werk voor u uitvoeren, inclusief het genereren van alle benodigde getters en setters:

gegevensklasse Datum (var month: String, var day: Int)

Slimme casts

In Java moet u vaak het type controleren en vervolgens een object casten in situaties waarin al duidelijk is dat het object kan worden gecast.

De slimme casts van Kotlin kunnen deze overtollige casts voor je verwerken, dus je hoeft geen statement te maken als je dit al hebt gecontroleerd met de operator 'is' van Kotlin. De compiler weet bijvoorbeeld dat de volgende cast veilig is:

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

Ondersteuning voor constructeurs

In tegenstelling tot Java kan een Kotlin-klasse een primaire constructor en een of meer secundaire constructors hebben, die u maakt door deze op te nemen in uw klassendeclaratie:

class MainActivity constructor (firstName: String) {}

Geen ondersteuning voor impliciete verbreding van conversies

Kotlin ondersteunt geen impliciete verbreding van conversies voor getallen, dus kleinere typen worden niet impliciet omgezet in grotere typen. Als u in Kotlin een waarde van het type Byte wilt toewijzen aan een Int-variabele, moet u een expliciete conversie uitvoeren, terwijl Java ondersteuning biedt voor impliciete conversies.

Annotatieverwerkingsbibliotheken met Kotlin

Kotlin ondersteunt alle bestaande Java-frameworks en bibliotheken, inclusief geavanceerde frameworks die afhankelijk zijn van annotatieverwerking, hoewel sommige Java-bibliotheken al Kotlin-extensies bieden, zoals RxKotlin.

Als u een Java-bibliotheek wilt gebruiken die afhankelijk is van annotatieverwerking, is het toevoegen aan uw Kotlin-project iets anders, omdat u de afhankelijkheid moet opgeven met behulp van de Kotlin-Kapt plugin en gebruik vervolgens de Kotlin Annotation processing tool (kapt) in plaats van annotationProcessor. Bijvoorbeeld:

// De plug-in toepassen // plug-in toepassen: kotlin-kapt // Voeg de respectieve afhankelijkheden toe met de kapt-configuratie // afhankelijkheden {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

Uitwisselbaarheid met Java

Bij het debat over het gebruik van Kotlin of Java voor Android-ontwikkeling, moet u zich ervan bewust zijn dat er een derde optie is: gebruik allebei. Ondanks alle verschillen tussen de twee talen, zijn Java en Kotlin 100% interoperabel. Je kunt Kotlin-code van Java aanroepen en je kunt Java-code van Kotlin aanroepen, dus het is mogelijk om Kotlin- en Java-klassen naast elkaar te hebben binnen hetzelfde project, en alles zal nog steeds compileren.

Deze flexibiliteit om te schakelen tussen de twee talen is handig wanneer u aan de slag gaat met Kotlin, omdat u Kotlin stapsgewijs in een bestaand project kunt introduceren, maar u kunt er ook de voorkeur aan geven beide talen permanent te gebruiken. Er zijn bijvoorbeeld bepaalde functies die u liever in Kotlin schrijft en bepaalde functies die u gemakkelijker kunt schrijven in Java. Omdat Kotlin en Java beide compileren naar bytecode, kunnen uw eindgebruikers niet vertellen waar uw Java-code eindigt en de Kotlin-code begint, dus er is geen reden waarom u geen app kunt lanceren die bestaat uit Java en Kotlin-code.

Als je Kotlin zelf wilt proberen, zijn er een paar manieren waarop je aan de slag kunt gaan, als je Android Studio 3.0 Preview of hoger hebt geïnstalleerd:

  • Maak een nieuw Android Studio-project. De eenvoudigste methode is om een ​​nieuw project te maken en het selectievakje ‘Inclusief Kotlin-ondersteuning’ in de wizard voor het maken van projecten in te schakelen.

  • Voeg een Kotlin-klasse toe aan een bestaande map. Houd Control ingedrukt en klik op de map in kwestie en selecteer vervolgens 'Bestand> Nieuw> Kotlin-bestand / klasse'. Android Studio geeft een banner weer waarin u wordt gevraagd uw project te configureren om Kotlin te ondersteunen; klik op de link 'Configureren' en volg de instructies op het scherm.

  • Converteer bestaande Java-bestanden naar Kotlin. U kunt elk Java-bestand uitvoeren via een Kotlin-omzetter, door Control ingedrukt te houden en op het bestand te klikken en ‘Code> Java-bestand naar Kotlin-bestand converteren.

Afsluiten

Zoals u kunt zien, zijn er veel goede redenen om Kotlin te verkiezen boven Java, maar er zijn een aantal gebieden waar Java de overhand heeft. Misschien wel het meest opvallend: veel Android-ontwikkelaars zijn op dit moment gewoon meer vertrouwd met Java. Waarschijnlijk zal het Kotlin-versus-Java-debat niet snel worden opgelost, omdat beide hun eigen verdiensten hebben. Dus, ga je de overstap maken naar Kotlin, of vind je dat Java nog steeds de beste optie is voor Android-ontwikkeling?

Volgende lezen: Een inleiding tot Java-syntaxis voor Android-ontwikkeling

Amazon heeft vandaag tijden zijn hardware-evenement een nieuwe verie van zijn populaire mart home-acceoire onthuld, de Amazon Echo Dot. De nieuwe aflevering in de erie heeft een LED-diplay aan de voor...

Fijne vrijdag, lezer. Op dit punt bent u er michien aan herinnerd hoe lang de week in een verkeerde baan kan zijn. Al je het idee leuk vindt om een Google Data Engineer of zelf een Cloud Architect in ...

Zorg Ervoor Dat Je Eruit Ziet