49136


参照透過性が満たされることの利点は何ですか？  
具体的には変数が代入できることで生じる具体的なバグが知りたいです。


CC BY-SA 4.0
2018-10-06T07:21:51.460
49016
2018-10-10T09:13:24.660
29865
question
haskell
参照透過性が満たされることの利点は何ですか


変数はなんらかの計算結果を値として参照するために用います．  
これにより計算結果の再利用を実現しているわけですね．  
この参照が透過的であるということは，いつでも変数と参照対象の値を入れ替え可能ということです．  
変数は参照対象を変更することはなく，いつも同じ計算結果を参照するということになります．

これには2つ利点があります．

  * その計算結果を参照する手段が失なわれないことが（変数の有効範囲では）保証される．
  * その変数で参照している値が意図した計算の結果であるかを確認するためには，その変数を初期化しているところ一箇所を確認すればよい．

変数が参照する対象を変更できてしまうと，プログラマはその変更に気を使う必要があります．  
本当にその変数がプログラマが想定している計算結果を指しているかを気にする必要があるということは，  
それを見落して意図していない計算結果を参照してしまう可能性があるということです．  
それがバグになるということです．

あまり具体的ではありませんが，たとえば，ループ変数をループ制御以外の目的でうっかり使用して，  
参照先を変更してしまったことに気づかず，本来のループ制御が意図しない振舞になってしまう，  
ということがありそうです．


CC BY-SA 4.0
2018-10-10T09:13:24.660
49136
2018-10-10T09:13:24.660
24701
49016
answer