副作用とは?
巷で話題の 「ワクチンの副作用」 のことではないので、そっちじゃないんですか〜ってなった方は、ここでお戻りください🙇♀️
概要
- ある機能があるデータを変化させる
- 1で変化したデータを使用している処理の結果が変わる
参考:https://gimo.jp/glossary/details/side_effect.html
どういう時に起こるか?
値渡しと参照渡しを例にあげてみた(C言語)
参照渡しでは、関数呼び元のデータを変化させてしまっており、その後の処理の結果を変えてしまっている(副作用がある)
参考:https://chomado.com/programming/call-by-value-or-by-reference/
#include <stdio.h> void function(int num) { num += 100; } void function2(int *pNum) { *pNum += 100; } int main() { int number = 1; /* 値渡し */ function(number); printf("値渡し後\n"); printf("%d\n", number); /* 参照渡し */ function2(&number); printf("参照渡し後\n"); printf("%d\n", number); } ===== 結果 ========= 値渡し後 1 参照渡し後 101 <- 本来であればnumber = 1であるはず
- この場合は、
function
関数の呼び元で宣言されているnumber
の値が、function
関数内で変化させられることはない - しかし参照渡しをしている
function2
関数内では、呼び元のnumber
が変えられてしまう事象が起きる
以下のサイトに上のコードをコピペして、実行すれば同じ結果が見れる
https://www.tutorialspoint.com/compile_c_online.php
副作用があることによるデメリットとは?
副作用を起こさないために。
- 変数のスコープを小さくする。
- 外部の変数や状態に依存しない実装を心がける
今、自分が実装しているコードは、自分のコード以外で何か気にしなければいけないのだろうかと一瞬立ち止まって考えてみるのも良いかもですねぇ。