私はこの問題をJavaの教科書で研究しようとしています。 問題は、このプログラムを書き換えて副作用をなくすことです。 ここで、オブジェクトまたはプログラム変数の状態への変更は、関数(またはメソッドと同じことです)の呼び出しによって生成されます。副作用を排除するためにプログラムを書き直すには?
パッケージsideeffect;
public class SideEffect {
**public static int x;**
public static int f(int n){
x = x * 2;
return x + n;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
x = 5;
//int result = f(x) + f(x);
int result = 2 * f(x);
//System.out.println(result);
}
}
コメントアウトされた行は、整数変数を実装してプリントアウトするとどうなりますか。 これらの行を実装して他の行をコメントアウトすると、 の結果は45です。 の結果は30です。 副作用がないようにプログラムを整える方法はありますか? 私はグローバル変数ラインを削除すると考えていました。本書では、この悪いことにつながる可能性があります。 混乱しているコードです。 他に何ができますか?
希望の出力は何ですか? –
この問題は特定の出力を示していません。関数がグローバル変数を変更するのではなく、パラメータとして使用するxの値を受け入れるようにすることだけを示唆しています。 –
"副作用を排除する"とは、メソッドの実行によって生成される*外部から見える*副作用*を意味すると思います。副作用の種類もありますが、これはJavaで簡単に回避できません。 –