状態を持たせすぎると何が起きるのか?壊れやすいコードの正体|Python設計 | SORAXIOM

状態を持たせすぎると何が起きるのか

スポンサーリンク
Python設計・上級思考
スポンサーリンク

なぜか直すのが怖くなるコード

コード自体は難しくないのに、
なぜか触るのが怖い。

Pythonを書いていて、
そんな状態になったことはないでしょうか。

その原因の一つが、
状態を持たせすぎていること です。


状態とは何か

ここでいう「状態」とは、

  • グローバル変数
  • 関数の外で変更される値
  • クラスが抱え込んでいる途中経過

といった、
処理の途中結果がどこかに残っていること を指します。


最初は便利に見える

たとえば、こんなコードです。

total = 0

def add(value):
    global total
    total += value
    return total

使う側からすると、
とても簡単です。

ですが、
この便利さは長くは続きません。


何が問題になるのか

状態が増えてくると、
次のような問題が起きます。

  • いつ値が変わったのか分からない
  • 呼ぶ順番で結果が変わる
  • テストがしにくい

つまり、
コードを読んでも結果を予測できない
状態になります。


状態を減らすと何が変わるか

状態を持たせない形にすると、
コードはこうなります。

def add(total, value):
    return total + value

一見、手間が増えたように見えますが、

  • 入力と出力がはっきりする
  • 途中経過を追いやすい
  • 修正の影響範囲が分かる

という変化があります。


状態は「閉じ込める」もの

状態をゼロにする必要はありません。

大切なのは、

  • 状態をどこに持たせるか
  • 外から見えるか、見えないか

を意識することです。

関数やクラスの中に
閉じ込める ことで、
壊れにくくなります。


作って分かったこと

このテーマを通して分かったのは、

  • 状態は便利だが危険
  • 見えない状態が一番怖い
  • 明示的な引数は安心

ということです。


おわりに

この話は、
状態を持たせすぎたことで
修正が怖くなった経験から、

設計として
どう考えるべきかを整理した記録です。

次は、
「小さなスクリプトを育てる」
という視点から、
設計をもう一段深掘りしていきます。

コメント

タイトルとURLをコピーしました