ホームページ  >  記事  >  Java  >  コードの匂い - コレクションのエイリアシング

コードの匂い - コレクションのエイリアシング

WBOY
WBOYオリジナル
2024-08-30 06:01:021026ブラウズ

コレクションを公開すると、ソリューションが結合されます

TL;DR: 意図しない副作用を防ぐために不変コレクションを使用します。

問題点

  • 予測できない動作
  • デバッグの課題
  • データ破損
  • 最小の驚きの原則の違反
  • 時期尚早な最適化
  • 予期せぬ突然変異
  • 同時実行の問題
  • スレッドの安全性が侵害されました
  • カップリングの増加

ソリューション

  1. 不変コレクションを使用する
  2. 不変クラスを作成する
  3. 変更前にコレクションをコピーします
  4. コレクションゲッターを避ける
  5. 自動プロパティを避ける
  6. 情報の隠蔽とカプセル化を優先します

コンテクスト

エイリアシングは、2 つ以上の変数が同じオブジェクトを参照する場合に発生します。

これは、特に 1 つの変数が共有オブジェクトを変更する場合に、予期しない副作用を引き起こす可能性があります。

不変コレクションは、作成後に変更することはできないため、誤ってエイリアスが作成されることを防ぐことができます。

時期尚早なオプティマイザーは、コレクションのコピーはコストのかかる操作であり、避けるべきであると主張するでしょう。

これはオブジェクト エイリアシングの特殊なケースです

サンプルコード

間違っている

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]
  }
}

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]
  }
}

検出

[X] 半自動

いくつかの静的解析ツールは、エイリアシングの乱用について警告することがあります。

タグ

  • 不変性

レベル

[x] 中級

AIの生成

AI コード ジェネレーターは、特に可変コレクションを操作する場合、デフォルトで常に不変オブジェクトを作成するとは限りません。

不変のコレクションを優先し、エイリアスを避けるために既存のコレクションをラップするように促すことができます。

AI検出

AI ツールは、潜在的なエイリアシングの問題についてコードを分析し、代わりに不変コレクションの使用を提案できます。

結論

不変コレクションを使用すると、意図しない副作用を回避できます。

これにより、コードがより予測可能になり、推論が容易になります。

関係

詳細情報

免責事項

コードの匂いは私の意見です。

クレジット

Unsplash の Martino Pietropoli による写真


オブジェクトが不変の場合、その状態は 1 つだけになり、大きな利益を得ることができます。

ジョシュア・ブロック


この記事は CodeSmell シリーズの一部です。

以上がコードの匂い - コレクションのエイリアシングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。