59
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2012-10-28

##記事の想定読者

  • コードレビューで困ったことのある方
  • 感覚的な経験を他人に納得させるための言葉が必要な方

##一言で答えると
再代入は参照透過性を壊すため

##参照透過性って何さ
以下のような性質のこと

  • 関数は同じ引数に対して常に同じ値を返す
  • 値は最初に定義した値から常に変わらない

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

  • 関数やクラスの仕様を一意に定められるため、バグの混入を避けやすい。
  • テストが容易になる。
  • 状態の変化を考慮する必要がないため、パターンの組み合わせ爆発が起きにくい。

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

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

  • hoge = fuga だった値が、いつのまにか hoge = piyo に変更されている状況では
    • 値が変わった場合でも正しく動作するということを再度テストする手間と
    • 値が変わったことを検出する手間と
    • それを見落としてしまうリスクが生じる
  • つまり最初から再代入を避けておくという判断のほうが合理的

##補足

  • 実際には、多くの言語ではパフォーマンスとの兼ね合いがあるので一概には判断できない
  • なので現実的には「特殊な理由がない限りは避けておくべき」という表現に落ち着く
59
44
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?