プログラミングにおける副作用
プログラミングにおける副作用の定義はないが、以下の関数を指すことが多い
1.引数以外の要因で結果が変わってしまう関数
スコープ外の変数を参照している処理
実行タイミングや処理順によって関数の結果が変わってしまう
2.「引数以外の要因で結果が変わってしまう関数」
スコープ外の変数に影響を与える処理
グローバル変数を変更したり、与えられた配列に要素を加えてしまったりなど
副作用のある関数は
再利用が難しい
テスト容易性が悪い
処理の予測が困難
「副作用=書くべきではない」ではなく、「副作用=適切な場所に配置するべき」という扱い
副作用がなければ外界に影響を与えることは出来ないのでうまく付き合う術を知っておくと良い
副作用とドメインを切り離す
プロセス外依存をシステム的に扱える形式にどう変換していくのか、が本質
関数とはドメイン(入力)とレンジ(出力)の集合の関係のこと