簡體   English   中英

表達式包含“最多一個副作用,作為其最外層的操作”是什么意思?

[英]What does it mean for an expression to contain “at most one side effect, as its outermost operation”?

Java Language Spex 15.7中

當每個表達式最多包含一個副作用時,代碼通常更清晰,作為其最外層的操作

這是什么意思?

這意味着每個表達式應該一次完成一個任務。

請考慮以下兩個聲明:

int a = 10;
int b = 20;

現在的任務是添加這兩個int並將b遞增1.有兩種方法可以做到這一點。

int c = a + b++;

int c = a + b;
b++;

JLS更喜歡並推薦后者。

這意味着:

int x = someFunction(a, b);

someFunction(a, b)沒有任何副作用,即它不會改變任何東西時更清楚。 相反,上面的唯一變化是對x的賦值。

另一個例子是使用前綴/后綴增量器。

int x = a + b;

比...更清楚

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

因為只分配了x 在第二個示例中, ab在同一語句中進行了更改。

通過限制副作用,您可以更容易地推斷代碼的功能和/或重新排序語句調用,包括將它們並行化,例如在下面,如果方法沒有副作用,那么您可以調用方法a()b()c()以任何順序和/或並行表示參數。

int res = f(a(), b(), c());

表達式的副作用主要是在評估表達式時對變量的賦值。

注意代碼:

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

看起來很扭曲,不是嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM