Kotlin vs Java - was ist der Unterschied zwischen den beiden?

Autor: John Stephens
Erstelldatum: 24 Januar 2021
Aktualisierungsdatum: 1 Juli 2024
Anonim
Groovy vs. Kotlin – Die JVM-Sprachen im Vergleich | Jochen Kraushaar & Matthias Merdes
Video: Groovy vs. Kotlin – Die JVM-Sprachen im Vergleich | Jochen Kraushaar & Matthias Merdes

Inhalt


Java ist vielleicht immer noch die erste Programmiersprache, die Ihnen in den Sinn kommt, wenn Sie an Android denken, aber Sie tun es nicht haben Java für die Android-Entwicklung verwenden. Tatsächlich gehört Kotlin jetzt GooglebevorzugtAmtssprache für Android!

Um mehr über Java zu erfahren, erhalten Sie unter Android Apps erstellen eine kostenlose Einführung in den Java-Kurs.

Heutzutage wird Android Studio mit integrierter Kotlin-Unterstützung ausgeliefert. Das Erstellen eines Android-Projekts, das Kotlin-Code versteht, ist daher so einfach wie das Aktivieren eines Kontrollkästchens im Projekterstellungsassistenten von Android Studio. Die Unterstützung für die Option zu Überstunden hat zugenommen, bis zu dem Punkt, dass diese Entscheidung nun hauptsächlich von den Präferenzen abhängt.

Aber wenn Sie von Java zu Kotlin wechseln, was genau gewinnen Sie? Welche Funktionen hat Kotlin, Java nicht und umgekehrt?


In diesem Artikel werden wir uns mit allen wichtigen Unterschieden zwischen Kotlin und Java befassen.

Kotlin vs Java, letzteres bietet prägnanteren Code - ohne findViewByIds

Wenn Sie eine Kotlin-Klasse mit einer Java-Klasse vergleichen, die die gleiche Arbeit ausführt, ist die Kotlin-Klasse im Allgemeinen sehr viel prägnanter, aber es gibt einen Bereich, in dem Kotlin die Menge des zu schreibenden Kesselplate-Codes erheblich reduzieren kann: findViewByIds.

Mit Kotlin Android Extensions können Sie einen Verweis auf eine Ansicht in Ihre Aktivitätsdatei importieren. An diesem Punkt können Sie mit dieser Ansicht arbeiten, als wäre sie Teil der Aktivität. Das Ergebnis? Sie müssen nie wieder eine findViewById-Methode schreiben!

Bevor Sie diese Erweiterungen verwenden können, müssen Sie ein zusätzliches Plugin zu Ihrer build.gradle-Datei auf Modulebene hinzufügen (Plugin anwenden: 'kotlin-android-extensions'). Danach können Sie jedoch mit dem Importieren von Ansichten beginnen, z Beispiel: Wenn Ihre activity_main.xml-Datei eine TextView mit der ID textView enthält, fügen Sie Ihrer Activity Folgendes hinzu:


importieren Sie kotlinx.android.synthetic.main.activity_main.textView

Sie können dann auf dieses TextView zugreifen, indem Sie nur seine ID verwenden:

textView.setText ("Hallo Welt")

Das ist viel prägnanter als das Java-Äquivalent:

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

Kotlin ist standardmäßig null sicher

NullPointerExceptions sind eine große Quelle der Frustration für Java-Entwickler. In Java können Sie jeder Variablen den Wert null zuweisen. Wenn Sie jedoch versuchen, einen Objektverweis mit dem Wert null zu verwenden, müssen Sie sich auf eine NullPointerException gefasst machen!

Lesen Sie auch: Kotiln für Android Einführung

In Kotlin sind alle Typen standardmäßig nicht nullfähig (kein Nullwert möglich). Wenn Sie versuchen, in Ihrem Kotlin-Code null zuzuweisen oder zurückzugeben, schlägt dies beim Kompilieren fehl, sodass keine der folgenden Zeilen kompiliert wird:

val name: String = null

Spaß getName (): String = null

Wenn du Ja wirklich Wenn Sie einer Variablen in Kotlin einen Nullwert zuweisen möchten, müssen Sie diese Variable explizit als Nullwert markieren, indem Sie nach dem Typ ein Fragezeichen hinzufügen:

