Reek氏によると、クラス変数の作成は「コードの匂い」と見なされます。この背後にある説明は何ですか?
2 に答える
Class Variablesに関するドキュメントにあるように:
クラス変数はグローバルなランタイム状態の一部を形成するため、システムの一部が偶然または不注意でシステムの別の部分に依存することを容易にします。そのため、システムは、ここで何かを変更すると、あちらで何かが壊れるという問題が発生しやすくなります。特に、クラス変数はテストのセットアップを困難にする可能性があります (テストのコンテキストにはすべてのグローバル状態が含まれるため)。
本質的に、これはグローバルな状態の現れであり、ほとんど普遍的に悪と見なされています。これは、テストがより困難になり、クラス/プログラム構造がより脆弱になるためです。
This Stack Overflow questionも読む価値があるかもしれません。これは、クラス変数の主な問題を示しています。クラスから継承してクラス変数を変更するクラスがある場合、その変数のすべてのインスタンスが、親からであっても変更されます! これは当然のことながら、自分の足を簡単に撃つ方法を提供するので、よほど注意しない限り、避けるのが最善かもしれません。
クラス変数とクラス インスタンス変数を比較することも価値があります。この質問には、使用法の違いを示すいくつかの良い例がありますが、本質的にクラス変数はsharedであるのに対し、クラス インスタンス変数はshared ではありません。したがって、望ましくない副作用を避けるために、ほとんどの場合、クラス インスタンス変数が必要です。