2006年09月15日

副作用

  
どうも、プログラミングの世界では、「副作用」という言葉は、本来の意味とは異なる意味で使われているらしい。
大辞林には、
治療・予防・診断などのために用いた医薬品の本来の効果と異なる作用。人体に有害な作用であることが多い。副反応。
と載っている。

つまり、本来の効果とは異なる作用が、副作用なわけだ。
しかし、
filestream.Write("hogehoge");
は、ファイルに書き出す目的のメソッドだけれど、ファイルIOが伴うので、副作用があるメソッドらしい。

また、ある人によれば、
public void SetMoge(string moge) {
this.moge = moge;
}
も、状態が変更されるので、これも副作用のあるメソッドなんだそうだ。
でも、これって、上記Writeメソッドも含め、本来の効果のはず。
これを副作用というとなると、副作用のないメソッドなんて、状態取得メソッドと純粋な計算メソッド以外なくなってしまう。

プログラマが使う用語はほんとわけわからん。
って、僕もプログラマなんだけど....


この記事へのコメント
副作用のあるメソッドがないクラス=不変クラス(Stringとか)
という意味で使いそうな気がします。

でも本来の意味をプログラマ用語に当てはめるなら「ハイゼンバグ」
がしっくりきますね。
Posted by murasuke at 2006年09月18日 02:50
「不変クラス → 副作用のあるメソッドがない」
という式は成り立つと思います。でも、その逆は、人によって解釈がことなるようですね。

ハイゼンバグってのは、そのバグを観察しようとすると、見えなくなってしまうバグのことですか?
だとすると、これも、一般的な用語としての副作用とは違うような。
言葉って難しいですね。
Posted by Gushwell at 2006年09月19日 10:00
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50588384