val number: Int? = null

Dies macht es fast unmöglich, in Kotlin auf NullPointerExceptions zu stoßen. Wenn Sie tatsächlich auf diese Ausnahme stoßen, liegt dies wahrscheinlich daran, dass Sie Kotlin explizit aufgefordert haben, eine auszulösen, oder dass die NullPointerException aus externem Java-Code stammt.

Erweiterungsfunktionen

Kotlin bietet Entwicklern die Möglichkeit, eine Klasse mit neuen Funktionen zu erweitern. Dies ist ideal, wenn in einer Klasse, die Sie immer für vermisst hielten, eine wichtige Methode vorhanden ist!

Diese "Erweiterungsfunktionen" sind in Java nicht verfügbar, obwohl sie in anderen Programmiersprachen verfügbar sind, die Sie für die Android-Entwicklung verwenden können, z. B. C #.

Lesen Sie weiter: Java-Tutorial für Anfänger

Sie erstellen eine Erweiterungsfunktion, indem Sie dem Namen der zu erweiternden Klasse (z. B. "String") den Namen der zu erstellenden Funktion ("styleString") voranstellen. Beispiel:

fun String.styleString (): String {// Den String formatieren und dann zurückgeben //}

Diese Funktion können Sie dann bei Instanzen der erweiterten Klasse über die aufrufen. Notation, als ob sie Teil dieser Klasse wäre:

myString.styleString ()

Coroutinen sind erstklassige Bürger

Immer wenn Sie einen Vorgang mit langer Laufzeit einleiten, z. B. Netzwerk-E / A oder CPU-intensive Arbeit, wird der aufrufende Thread blockiert, bis der Vorgang abgeschlossen ist. Da Android standardmäßig Single-Thread-fähig ist, friert die Benutzeroberfläche Ihrer App ein, sobald Sie den Hauptthread blockieren. Sie reagiert erst, wenn der Vorgang abgeschlossen ist.

In Java bestand die Lösung traditionell darin, einen Hintergrund-Thread zu erstellen, in dem Sie diese intensive oder langwierige Arbeit ausführen können. Das Verwalten mehrerer Threads kann jedoch zu komplexem, fehleranfälligem Code führen, und das Erstellen eines neuen Threads ist ein teurer Vorgang.

Während Sie in Kotlin zusätzliche Threads erstellen können, können Sie auch Coroutinen verwenden. Coroutines führen lang andauernde und intensive Aufgaben aus, indem sie die Ausführung an einem bestimmten Punkt unterbrechen, ohne den Thread zu blockieren, und diese Funktion zu einem späteren Zeitpunkt wieder aufnehmen, möglicherweise auf einem anderen Thread. Auf diese Weise können Sie nicht blockierenden asynchronen Code erstellen, der sieht aus synchron und daher klarer, prägnanter und für den Menschen lesbarer. Coroutinen sind auch stapellos, sodass sie im Vergleich zu Threads eine geringere Speichernutzung aufweisen und die Tür für zusätzliche asynchrone, nicht blockierende Programmierstile wie z. B. async / await öffnen.

Es gibt keine geprüften Ausnahmen

Kotlin hat keine Ausnahmen überprüft, daher müssen Sie keine Ausnahmen abfangen oder deklarieren.

Ob dies Sie zu Kotlin zieht oder Sie dazu bringt, sich an Java zu halten, hängt von Ihrer Meinung zu geprüften Ausnahmen ab, da dies eine Funktion ist, die die Entwicklergemeinschaft voneinander trennt. Wenn Sie es satt haben, dass Ihr Java-Code mit Try / Catch-Blöcken überfüllt ist, werden Sie mit dieser Auslassung zufrieden sein. Wenn Sie jedoch feststellen, dass geprüfte Ausnahmen Sie dazu anregen, über eine Fehlerbehebung nachzudenken und Sie letztendlich dazu zu drängen, robuster zu werden Code, dann sehen Sie dies eher als einen Bereich, in dem Java den Vorteil gegenüber Kotlin hat.

Native Unterstützung für die Delegation

Im Gegensatz zu Java unterstützt Kotlin das Entwurfsmuster "Komposition über Vererbung" über erstklassige Delegierung (manchmal als implizite Delegierung bezeichnet). Bei der Delegierung delegiert ein empfangendes Objekt Vorgänge an ein zweites Delegierungsobjekt, das ein Hilfsobjekt mit dem ursprünglichen Kontext ist.

Die Klassendelegation von Kotlin ist eine Alternative zur Vererbung, die die Verwendung der Mehrfachvererbung ermöglicht. In der Zwischenzeit verhindern die delegierten Eigenschaften von Kotlin das Duplizieren von Code. Wenn Sie beispielsweise denselben Code für mehrere Getter und Setter von Eigenschaften wiederverwenden müssen, können Sie diesen Code in eine delegierte Eigenschaft extrahieren. Der Eigenschaftendelegierte muss die Operatorfunktion getValue und optional den Operator setValue definieren:

class Delegate {Operator Spaß getValue (...) ... ...} Operator Spaß setValue (...) ... ...}}

