Home / Android-Entwicklung / Kotlin vs Java – was ist der Unterschied zwischen den beiden?

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

 Kotlin vs Java

Java ist möglicherweise immer noch die erste Programmiersprache, die Ihnen in den Sinn kommt, wenn Sie an Android denken, aber Sie müssen Java für Android nicht verwenden Entwicklung. Tatsächlich ist Kotlin jetzt Googles bevorzugte Amtssprache für Android!

Um mehr über Java zu erfahren, erhalten Sie einen kostenlosen Einführungskurs in Java bei Make Android Apps.

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

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

In diesem Artikel werden die wichtigsten Unterschiede zwischen Kotlin und Java untersucht.

Kotlin und Java, die späteren Angebote prägnanterer Code – ohne findViewByIds

Wenn Sie eine Kotlin-Klasse mit einer Java-Klasse vergleichen, die die gleiche Arbeit leistet, ist die Kotlin-Klasse im Allgemeinen viel prägnanter, aber es gibt insbesondere einen Bereich, in dem Kotlin die Leistung erheblich reduzieren kann Menge an Code, die Sie für das Boilerplate schreiben müssen: findViewByIds .

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

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

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

Sie können dann auf diese TextView zugreifen, indem Sie nur ihre ID verwenden:

 textView.setText ("Hello World") 

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

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

Kotlin ist standardmäßig null-sicher

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

Lesen Sie auch: Kotiln für Android-Einführung [19659006] In Kotlin sind alle Typen standardmäßig nicht nullfähig (kein Nullwert möglich). Wenn Sie versuchen, Null in Ihrem Kotlin-Code zuzuweisen oder zurückzugeben, schlägt dies beim Kompilieren fehl, sodass keine der folgenden Zeilen kompiliert wird:

 val name: String = null 
 fun getName (): String = null 

Wenn Sie wirklich einer Variablen in Kotlin einen Nullwert zuweisen möchten, müssen Sie diese Variable explizit als nullbar markieren, indem Sie ein Fragezeichen nach dem Typ hinzufügen: [19659014] Val-Nummer: Int? = null

Dies macht es fast unmöglich, in Kotlin auf NullPointerExceptions zu stoßen. Wenn Sie auf diese Ausnahme stoßen, liegt dies wahrscheinlich daran, dass Sie Kotlin explizit aufgefordert haben, eine auszulösen, oder die NullPointerException stammt aus externem Java-Code. [19659008] 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 nicht verfügbar Java, obwohl sie in anderen Programmiersprachen verfügbar sind, die Sie für die Android-Entwicklung verwenden können, z. B. C #.

Read Next: Java-Lernprogramm für Anfänger

Sie erstellen eine Erweiterungsfunktion, indem Sie dem Namen das Präfix voranstellen der Klasse, die Sie erweitern möchten (z. B. 'String'), auf den Namen der Funktion, die Sie erstellen ('styleString'), zum Beispiel:


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

Sie können diese Funktion dann für Instanzen der erweiterten Klasse über den Befehl aufrufen. Notation, als ob sie Teil dieser Klasse wäre:

 myString.styleString () 

Coroutines sind erstklassige Bürger

Wann immer Sie eine Operation mit langer Laufzeit einleiten, z. B. Netzwerk-E / A oder CPU-intensiv funktioniert, 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 nicht mehr, bis der Vorgang abgeschlossen ist.

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

Während Sie in Kotlin zusätzliche Threads erstellen können, Sie können 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 synchron aussieht und daher klarer, prägnanter und besser lesbar ist. Coroutinen sind auch stapellos, haben also im Vergleich zu Threads eine geringere Speichernutzung und öffnen die Tür für zusätzliche asynchrone nicht blockierende Programmierstile wie async / await.

Es gibt keine geprüften Ausnahmen

Kotlin keine geprüften Ausnahmen haben, so dass Sie keine Ausnahmen abfangen oder deklarieren müssen.

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 ist eine Funktion, die die Entwicklergemeinschaft 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 Delegierung

Im Gegensatz zu Java unterstützt Kotlin das Entwurfsmuster "Komposition über Vererbung" über first- Klassendelegation (manchmal als implizite Delegation bezeichnet). Bei der Delegierung delegiert ein empfangendes Objekt Operationen an ein zweites Delegierungsobjekt, das ein Hilfsobjekt im ursprünglichen Kontext ist.

