変数を条件付きで宣言するのは悪い規則/設計であることはわかっています。すなわち:
if some_boolean:
x = 1
ここで、x は他の場所では宣言されていません。しかし、後でその条件が満たされた場合にのみ変数を使用する場合、変数を条件付きで宣言するのは悪いことですか?
if some_boolean and some_other_boolean:
x+=1
変数を条件付きで宣言するのは悪い規則/設計であることはわかっています。すなわち:
if some_boolean:
x = 1
ここで、x は他の場所では宣言されていません。しかし、後でその条件が満たされた場合にのみ変数を使用する場合、変数を条件付きで宣言するのは悪いことですか?
if some_boolean and some_other_boolean:
x+=1
将来のメンテナーの一部の不完全で公平な理解に基づいてバグが発生しやすいため、これは疑わしいスタイルです。また、最初に変数を に設定することNone
(より有用な値が既知でない限り) は読みやすさに役立つと思います。これは、1 つの自然な場所にすべての変数をコメント付きで文書化することができるためです (そのようなコメントを全体に広めるのではなく)。見つけにくい場所です;-)。
コードが次のようになっている場合
if some_boolean:
x = 1
# some actions
# not changing some_boolean
# but calculating some_other_boolean
# ...
if some_boolean and some_other_boolean:
x+=1
リファクタリングできますか
def some_actions(some_args,...):
#...
def calculate_some_other_boolean(some_other_args,...):
#...
if some_boolean:
x = 1
some_actions(some_args,...)
if calculate_some_other_boolean(some_other_args,...):
x+=1
else:
some_actions(some_args,...)
?
非常に単純な設計の観点から、false
後で使用されない可能性がある場合でも、ブール値をデフォルトに設定します。そうすれば、問題のブール値は定義されていないか、実際にはブール値である可能性があり、それが使用される場合は適切な値になります。
2 つまたは 3 つのブール値が設定されていてfalse
、それらがまったく使用されない場合、全体像として大きな違いはありません。ただし、数が多い場合は、設計上の問題を示している可能性があります。