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.
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 **
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 **
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.
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.
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
) {
...
}
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