副作用(プログラミング)== 定められた範囲の外側に対して「値渡し」以外の作用を与えること.
関数の副作用: 関数外に対し、値を渡す以外の何かをすること.
副作用の問題点
副作用を意識して呼び出しをおこなわなければいけなくなる.
「この関数を呼び出しても世界は破滅しないのか?」
「この関数を呼び出したら本番サーバーのユーザーデータを変更しちゃわないか?」
副作用less
値を返す以外何もしないことが保証される.
返ってきた値を捨てれば外部への影響がないことが保証できる.
だから何度呼び出しても安全.
安全に何度も呼べる (re-play可)
-> 開発/デバッグ
-> テスト
-> リプレイ
範囲「内」なら値渡し以外をしていい
/* * 3倍する. */ function pure3times(a: number): number { let output = 0; for (let i = 1; i <= 3; i++) { output = output + a; } return output; } const i = 3; const o = pure3times(i); console.log(`${i}, ${o}`); // > 3, 9
世界にはi
とo
しかなくて、pure3times
してもiが変わっていないのでpure3times
は副作用無し1.
でもpure3times
の中ではoutput
の書き換えをしてる.
"関数の副作用"は関数外という範囲に対して副作用を持つかどうかという話.
参考: STモナド
-
console.log
は見なかったことにして. ↩