Java domine parmi les langages de programmation, je vois donc souvent des développeurs Java faire la même erreur en utilisant Kotlin. Ne vous méprenez pas, cela ne veut pas dire que ce sont des bugs, mais que les développeurs ont tendance à développer des « odeurs de code » dans Kotlin lorsqu'ils sont habitués à développer en Java et à ne pas profiter des capacités de Kotlin.
Cet article vous donnera une idée des odeurs de code que je vois souvent et comment les implémenter idéalement à la « manière Kotlin ».
La première partie de cette série couvrira :
Ce sujet pourrait bientôt disparaître car de plus en plus de mes développeurs Java ont également de l'expérience dans l'utilisation de classes d'enregistrement. Il existe néanmoins quelques différences entre les enregistrements Java et les classes de données Kotlin.
Méthode Java :
<code class="language-java">public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getters, setters, ... }</code>
Ou pour mémoire :
<code class="language-java">public record Person( String name, int age ) { }</code>
Voie Kotlin :
<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
Il existe certaines différences entre les enregistrements Java et les classes de données Kotlin que vous voudrez peut-être connaître.
Quelques exemples :
Copier des objets en Java
<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
Kotlin :
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
Ou déclaration de déstructuration en Java :
<code class="language-java">String name = p1.getName(); int age = p1.getAge();</code>
Kotlin :
<code class="language-kotlin">val (name, age) = p1 println(name) // "John" println(age) // 42</code>
À mon avis, la sécurité nulle dans Kotlin est l'une des fonctionnalités les plus puissantes. Il s'agit d'une fonctionnalité révolutionnaire qui vous fera gagner beaucoup de temps et de tracas. Dans Kotlin, la sécurité nulle est intégrée au système de types, ce qui permet d'éviter plus facilement les erreurs d'exécution liées à null.
Dans Kotlin, les types nullables sont explicitement déclarés. Cela signifie que vous pouvez avoir une variable pouvant contenir une valeur nulle, mais vous devez la spécifier explicitement dans la déclaration.
Types non nullables (comportement par défaut)
Par défaut, tous les types dans Kotlin ne sont pas nullables, ce qui signifie que les variables ne peuvent pas contenir de valeurs nulles.
<code class="language-kotlin">val name: String = "John" // 不可空 name = null // 编译错误!</code>
Type nullable
Pour déclarer une variable pouvant contenir une valeur nulle, vous devez utiliser l'opérateur ?
<code class="language-kotlin">val name: String? = null // 可空</code>
Une fonctionnalité puissante est l'opérateur d'appel sécurisé ?. Il vous permet d'appeler des méthodes ou d'accéder à des propriétés en toute sécurité sans lancer NullPointerException.
Exemple
<code class="language-java">public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // Getters, setters, ... }</code>
3. Opérateur Elvis (? :)
<code class="language-java">public record Person( String name, int age ) { }</code>
<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
5. Le vide dans le paramètre de fonction
6. Conversion de sécurité (comme? Currency)
<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
7. Sécurité de l'air dans l'expression de lambda
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
8. Utilisez la fonction de location
<code class="language-java">String name = p1.getName(); int age = p1.getAge();</code>
Exemple et la valeur par défaut:
9. Best Practice
<code class="language-kotlin">val (name, age) = p1 println(name) // "John" println(age) // 42</code>
Kotlin préfère essentiellement des objets insatisfaisants plutôt que des objets variables. Cela rend le code plus simple et prévisible, en particulier dans l'environnement simultané.
1. Variable inattendue (Val)
Dans Kotlin, les variables déclarées à l'aide de mots clés VAL par défaut sont immuables. Ceci est très proche des variables finales déclarées en Java, mais il y a quelques différences clés:
Cependant, si la valeur est un objet, elle peut toujours modifier les attributs de l'objet, sauf si l'attribut lui-même déclare la valeur elle-même.
La différence entre Java: dans Java, nous utilisons les mots clés finaux pour nous assurer que la variable ne peut pas être remboursée, mais les objets qui peuvent toujours être variables. La principale différence dans Kotlin est qu'elle est étendue aux variables par défaut par défaut, ce qui encourage la conception de solutions plus prédictives et plus sûres pour l'ensemble de l'application. Exemple de variable : L'utilisation du mot-clé var dans Kotlin vous permet de réaffecter une variable. Conseils :
Kotlin encourage l'utilisation de val au lieu de var autant que possible pour garantir l'immuabilité. Les collections immuables sont également encouragées par défaut. Les collections immuables empêchent toute modification après la création, par exemple, si vous créez une liste à l'aide de listOf(), vous ne pouvez pas la modifier, aucun élément ne peut être ajouté, supprimé ou modifié. Si vous devez modifier la collection, vous pouvez utiliser mutableListOf() ou d'autres types de collections mutables. Différence avec Java : en Java, les collections (telles que ArrayList) sont mutables par défaut, ce qui signifie que les éléments peuvent être modifiés librement. Les classes de données de Kotlin sont immuables par défaut. Lors de la définition d'une classe de données, les propriétés sont généralement déclarées comme val, ce qui rend la classe immuable. Cela rend les classes idéales pour les objets de valeur, en particulier lorsqu'il s'agit d'API, d'enregistrements de base de données ou de tout autre scénario dans lequel l'état de l'objet ne doit pas changer après sa création. Les classes scellées de Kotlin peuvent également être immuables et fonctionnent bien avec le modèle de données immuable. Les classes scellées sont souvent utilisées pour représenter des hiérarchies de classes restreintes, telles que l'état ou les réponses, et leur immuabilité garantit que l'état ou les résultats ne peuvent pas changer de manière inattendue. <code class="language-java">public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters, setters, ...
}</code>
2.Collection immuable
<code class="language-java">public record Person(
String name,
int age
) {
}</code>
<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
3. Classe de données immuable
<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
4. Immuabilité dans les classes scellées
<code class="language-java">String name = p1.getName();
int age = p1.getAge();</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!