Maison  >  Article  >  Java  >  Odeur de code – Alias ​​de collection

Odeur de code – Alias ​​de collection

WBOY
WBOYoriginal
2024-08-30 06:01:02989parcourir

Exposer vos collections couple votre solution

TL;DR : utilisez des collections immuables pour éviter les effets secondaires involontaires.

Problèmes

  • Comportement imprévisible
  • Défis de débogage
  • Corruption des données
  • Violation du principe du moindre étonnement
  • Optimisation prématurée
  • Mutations inattendues
  • Problèmes de concurrence
  • Sécurité des fils compromise
  • Couplage accru

Solutions

  1. Utiliser des collections immuables
  2. Créer des classes immuables
  3. Copier la collection avant modification
  4. Évitez les getters de collecte
  5. Éviter les propriétés automatiques
  6. Favoriser le masquage et l'encapsulation des informations

Contexte

L'alias se produit lorsque deux variables ou plus font référence au même objet.

Cela peut entraîner des effets secondaires inattendus, notamment lorsqu'une variable modifie l'objet partagé.

Vous ne pouvez pas modifier les collections immuables après la création, ce qui vous permet d'éviter les alias accidentels.

Les optimiseurs prématurés diront que copier des collections est une opération coûteuse que vous devriez éviter.

Il s'agit d'un cas particulier d'alias d'objet

Exemple de code

Faux

public class MutableExample {
  public static void main(String[] args) {
    List<Integer> numbers = List.of(1, 2, 3);
    List<Integer> otherNumbers = numbers; // Aliasing
    otherNumbers.add(4);
    System.out.println(numbers); // Output: [1, 2, 3, 4]
  }
}

Droite

public class ImmutableExample {
  public static void main(String[] args) {
    List<Integer> numbers = List.of(1, 2, 3);
    List<Integer> otherNumbers = List.copyOf(numbers); // Creating a copy
    otherNumbers.add(4);
    System.out.println(numbers); // Output: [1, 2, 3]
  }
}

Détection

[X] Semi-automatique

Plusieurs outils d'analyse statique peuvent vous avertir en cas d'abus d'alias.

Balises

  • Immuabilité

Niveau

[x] Intermédiaire

Génération d'IA

Les générateurs de code IA ne créent pas toujours des objets immuables par défaut, en particulier lorsque vous travaillez avec des collections mutables.

Vous pouvez les inviter à donner la priorité aux collections immuables et à envelopper celles existantes pour éviter les alias.

Détection IA

Les outils d'IA peuvent analyser le code pour détecter d'éventuels problèmes d'alias et suggérer d'utiliser des collections immuables à la place.

Conclusion

Vous pouvez éviter les effets secondaires involontaires en utilisant des collections immuables.

Cela rendra votre code plus prévisible et plus facile à raisonner.

Rapports

Plus d'informations

Clause de non-responsabilité

Les odeurs de code sont mon opinion.

Crédits

Photo de Martino Pietropoli sur Unsplash


Si un objet est immuable, il ne peut être que dans un seul état, et vous gagnez gros.

Josué Bloch


Cet article fait partie de la série CodeSmell.

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