Wenn Sie dann eine Eigenschaft erstellen, können Sie deklarieren, dass die Get- und Setter-Funktionen für diese bestimmte Eigenschaft von einer anderen Klasse verarbeitet werden:

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

Datenklassen

Es ist nicht ungewöhnlich, dass ein Projekt mehrere Klassen hat, die nur Daten enthalten. In Java werden Sie feststellen, dass Sie eine Menge Code für diese Klassen schreiben, obwohl die Klassen selbst nur sehr wenige Funktionen haben. In der Regel müssen Sie einen Konstruktor, Felder zum Speichern der Daten, Get- und Setter-Funktionen für jedes Feld sowie die Funktionen hashCode (), equals () und toString () definieren.

Wenn Sie in Kotlin das Schlüsselwort "data" in Ihre Klassendefinition aufnehmen, führt der Compiler diese gesamte Arbeit für Sie aus, einschließlich der Generierung aller erforderlichen Getter und Setter:

Datenklasse Datum (var Monat: String, var Tag: Int)

Intelligente Besetzungen

In Java müssen Sie häufig den Typ überprüfen und dann ein Objekt in Situationen umwandeln, in denen bereits klar ist, dass das Objekt umgewandelt werden kann.

Kotlins Smart Casts können diese redundanten Casts für Sie verarbeiten, sodass Sie keine Anweisung einfügen müssen, wenn Sie sie bereits mit dem Operator "is" von Kotlin überprüft haben. Beispielsweise weiß der Compiler, dass die folgende Besetzung sicher ist:

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

Unterstützung für Konstrukteure

Im Gegensatz zu Java kann eine Kotlin-Klasse einen primären Konstruktor und einen oder mehrere sekundäre Konstruktoren haben, die Sie erstellen, indem Sie sie in Ihre Klassendeklaration aufnehmen:

Klasse MainActivity-Konstruktor (firstName: String) {}

Keine Unterstützung für implizit erweiterte Conversions

Kotlin unterstützt keine implizit erweiterten Konvertierungen für Zahlen. Daher werden kleinere Typen nicht implizit in größere Typen konvertiert. Wenn Sie in Kotlin einer Int-Variablen einen Wert vom Typ Byte zuweisen möchten, müssen Sie eine explizite Konvertierung durchführen, während Java implizite Konvertierungen unterstützt.

Anmerkungsverarbeitungsbibliotheken mit Kotlin

Kotlin unterstützt alle vorhandenen Java-Frameworks und -Bibliotheken, einschließlich erweiterter Frameworks, die auf der Verarbeitung von Anmerkungen basieren, obwohl einige Java-Bibliotheken bereits Kotlin-Erweiterungen wie RxKotlin bereitstellen.

Wenn Sie eine Java-Bibliothek verwenden möchten, die sich auf die Verarbeitung von Anmerkungen stützt, unterscheidet sich das Hinzufügen zu Ihrem Kotlin-Projekt geringfügig, da Sie die Abhängigkeit mithilfe von angeben müssen kotlin-kapt Plugin, und verwenden Sie dann das Kotlin Annotation Processing Tool (KAPT) anstelle von AnnotationProcessor. Beispielsweise:

