副作用 (プログラム)
プログラミングにおいて、式の評価による作用には、主たる作用とそれ以外の副作用(side effect)とがある。 式は、評価値を得ること(※関数では「引数を受け取り値を返す」と表現する)が主たる作用とされ、それ以外のコンピュータの論理的状態(ローカル環境以外の状態変数の値)を変化させる作用を副作用という。
副作用の例としては、グローバル変数や静的ローカル変数の変更、ファイルの読み書きなどのI/O実行、などがある。 一方、高水準言語における、正弦、余弦、平方根などの数学関数では、関数内でノーマルなローカル変数の変更ぐらいしか伴わないため、副作用がない。
なお、コンピュータの論理的状態(ローカル環境以外の状態)を変化させる機能、つまり副作用を起こす機能は、それ以降で得られる結果に影響を与える。 手始めに、与えられた数字を二倍して返す機能"double"があるとする。これは主たる作用しかなく、副作用のない例である。
このような機能では次のことが成立する。
同じ条件を与えれば必ず同じ結果が得られる
他のいかなる機能の結果にも影響を与えない
このような性質を参照透過性という。参照透過な機能はそれ自身状態を持たないことで、副作用とは縁がない。
一方、状態を持つ機能"add"を考える。