Résumé des points que les programmeurs Java trouvent glissants lorsqu'ils lisent la source Kotlin pour la première fois

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.

La déclaration de variable est le nom de la variable: nom du type

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 à **

Il est difficile de distinguer val et var dans la déclaration de variable

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 **

Le type n'est pas écrit dans la variable

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.

Ne pas écrire de nouveau dans la déclaration d'instance

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.

La déclaration de classe sert également de déclaration de constructeur

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

Je suis surpris et mes yeux clignotent

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

Résumé des points que les programmeurs Java trouvent glissants lorsqu'ils lisent la source Kotlin pour la première fois
[Java] Lors de l'écriture du source ... Mémorandum ①
Mémo d'apprentissage lors de l'apprentissage de Java pour la première fois (mémo d'apprentissage personnel)
[Android studio / Java] Ce que vous ne comprenez pas lorsque vous le touchez pour la première fois
Introduction à Java pour la première fois # 2
Apprendre pour la première fois java [Introduction]
Ce que les programmeurs Java trouvent utile avec Kotlin
[Communication Socket (Java)] Impressions de la mise en œuvre de la communication Socket dans la pratique pour la première fois
Ce que je pense maintenant, c'est qu'une personne inexpérimentée étudie la programmation pour la première fois depuis un mois.
Apprentissage pour la première fois des expressions et opérateurs Java # 3
Résumé des méthodes de lecture de fichiers pour chaque format de fichier Java
Comment étudier le kotlin pour la première fois ~ Partie 2 ~
Comment étudier le kotlin pour la première fois ~ Partie 1 ~
Trouvez le nombre de jours dans un mois avec Kotlin
Lors de la lecture du code source
Modéliser Digimon avec DDD pour la première fois Partie 1
[DL4J] Premier apprentissage en profondeur Java (reconnaissance de caractères manuscrits à l'aide d'un réseau neuronal entièrement connecté)
Réfléchissez lorsque Rails (turbolinks) ne charge pas la page pour la première fois
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Spring Boot pour la première fois
[Pour les débutants] Résumé du constructeur java
Génériques Kotlin pour les développeurs Java
Spring AOP pour la première fois
Ce que je n'aime pas lors de l'utilisation de l'interface d'une fonction avec des arguments par défaut dans Kotlin depuis Java
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
[First Java] Créez quelque chose qui fonctionne avec Intellij pour le moment
L'histoire de la sortie de l'application Android sur le Play Store pour la première fois.
Comment savoir quelle version Java d'un fichier de classe a été compilée
Comment trouver le nombre total de pages lors de la pagination en Java
Première programmation de ma vie Java 1st Hello World
Toucher Kotlin pour la première fois-Enum Classes
Quelle est la meilleure lecture de fichier (Java)
Quelles sont les fonctionnalités mises à jour de Java 13
Trouvez la différence à partir d'un multiple de 10
Résumé des bons points et des précautions lors de la conversion de l'application Java Android vers Kotlin
L'histoire de l'utilisation intentionnelle de Try catch pour la première fois de ma vie
[Promotion de la compréhension de Ruby (1)] Lorsque vous passez de Java à Ruby, commencez par comprendre la différence.
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
Résumé des points qui m'inquiétaient lors de la migration de Java vers Kotlin
Exemple de code source pour trouver le multiple commun minimum de plusieurs valeurs en Java
Impressions et doutes sur l'utilisation de Java pour la première fois dans Android Studio
Une histoire confirmant l'implémentation de la bibliothèque Java SendGrid lorsque la livraison du courrier échoue
L'histoire d'un super débutant participant pour la première fois au concours AtCoder (AtCoder Beginner Contest 140)
Résumé des fonctionnalités simples de Bootstrap pour les débutants
Récapitulatif des paramètres de l'environnement Java pour moi-même [mac]
Ce qui a surpris la boutique Java lorsqu'il a écrit PHP
Techniques de lecture du code source Java dans Eclipse
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
Définir l'heure de LocalDateTime à une heure spécifique
Murs touchés par le premier Rspec
Ressentez le passage du temps même à Java
Quel est le modificateur volatile pour les variables Java?
Développement d'Android Studio pour la première fois (pour les débutants)
J'ai essayé de toucher Docker pour la première fois
Une collection de questions simples pour les débutants Java
Ce que j'ai fait lorsque j'ai converti Java en Kotlin