Zusammenfassung der Punkte, die Java-Programmierer beim ersten Lesen der Kotlin-Quelle als rutschig empfinden

Ich habe es völlig vergessen, weil ich Kotlin in den letzten zwei Monaten berührt hatte, aber als ein Krieger (Programmierer) mit Java-Augen Kotlin zum ersten Mal las, war es ziemlich ** rutschig **. Egal wie großartig Kotlin die Fähigkeit hat, mit Java zu arbeiten, wenn Sie es nicht auf die übliche Weise lesen können, neigen Sie dazu zu denken: "Es sieht schwierig aus! Ich mag Java, an das ich gewöhnt bin!"

Hier fasse ich die ** Elemente zusammen, die Ihre Augen beim Lesen von Java beim Lesen von Kotlin rutschig machen. Es kann für jeden nützlich sein, der von nun an Kotlins Code liest.

Die Variablendeklaration ist Variablenname: Typname

Java


Int x = 0;
SomeClass method1(int i, String s, Date date){ ... }

Kotlin


val x: Int = 0
fun method1(i: Int, s: String, date: Date) : SomeClass { ... }

Es ist der sogenannte Scala-Stil. Swift schreibt auch so. Menschen, die an C und Java gewöhnt sind, werden es auf den ersten Blick schwer haben, zu lesen.

Abhilfe: ** Gewöhne dich an **

In der Variablendeklaration ist es schwierig, zwischen val und var zu unterscheiden

Kotlin


val x = 0 //Kann nicht neu zugewiesen werden
var y = 2 //Neu zuweisbar

x = 1 //Kompilierungsfehler
y = 3 // OK

val (Wert) kann nicht neu zugewiesen werden, var (Variable) kann neu zugewiesen werden. Es ist die gleiche Deklarationsmethode wie bei Scala, aber was Sie denken, ist ein Unterschied von einem Buchstaben. Wie Sie dem obigen Code entnehmen können, ist es sehr schwierig, den Code zu unterscheiden. Es ist die Hölle, wenn Sie Vi verwenden.

Tatsache ist jedoch, dass die Standardeinstellungen von Android Studio (IntelliJ) ** var-deklarierte Variablennamen immer unterstrichen sind **, sodass Sie leicht erkennen können, ob Sie diese Regel kennen. Es ist eine gute Idee, sich daran zu erinnern, dass diejenigen, die Aufmerksamkeit benötigen (= var), unterstrichen sind. Ich weiß nicht, was mit anderen IDEs los ist.

Abhilfe: ** Bestimmt durch das Vorhandensein oder Fehlen einer Unterstreichung **

Der Typ wird nicht in die Variable geschrieben

Ich denke, viele Menschen sind allergisch gegen untypisierte Variablen. Seien Sie versichert. Variablen, die keinen Typ haben, werden ebenfalls ordnungsgemäß eingegeben. Da der Kotlin-Compiler über eine Typinferenzfunktion verfügt, wird die Typdeklaration automatisch ergänzt, auch wenn die Typdeklaration beim Deklarieren einer Variablen weggelassen wird. Wichtig hierbei ist, dass der Compiler ** die ** Typdeklaration ergänzt. Es ändert sich nicht, welcher Typ abhängig vom Status zur Laufzeit erstellt wird, und Sie können solchen Code nicht schreiben. Da der gewöhnliche minderwertige Typ den kleinsten Kandidatentyp zurückgibt, wird y im obigen Code nicht mit Int? Oder Any hinzugefügt. Wenn Sie sagen "Der Anfangswert ist der tatsächliche Wert, aber im Verlauf des Prozesses kann null zugewiesen werden", erklären Sie, dass y Int? Ist.

Problemumgehung: Sehen Sie sich die rechte Seite der Variablendefinition an. Der Typ des Ausdrucks auf der rechten Seite wird so wie er ist zum Typ der Variablen auf der linken Seite.

Schreiben Sie keine neue Instanzdeklaration

Java


SomeClass obj = new SomeClass(10, "aaa", new Date());

Kotlin


val obj = SomeClass(10, "aaa", Date())

Kotlin schreibt beim Erstellen einer Instanz nicht neu. Wenn Sie an Java gewöhnt sind, werden Sie verwirrt sein, da Sie anhand von "Vorhandensein oder Nichtvorhandensein von Neuem vor dem Klassennamen" feststellen können, ob Sie einen Konstruktor oder getInstance () verwenden. Wenn die Anzahl der Bezeichner abnimmt, wird der Code einfacher, sodass ich der Meinung bin, dass die Lesbarkeit selbst Null ist. Auch (neues Nantoka (...)) muss nicht in Klammern stehen.

Die Klassendeklaration dient gleichzeitig als Konstruktordeklaration

Java


class User {
    String name;
    String email;

    public User(String name, String email){
        this.name = name;
        this.email = email;
    }

    ...
}

Kotlin


class User(val name: String, val email: String){
    ...
}

Kotlins Konstruktor (genauer gesagt der primäre Konstruktor) unterscheidet sich von Java in folgenden Punkten:

Diese Funktionen tragen dazu bei, die Codemenge zu reduzieren, aber diejenigen, die mit Java vertraut sind, insbesondere diejenigen, die mit der Kultur "Listenmitgliedsvariablen am Anfang der Klasse" vertraut sind, sind wahrscheinlich verwirrt.

