9

Java言語Spex15.7の場合:

通常、各式に最も外側の操作として最大で1つの副作用が含まれている場合、コードはより明確になります。

どういう意味ですか?

4

3 に答える 3

12

これは、各式が一度に1つのタスクを実行する必要があることを意味します。

次の2つの宣言を検討してください。

int a = 10;
int b = 20;

ここでのタスクは、これら2つを追加して1intずつ増やすbことです。これを行うには2つの方法があります。

int c = a + b++;

int c = a + b;
b++;

JLSは後者を好み、推奨しています。

于 2012-09-27T10:30:11.183 に答える
5

これが意味することは次のとおりです。

int x = someFunction(a, b);

someFunction(a, b)副作用がない場合、つまり何も変わらない場合は、より明確になります。むしろ、上記の唯一の変更は、への割り当てxです。

別の例は、プレフィックス/ポストフィックスインクリメンターの使用です。

int x = a + b;

よりも明確です

int x = (a++) + (++b);

にのみx割り当てられているため。2番目の例abは、とは同じステートメントで変更されています。

副作用を制限することで、コードの機能についてより簡単に推論したり、ステートメントの呼び出しを並べ替えたりすることができます。たとえば、以下のように並列化することもできます。メソッドに副作用がない場合は、呼び出すことができます。メソッドa()b()およびc()任意の順序で、および/または並列に引数を表します。

int res = f(a(), b(), c());
于 2012-09-27T10:30:22.750 に答える
2

式の副作用は、ほとんどの場合、式の評価中の変数への割り当てです。

コードに注意してください:

int x = 5, y = 7;
while ((z = x-- + --y) > 0 ) {
    console.out("What is 'z' now? " + z);
    console.out("How many times will this be printed?");
}

状態の評価には3つの副作用があります。

  • デクリメントx
  • デクリメントy
  • への割り当てz

ねじれているようですね。

于 2012-09-27T10:35:55.520 に答える