JavaRush /Java-Blog /Random-DE /Gibt es einen Unterschied zwischen Kotlin und Java?
Paul Soia
Level 26
Kiyv

Gibt es einen Unterschied zwischen Kotlin und Java?

Veröffentlicht in der Gruppe Random-DE
Hallo zusammen. Ich möchte Ihnen ein paar grundlegende Dinge über die Kotlin-Sprache erzählen, die für Anfänger nützlich sein werden. Es ist einfach so, dass es jetzt schwierig sein wird, mit nur einer Sprache in die Android-Entwicklung einzusteigen – die meisten neuen Projekte werden in Kotlin geschrieben, die meisten vorgefertigten Projekte werden in Java geschrieben. Gibt es einen Unterschied zwischen Kotlin und Java?  - 1Im Moment arbeite ich an vier Projekten: zwei in Kotlin und zwei in Java (ein großes Hauptprojekt und drei kleine für den internen Gebrauch). Als das Unternehmen beschloss, neue Projekte in Kotlin zu schreiben, kam mir diese Entscheidung seltsam vor. Warum verschiedene Sprachen mischen? Lassen Sie jemand anderen in Kotlin schreiben, warum brauchen wir es? Aber es gab keinen Ausweg, also beschloss ich, eine neue Sprache auszuprobieren und begann, sie zu lernen. Der erste Code war natürlich vollständig im Java-Stil geschrieben, was das Missverständnis noch verstärkte: Warum brauche ich eine neue Sprache? Aber als ich es benutzte, entdeckte ich immer mehr Vorteile und jetzt (ich schreibe seit fast 2 Jahren in Kotlin) kann ich sagen, dass Kotlin in der Android-Entwicklung praktischer ist. Ich möchte einige Nuancen zeigen, die für jemanden, der sich entschieden hat, nach Java mit dem Erlernen von Kotlin zu beginnen, nicht offensichtlich sind. Ich möchte Sie auch daran erinnern, dass Android Java 8 verwendet, wobei die aktuelle Version 14 ist. Also zuerst – Variablen : Java:
Int a = 1;
String s = "test";
Kotlin:
val a = 1
var b = 2
val c: Int
val d = "test"
In Kotlin gibt es zwei Arten von Variablen: val (schreibgeschützt) und var (schreibgeschützt). Es wird empfohlen, nach Möglichkeit val zu verwenden. Es ist nicht erforderlich, den Typ einer Variablen zu deklarieren, wenn die Variable bereits initialisiert wurde. Zweitens – if/else, switch-Anweisungen : Wie oft verwenden Sie diese Anweisungskette in Java:
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
Oder so:
switch(выражениеДляВыбора) {
        case (Bedeutung 1):
                Код1;
                break;
        case (Bedeutung 2):
                Код2;
                break;
...
        case (Bedeutung N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
In Kotlin wird für solche Ausdrücke der Operator when verwendet (obwohl auch if/else verwendet werden kann):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
Hier sind wir nicht nur die Bedingungskette durchgegangen, sondern haben auch gleich den gesamten Ausdruck der Ergebnisvariablen zugewiesen, was uns einige Zeilen Code erspart hat. Wenn Sie jedoch nur zwei Optionen in einem Zweig haben, empfehle ich die Verwendung des üblichen if..else. Die Bauzeit wird nur bei drei Optionen kürzer sein. Machen wir weiter – Konstrukteure . Es ist ein Märchen hier. Vergleichen Sie einfach den Code in Java und Kotlin. Java:
public class Person {

    private String firstName;
    private String lastName;
    private int age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Kotlin:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Es mag den Anschein haben, dass im Kotlin-Code etwas unvollendet geblieben ist. Aber nein, das sind zwei identische Codes in verschiedenen Sprachen. Lass es uns ein wenig herausfinden. In Kotlin kann der Konstruktor direkt in den Hauptteil des Klassennamens geschrieben werden (wenn Sie möchten, können Sie dies jedoch auch auf altmodische Weise tun, wie in Java). Wir haben also drei Variablen geschrieben, in Java einen Konstruktor, Getter und einen Setter für die Altersvariable erstellt. Wie wir uns erinnern, ist in Kotlin die Variable val schreibgeschützt und daher ist der Setter für diese Variablen nicht verfügbar (Kotlin implementiert Getter-Setter unter der Haube). Mit der Variable var können Sie einen Setter verwenden. Infolgedessen haben wir fast in einer Zeile dasselbe geschrieben, was in Java mehr als ein Dutzend Zeilen erforderte. Hier empfehle ich, mehr über Datenklassen in Kotlin zu lesen. Aber das ist nicht alles, was Kotlin-Konstrukteure gut können. Aber was ist, wenn Sie zwei Konstruktoren benötigen? Was ist, wenn es drei sind? In Java würde es so aussehen:
public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

public Person(String firstName) {
        this.firstName = firstName;
    }
Nichts Kompliziertes, nur so viele Designer wie nötig, das haben sie getan. In Kotlin kommt man mit nur einem Konstruktor aus. Wie? Es ist ganz einfach: Standardwerte.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
Wir haben im Konstruktor Standardwerte zugewiesen und der Aufruf sieht jetzt so aus:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
Es kann sich die Frage stellen: Was ist das:
private val lastName: String? = null
Was sind diese anderen Fragezeichen? Ja, wenn der Wert null sein kann, wird er gesetzt ?. Es gibt auch eine Option wie diese – !!(wenn die Variable keinen Nullwert akzeptieren kann). Lesen Sie selbst, es ist alles einfach. Und wir kommen zum nächsten Punkt. Erweiterungen . Dies ist ein sehr cooles Tool in Kotlin, das in Java nicht verfügbar ist. Manchmal verwenden wir in einem Projekt Vorlagenmethoden, die in vielen Klassen wiederholt werden. Zum Beispiel so:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
In Kotlin können wir eine Klasse erweitern:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Und dann verwenden Sie es im gesamten Projekt so:
context?.toast("hello world")
Wir haben eine Erweiterung für die Context-Klasse erstellt. Und jetzt ist überall dort, wo der Kontext verfügbar ist, die neue Toastmethode verfügbar. Dies kann für jede Klasse durchgeführt werden: String, Fragment, Ihre benutzerdefinierten Klassen, es gibt keine Einschränkungen. Und der letzte Punkt, den wir betrachten werden, ist das Arbeiten mit Strings . Hier ist alles einfach. In Java wird es so geschrieben:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
In Kotlin ist es einfacher:
val s = "friends"
val a = 5
println("I have $a $s!")
Dies sind die Nuancen, auf die ich zu Beginn des Erlernens von Kotlin gestoßen bin. Ich hoffe, das wird Ihnen helfen.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION