[英]What does it mean for an expression to contain “at most one side effect, as its outermost operation”?
這意味着每個表達式應該一次完成一個任務。
請考慮以下兩個聲明:
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
。 在第二個示例中, a
和b
在同一語句中進行了更改。
通過限制副作用,您可以更容易地推斷代碼的功能和/或重新排序語句調用,包括將它們並行化,例如在下面,如果方法沒有副作用,那么您可以調用方法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.