J'ai complètement oublié parce que je touchais Kotlin depuis deux mois, mais quand un guerrier (programmeur) aux yeux Java lisait Kotlin pour la première fois, c'était assez ** glissant **. Peu importe à quel point Kotlin a la capacité de travailler avec Java, si vous ne pouvez pas le lire de la manière habituelle, vous avez tendance à penser: "Cela semble difficile! J'aime Java auquel je suis habitué!"
Ici, je vais résumer les ** éléments qui rendent vos yeux glissants lors de la lecture de Java lors de la lecture de Kotlin. Cela peut être utile pour quiconque lit désormais le code de Kotlin.
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 { ... }
C'est le soi-disant style Scala. Swift écrit également de cette façon. Les personnes habituées à C et Java auront du mal à lire à première vue.
Remède: ** Habituez-vous à **
Kotlin
val x = 0 //Ne peut pas être réaffecté
var y = 2 //Réaffectable
x = 1 //Erreur de compilation
y = 3 // OK
val (valeur) ne peut pas être réaffecté, var (variable) peut être réaffecté. C'est la même méthode de déclaration que Scala, mais ce que vous pensez est une différence d'une lettre **. Comme vous pouvez le voir dans le code ci-dessus, il est très difficile de distinguer le code. C'est l'enfer si vous utilisez Vi.
Cependant, le fait est que les valeurs par défaut d'Android Studio (IntelliJ) ** les noms de variables déclarés par var sont toujours soulignés **, il est donc facile de savoir si vous connaissez cette règle. C'est une bonne idée de se rappeler que ceux qui ont besoin d'attention (= var) sont soulignés. Je ne sais pas ce qui se passe avec les autres IDE.
Remède: ** Déterminé par la présence ou l'absence de soulignement **
Je pense que de nombreuses personnes sont allergiques aux variables non typées. Soyez assuré. Les variables qui n'ont pas de type sont également saisies correctement. Étant donné que le compilateur Kotlin a une fonction d'inférence de type, même si la déclaration de type est omise lors de la déclaration d'une variable, la déclaration de type est automatiquement complétée. L'important ici est que c'est le compilateur ** qui complète la déclaration de type **. Cela ne change pas le type créé en fonction de l'état au moment de l'exécution, et vous ne pouvez pas écrire un tel code. De plus, puisque le type ordinaire inférieur renvoie le plus petit type candidat, y n'est pas ajouté avec Int? Or Any dans le code ci-dessus. Si vous dites "La valeur initiale est la valeur réelle, mais nul peut être attribué au fur et à mesure que le processus progresse", déclarez que y est Int?.
Solution: regardez le côté droit de la définition de variable. Le type de l'expression sur le côté droit devient le type de la variable sur le côté gauche tel quel.
Java
SomeClass obj = new SomeClass(10, "aaa", new Date());
Kotlin
val obj = SomeClass(10, "aaa", Date())
Kotlin n'écrit pas de nouveau lors de la création d'une instance. Si vous êtes habitué à Java, vous serez confus car vous pouvez juger si vous utilisez un constructeur ou getInstance () basé sur "la présence ou l'absence de nouveau avant le nom de la classe". Au fur et à mesure que le nombre d'identifiants diminue, le code devient plus simple, donc je sens que la lisibilité elle-même est nulle. De plus, (new Nantoka (...)) n'a pas à être entre parenthèses.
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){
...
}
Le constructeur de Kotlin (plus précisément, le constructeur principal) diffère de java de la manière suivante:
Ces fonctionnalités aident à réduire la quantité de code, mais ceux qui sont familiers avec Java, en particulier ceux qui sont familiers avec la culture «Liste des variables membres au début de la classe», risquent d'être confus.
Solution de contournement: c'est une méthode d'écrivain plutôt qu'une méthode de lecteur, mais c'est une bonne idée de concevoir des sauts de ligne et des retraits afin que vous puissiez lire avec le même sentiment qu'en Java.
Kotlin
class User (
val name: String,
val email: Stirng
) {
...
}
Java
Int result = obj.method1().method2().method3();
Kotlin
val result : Int = obj!!.method1()!!.method2()!!.method3()!!
Le code est assez surprenant car c'est ** l'anti-pattern du traitement nullable au milieu **, donc il y a un problème avec le code. Si cela se produit lorsque vous convertissez automatiquement votre code java en kotlin, réjouissons-nous plutôt, "Je suis content d'avoir trouvé ce code nul-dangereux.
Si je propose d'autres choses, je les mettrai à jour une par une.
Recommended Posts