プログラムにおける副作用(Side Effect)とは

プログラムにおける副作用(Side Effect)とは、グローバル変数の読み書きや、外部のサービスへの通信など、外部の要因によって関数の結果が変わってしまう物の事を言います。

副作用の一覧

大まかに以下のようなものがあります。

  • グローバル変数の読み書き
  • 静的ローカル変数の読み書き
  • ファイルの読み書き
  • 他のコンピュータやプロセスとの通信
  • DBの読み書き
  • 標準出力/入力
  • システムコール
  • 乱数の取得
  • 現在日時の取得

副作用があると困ること

処理結果が副作用に影響されて変わってしまうため、テストコードの記述が難しくなります。
例えば、現在日時を扱うクラスのテストコードは、実行する時間によって結果が変わってしまい検証できないなどの問題があります。

副作用との付き合い方

副作用を伴う処理をクラスに切り出し、DIするようにしましょう。
そうする事で、副作用を伴うクラスをモックに置き換えられるようになり、テストコードが書けるようになります。

また副作用を別クラスに切り出す事で、元のクラスにはドメインロジックだけが残る事になるので、コードの見通しも良くなります。

次に読むべき記事

DI(Dependency Injection・依存性の注入)とは?
プログラムにおけるモックとは?

「プログラムにおける副作用(Side Effect)とは」への2件のフィードバック

コメントする