Maison > Java > javaDidacticiel > Kotlin pour les développeurs Java (partie 1)

Kotlin pour les développeurs Java (partie 1)

Mary-Kate Olsen
Libérer: 2025-01-27 16:04:17
original
921 Les gens l'ont consulté

Kotlin for Java Developers (Part 1)

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 :

  • Utiliser des classes de données
  • Utiliser une sécurité vide
  • Immuabilité par défaut

Utiliser des classes de données

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ou pour mémoire :

<code class="language-java">public record Person(
    String name,
    int age
) {
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Voie Kotlin :

<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Il existe certaines différences entre les enregistrements Java et les classes de données Kotlin que vous voudrez peut-être connaître.

  • Les enregistrements Java et les classes de données Kotlin sont tous deux des supports de données immuables.
  • En Java, les champs sont implicitement finaux et ne peuvent pas être modifiés après la construction, alors qu'en Kotlin vous pouvez choisir si vous souhaitez rendre le champ mutable en utilisant val ou var.
  • Une autre différence est que les classes d'enregistrement en Java sont implicitement finales et scellées, ce qui signifie qu'elles ne peuvent pas être étendues, alors qu'en Kotlin, vous pouvez étendre les classes de données.
  • Dans Kotlin, vous pouvez également remplacer les méthodes equals, hashCode et toString, ce qui n'est pas possible en Java.
  • Kotlin fournit une méthode de copie prête à l'emploi, qui n'est pas disponible en Java.

Quelques exemples :

Copier des objets en Java

<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Kotlin :

<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ou déclaration de déstructuration en Java :

<code class="language-java">String name = p1.getName();
int age = p1.getAge();</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Kotlin :

<code class="language-kotlin">val (name, age) = p1
println(name) // "John"
println(age) // 42</code>
Copier après la connexion
Copier après la connexion

Référence

  • Classes de données Kotlin
  • Baeldung : classes de données Kotlin

Utiliser une sécurité vide

À 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.

1. Type nullable

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>
Copier après la connexion

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>
Copier après la connexion

2. Appel sécurisé

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion
?. Si l'objet est vide, le résultat du calcul de l'expression entière est nul.

3. Opérateur Elvis (? :)

Elvis Operator ?: C'est l'abréviation de la valeur par défaut si l'expression sur le côté gauche de l'opérateur est vide.

<code class="language-java">public record Person(
    String name,
    int age
) {
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
4. !!

Vous pouvez l'utiliser !! Si la valeur est nul, elle jettera NullPointerException.

<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Astuce: Il n'est pas recommandé d'utiliser cela !!

5. Le vide dans le paramètre de fonction

Lors de la définition de la fonction, vous pouvez spécifier si les paramètres peuvent être vides. Dans ce cas, l'appelant doit le gérer.

6. Conversion de sécurité (comme? Currency)
<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Il y a un opérateur de conversion sûr comme ?, Si la conversion n'est pas possible, retournez null.

7. Sécurité de l'air dans l'expression de lambda
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Vous pouvez également utiliser des fonctions de sécurité aérienne dans l'expression de Lambda et les fonctions élevées:

8. Utilisez la fonction de location
<code class="language-java">String name = p1.getName();
int age = p1.getAge();</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Laissez la fonction est une fonction de domaine qui vous permet d'exécuter des blocs de code sur des objets non-air. Il est généralement utilisé pour exécuter du code sur l'objet vide d'une manière sûre.

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>
Copier après la connexion
Copier après la connexion

Évitez de l'utiliser !!
    Utilisez les appels de sécurité et les opérations Elvis pour gérer en toute sécurité les types vides et fournir des valeurs par défaut
  • Utilisez uniquement le type disponible lorsque nécessaire
  • référence:
Kotlin Air Safety

  • dans les circonstances par défaut, non-mutring
Kotlin encourage fortement les styles de programmation fonctionnelle! Pour les styles de programmation fonctionnelle, les non-variants jouent un rôle vital dans l'évitement des erreurs, en particulier dans les applications multi-thread.

Je peux maintenant écrire un article distinct sur la programmation fonctionnelle à Kotlin ou Java, mais faisons maintenant attention à l'immuabilité.

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:

Les variables Val dans Kotlin sont en fait lues - les valeurs qui ne peuvent pas être modifiées à l'initialisation.

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.
  • Exemple:

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.

<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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Conseils : Kotlin encourage l'utilisation de val au lieu de var autant que possible pour garantir l'immuabilité.

2.Collection immuable

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é.

<code class="language-java">public record Person(
    String name,
    int age
) {
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Si vous devez modifier la collection, vous pouvez utiliser mutableListOf() ou d'autres types de collections mutables.

<code class="language-kotlin">data class Person(val name: String, var age: Int)</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

3. Classe de données immuable

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.

<code class="language-java">Person p2 = new Person(p1.getName(), p1.getAge());</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
<code class="language-kotlin">val p2 = p1.copy(age = 42)</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

4. Immuabilité dans les classes scellées

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">String name = p1.getName();
int age = p1.getAge();</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal