副作用
日本語 | 副作用 |
英語 | side effect |
ふりがな | ふくさよう |
フリガナ | フクサヨウ |
演算によって変数の中身が変化すること。
式による演算の結果、式に使用した変数に変化が起こることを「副作用」と言う。
以下の演算子を使用すると副作用が発生する。
・=演算子
・+= 演算子
・-= 演算子
・*= 演算子
・/= 演算子
・&= 演算子
・|= 演算子
・^= 演算子
・%= 演算子
・<<= 演算子
・>>= 演算子
・>>>= 演算子
・++演算子
・--演算子
つまり、代入演算子(複合代入演算子を含む)、インクリメント演算子及びデクリメント演算子が該当する。
これらの演算子は、むしろ「変数の値を変更する」ことが目的のため、それを「副作用」と呼ぶのは抵抗があるかもしれない。
これは逆に、演算子というものはそもそも「副作用を発生させない」ものであり、オペランドに変数を使用してもその変数に影響は与えないことが普通、という点から生まれた表現といえる。
また、メソッドの引数に参照を渡し、メソッドの側で参照先の変数を変更することも副作用である。
ただし、一般に「副作用」という場合には、演算子によるものを指すことが多い。
式による演算の結果、式に使用した変数に変化が起こることを「副作用」と言う。
以下の演算子を使用すると副作用が発生する。
・=演算子
・+= 演算子
・-= 演算子
・*= 演算子
・/= 演算子
・&= 演算子
・|= 演算子
・^= 演算子
・%= 演算子
・<<= 演算子
・>>= 演算子
・>>>= 演算子
・++演算子
・--演算子
つまり、代入演算子(複合代入演算子を含む)、インクリメント演算子及びデクリメント演算子が該当する。
これらの演算子は、むしろ「変数の値を変更する」ことが目的のため、それを「副作用」と呼ぶのは抵抗があるかもしれない。
これは逆に、演算子というものはそもそも「副作用を発生させない」ものであり、オペランドに変数を使用してもその変数に影響は与えないことが普通、という点から生まれた表現といえる。
また、メソッドの引数に参照を渡し、メソッドの側で参照先の変数を変更することも副作用である。
ただし、一般に「副作用」という場合には、演算子によるものを指すことが多い。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// 「=演算子」は、左オペランドの値を
// 右オペランドの値に書き換えます。
int i = 100;
System.out.println( i );
// 100
// 「++演算子」は、オペランドの値を1増やします。
i = 200;
++i;
System.out.println( i );
// 201
// これらが「副作用」に該当します。
// 副作用を持たない演算子は、オペランドに変数を
// 使用しても、変数の値を変更しません。
int iL = 100;
int iR = 200;
// たとえば、+演算子は副作用を持たないため、
// 「i1 + i2」の結果、i1とi2の値は変化しません。
i = iL + iR;
System.out.println( iL );
System.out.println( iR );
// 100
// 200
}
}
public class Sample
{
public static void main( String[] args )
{
// 「=演算子」は、左オペランドの値を
// 右オペランドの値に書き換えます。
int i = 100;
System.out.println( i );
// 100
// 「++演算子」は、オペランドの値を1増やします。
i = 200;
++i;
System.out.println( i );
// 201
// これらが「副作用」に該当します。
// 副作用を持たない演算子は、オペランドに変数を
// 使用しても、変数の値を変更しません。
int iL = 100;
int iR = 200;
// たとえば、+演算子は副作用を持たないため、
// 「i1 + i2」の結果、i1とi2の値は変化しません。
i = iL + iR;
System.out.println( iL );
System.out.println( iR );
// 100
// 200
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // 「=演算子」は、左オペランドの値を // 右オペランドの値に書き換えます。 int i = 100; System.out.println( i ); // 100 // 「++演算子」は、オペランドの値を1増やします。 i = 200; ++i; System.out.println( i ); // 201 // これらが「副作用」に該当します。 // 副作用を持たない演算子は、オペランドに変数を // 使用しても、変数の値を変更しません。 int iL = 100; int iR = 200; // たとえば、+演算子は副作用を持たないため、 // 「i1 + i2」の結果、i1とi2の値は変化しません。 i = iL + iR; System.out.println( iL ); System.out.println( iR ); // 100 // 200 } }