Die Klassendelegierung von Kotlin ist eine Alternative zur Vererbung, die die Verwendung von 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 Eigenschaftsdelegierte muss die Operatorfunktion getValue und optional den Operator setValue definieren:












 class Delegate {
    Betreiber Spaß getValue (...)
...
...
...
    }

    Betreiber 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-Eigenschaft: String von Delegate ()
} 

Datenklassen

Es ist nicht ungewöhnlich, dass in einem Projekt mehrere Klassen 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, Getter- und Setter-Funktionen für jedes Feld sowie hashCode () -, equals () – und toString () -Funktionen definieren.

Wenn Sie in Kotlin die ' Wenn Sie das Schlüsselwort data in Ihrer Klassendefinition eingeben, führt der Compiler die gesamte Arbeit für Sie aus, einschließlich der Generierung aller erforderlichen Get- und Setter:

 data class Date (var month: String, var day: Int) 

Smart casts

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.

Die intelligenten Casts von Kotlin können diese redundanten Casts für Sie verarbeiten Sie müssen eine Anweisung einfügen, wenn Sie sie bereits mit dem 'is'-Operator von Kotlin überprüft haben. Der Compiler weiß beispielsweise, dass die folgende Besetzung sicher ist:


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

Unterstützung für Konstruktoren

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:

 class MainActivity constructor (firstName: String) {
} 

Keine Unterstützung für implizite Erweiterungskonvertierungen

Kotlin unterstützt keine impliziten Erweiterungskonvertierungen für Zahlen, sodass kleinere Typen nicht implizit in größere Typen konvertiert werden. 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.

Bibliotheken für die Anmerkungsverarbeitung mit Kotlin

Kotlin unterstützt Alle vorhandenen Java-Frameworks und -Bibliotheken, einschließlich erweiterter Frameworks, die auf der Verarbeitung von Anmerkungen basieren. Einige Java-Bibliotheken bieten jedoch bereits Kotlin-Erweiterungen an, z. B. RxKotlin.

Wenn Sie eine Java-Bibliothek verwenden möchten, die auf der Verarbeitung von Anmerkungen beruht, fügen Sie diese hinzu Dies unterscheidet sich geringfügig von Ihrem Kotlin-Projekt, da Sie die Abhängigkeit mithilfe des kotlin-kapt -Plugins angeben und dann das Kotlin Annotation Processing Tool (kapt) anstelle von annotationProcessor verwenden müssen. Zum Beispiel:










 // Wende das Plugin an //
Plugin anwenden: 'kotlin-kapt'

// Füge die jeweiligen Abhängigkeiten mit der kapt Konfiguration hinzu //

Abhängigkeiten {
    kapt "com.google.dagger: Dolch-Compiler: $ Dolch-Version"
...
...
...
} 

Austauschbarkeit mit Java

Wenn Sie über die Verwendung von Kotlin oder Java für die Android-Entwicklung diskutieren, sollten Sie sich bewusst sein, dass es eine dritte Option gibt: beide verwenden . 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 alles weiterhin kompiliert werden kann.

Diese beiden Sprachen sind 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. Daher gibt es keinen Grund, warum Sie eine App, die aus Java besteht, nicht veröffentlichen können und Kotlin-Code.

Wenn Sie Kotlin selbst ausprobieren möchten, gibt es einige Möglichkeiten, mit der Installation von Android Studio 3.0 Preview oder höher zu beginnen:

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

  • Fügen Sie eine Kotlin-Klasse zu einem vorhandenen Verzeichnis 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.

 Kotlin vs Java

  • 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.

Zusammenfassung

Wie Sie sehen, gibt es viele gute Gründe, dies zu bevorzugen Kotlin zu Java, aber es gibt 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? Lassen Sie es uns in den Kommentaren wissen!

Weiter lesen: Eine Einführung in die Java-Syntax für die Android-Entwicklung

Sparen Sie 60% bei unserem Einführungskurs für die Android-Entwicklung

Android Authority hat einen Kurs erstellt, der Ihnen beim Lernen hilft wie man Android Apps entwickelt! Keine Programmiererfahrung erforderlich. Starten Sie noch heute Ihre Reise als Android-Entwickler.

Besuchen Sie noch heute die DGiT-Akademie . Geben Sie den Rabattcode ein: SIXTYOFF an der Kasse, um 60% Rabatt zu erhalten.

About AndroidWeltEditor

Check Also

Wie Android-Entwickler Benutzer auf jedem Gerät erreichen können

Gepostet von Allan Livingston, Produktmanagementdirektor, Chrome OS App Ecosystem Android unterstützt mobile Apps auf Geräten, …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.