Problemumgehung: Es handelt sich eher um eine Schreibmethode als um eine Lesermethode. Es ist jedoch eine gute Idee, Zeilenumbrüche und Einrückungen zu erstellen, damit Sie mit dem gleichen Gefühl wie in Java lesen können.

Kotlin


class User (
    val name: String,
    val email: Stirng
) {
    ...
}

Ich bin überrascht und meine Augen flackern

Java


Int result = obj.method1().method2().method3();

Kotlin


val result : Int = obj!!.method1()!!.method2()!!.method3()!!

Der Code ist ziemlich überraschend, da er ** das Anti-Muster der nullbaren Verarbeitung in der Mitte ** ist, sodass ein Problem mit dem Code vorliegt. Wenn dies passiert, wenn Sie Ihren Java-Code automatisch in Kotlin konvertieren, freuen wir uns eher: "Ich bin froh, dass ich diesen null-unsicheren Code gefunden habe."


Wenn mir andere Dinge einfallen, werde ich sie einzeln aktualisieren.

Recommended Posts

Zusammenfassung der Punkte, die Java-Programmierer beim ersten Lesen der Kotlin-Quelle als rutschig empfinden
[Java] Beim Schreiben der Quelle ... Memorandum ①
Lernnotiz beim ersten Lernen von Java (persönliches Lernnotiz)
[Android Studio / Java] Was Sie nicht verstehen, wenn Sie es zum ersten Mal berühren
Einführung in Java zum ersten Mal # 2
Zum ersten Mal Java lernen [Einführung]
Was Java-Programmierer mit Kotlin nützlich finden
[Socket-Kommunikation (Java)] Eindrücke von der erstmaligen Implementierung der Socket-Kommunikation in der Praxis
Was ein unerfahrener Mensch jetzt nach einem Monat Selbststudium in der Programmierung zum ersten Mal denkt.
Zum ersten Mal lernen Java # 3 Ausdrücke und Operatoren
Zusammenfassung der Methoden zum Lesen von Dateien für jedes Java-Dateiformat
Wie man Kotlin zum ersten Mal studiert ~ Teil 2 ~
Wie man Kotlin zum ersten Mal studiert ~ Teil 1 ~
Finden Sie mit Kotlin die Anzahl der Tage in einem Monat
Beim Lesen des Quellcodes
Erstmaliges Modellieren von Digimon mit DDD Teil 1
[DL4J] Erstes Java Deep Learning (Handschriftliche Zeichenerkennung über ein vollständig verbundenes neuronales Netzwerk)
Denken Sie daran, wenn Rails (Turbolinks) die Seite nicht zum ersten Mal lädt
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge
Spring Boot zum ersten Mal
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Kotlin-Generika für Java-Entwickler
Spring AOP zum ersten Mal
Was mir bei der Verwendung der Schnittstelle einer Funktion mit Standardargumenten in Kotlin aus Java nicht gefällt
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
[Erstes Java] Machen Sie etwas, das vorerst mit Intellij funktioniert
Die Geschichte der ersten Veröffentlichung der Android-App im Play Store.
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
Erste Programmierung in meinem Leben Java 1st Hello World
Zum ersten Mal Kotlin berühren - Enum Classes
Was ist das beste Lesen von Dateien (Java)
Was sind die aktualisierten Funktionen von Java 13
Finden Sie den Unterschied von einem Vielfachen von 10
Zusammenfassung der guten Punkte und Vorsichtsmaßnahmen bei der Konvertierung der Java Android-Anwendung in Kotlin
Die Geschichte, absichtlich zum ersten Mal in meinem Leben Try Catch zu verwenden
[Förderung des Ruby-Verständnisses (1)] Wenn Sie von Java zu Ruby wechseln, verstehen Sie zuerst den Unterschied.
Was ich versucht habe, als ich alle Felder einer Bohne bekommen wollte
Zusammenfassung der Punkte, über die ich mir bei der Migration von Java nach Kotlin Sorgen gemacht habe
Beispielquellcode zum Ermitteln des minimalen gemeinsamen Vielfachen mehrerer Werte in Java
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
Eine Geschichte, die die Implementierung der SendGrid-Java-Bibliothek bestätigt, wenn die E-Mail-Zustellung fehlschlägt
Eine Geschichte über einen Super-Anfänger, der zum ersten Mal am AtCoder-Wettbewerb teilnimmt (AtCoder-Anfängerwettbewerb 140)
Zusammenfassung der einfachen Funktionen von Bootstrap für Anfänger
Zusammenfassung der Java-Umgebungseinstellungen für mich [mac]
Was den Java-Shop überraschte, als er PHP schrieb
Techniken zum Lesen von Java-Quellcode in Eclipse
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
Stellen Sie die Zeit von LocalDateTime auf eine bestimmte Zeit ein
Wände von der ersten Rspec getroffen
Spüren Sie den Lauf der Zeit auch in Java
Was ist der flüchtige Modifikator für Java-Variablen?
Android Studio-Entwicklung zum ersten Mal (für Anfänger)
Ich habe zum ersten Mal versucht, Docker zu berühren
Eine Sammlung einfacher Fragen für Java-Anfänger
Was ich getan habe, als ich Java zu Kotlin konvertiert habe