programming

変数への再代入を避けたいのは何故か

More than 5 years have passed since last update.


記事の想定読者


  • コードレビューで困ったことのある方


    • 感覚的な経験を他人に納得させるための言葉が必要な方




一言で答えると

再代入は参照透過性を壊すため


参照透過性って何さ

以下のような性質のこと


  • 関数は同じ引数に対して常に同じ値を返す

  • 値は最初に定義した値から常に変わらない


参照透過性を確保したい理由


  • 関数やクラスの仕様を一意に定められるため、バグの混入を避けやすい。

  • テストが容易になる。


    • 状態の変化を考慮する必要がないため、パターンの組み合わせ爆発が起きにくい。




まとめ : 再代入を許容すると何が起きるのか

言い換えてみるとわかりやすい


  • hoge = fuga だった値が、いつのまにか hoge = piyo に変更されている状況では


    • 値が変わった場合でも正しく動作するということを再度テストする手間と

    • 値が変わったことを検出する手間と

    • それを見落としてしまうリスクが生じる



  • つまり最初から再代入を避けておくという判断のほうが合理的


補足


  • 実際には、多くの言語ではパフォーマンスとの兼ね合いがあるので一概には判断できない


    • なので現実的には「特殊な理由がない限りは避けておくべき」という表現に落ち着く