// Wende das Plugin an // Wende das Plugin an: kotlin-kapt // Füge die entsprechenden Abhängigkeiten mit der kapt-Konfiguration hinzu // dependencies {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

Austauschbarkeit mit Java

Wenn Sie überlegen, ob Sie Kotlin oder Java für die Android-Entwicklung verwenden möchten, sollten Sie sich bewusst sein, dass es eine dritte Option gibt: verwende beide. Trotz aller Unterschiede zwischen den beiden Sprachen sind Java und Kotlin zu 100% interoperabel. Sie können Kotlin-Code von Java aus aufrufen und Sie können Java-Code von Kotlin aus aufrufen, sodass Kotlin- und Java-Klassen im selben Projekt nebeneinander sein können und weiterhin alles kompiliert wird.

Diese Flexibilität beim Wechseln zwischen den beiden Sprachen ist hilfreich, wenn Sie mit Kotlin beginnen, da Sie Kotlin schrittweise in ein vorhandenes Projekt einführen können. Sie können jedoch auch beide Sprachen dauerhaft verwenden. Beispielsweise gibt es möglicherweise bestimmte Funktionen, die Sie in Kotlin schreiben möchten, und bestimmte Funktionen, die Sie in Java leichter schreiben können. Da Kotlin und Java beide zu Bytecode kompiliert werden, können Ihre Endbenutzer nicht erkennen, wo Ihr Java-Code endet, und der Kotlin-Code beginnt. Es gibt also keinen Grund, warum Sie keine Java-App veröffentlichen können und Kotlin-Code.

Wenn Sie Kotlin selbst ausprobieren möchten, gibt es einige Möglichkeiten, wie Sie beginnen können, solange Sie Android Studio 3.0 Preview oder höher installiert haben:

  • Erstellen Sie ein neues Android Studio-Projekt. Die einfachste Methode besteht darin, ein neues Projekt zu erstellen und das Kontrollkästchen "Kotlin-Unterstützung einbeziehen" im Assistenten zur Projekterstellung zu aktivieren.

  • Fügen Sie einem vorhandenen Verzeichnis eine Kotlin-Klasse hinzu. Klicken Sie bei gedrückter Ctrl-Taste auf das betreffende Verzeichnis und wählen Sie "Datei> Neu> Kotlin-Datei / -Klasse". Android Studio zeigt ein Banner an, in dem Sie aufgefordert werden, Ihr Projekt für die Unterstützung von Kotlin zu konfigurieren. Klicken Sie auf den Link "Konfigurieren" und befolgen Sie die Anweisungen auf dem Bildschirm.

  • Konvertieren Sie vorhandene Java-Dateien nach Kotlin. Sie können jede Java-Datei über einen Kotlin-Konverter ausführen, indem Sie bei gedrückter Ctrl-Taste auf die Datei klicken und "Code> Java-Datei in Kotlin-Datei konvertieren" auswählen.

Einpacken

Wie Sie sehen, gibt es viele gute Gründe, Kotlin Java vorzuziehen. Es gibt jedoch einige Bereiche, in denen Java die Oberhand hat. Vielleicht am bemerkenswertesten: Viele Android-Entwickler sind an dieser Stelle einfach besser mit Java vertraut. Wahrscheinlich wird die Debatte zwischen Kotlin und Java nicht so schnell beigelegt, da beide ihre eigenen Vorzüge haben. Wirst du also auf Kotlin umsteigen oder glaubst du, dass Java immer noch die beste Option für die Android-Entwicklung ist?

Lesen Sie weiter: Eine Einführung in die Java-Syntax für die Android-Entwicklung

Egal, ob e ich um einen Comic-Klaiker, einen kurrilen Indie-Film oder eine chreiende Komödie handelt, jeder liebt einen Wohlfühlfilm, aber manchmal it e einfach nicht da, wa ie wollen. Manch...

Möglicherweie tritt bei Ihrem amung Galaxy 10-martphone ein Problem auf, da ie verlangamt oder ogar einfriert. E it möglich, da eine App Kult it. Um jedoch fetzutellen, ob e ich um eine Drit...

Verwaltung Auswählen