2 回答

TA貢獻(xiàn)1788條經(jīng)驗 獲得超4個贊
規(guī)則是沒有副作用。改變一個對象是一個副作用。然而,它并沒有真正說你正在變異,所以這里有一個 Payment 版本,其中你的代碼是純的:
public class Payment
{
private int value;
public Payment(int value) {
this.value = value;
}
public Payment setValue(int value) {
return new Payment(value);
}
public int getValue() {
return value;
}
public static int a(Payment payment) {
payment.setValue(payment.getValue() - 1); // dead code
return payment.getValue() * 10;
}
public static int b(Payment payment) {
return payment
.setValue(payment.getValue() - 1)
.getValue() * 10;
}
public static void main(String args[]) {
Payment p = new Payment(10);
System.out.println(String.valueOf(a(p)));
System.out.println(String.valueOf(b(p)));
}
}
請注意您的定義a沒有改變,它是 100% 的功能。如果你通過它10它返回100,總是輸入的 10 倍。然而,從不使用返回Payment帶有值的 new 的第一行,9因此它是死代碼。目的可能是我重寫的版本,b. b也是功能性的。
現(xiàn)在其他實現(xiàn)Payment可能會產(chǎn)生a和b不純。
許多人認(rèn)為 OO 和功能性不能混為一談。Java 中最古老和最常用的類之一java.lang.String,既面向?qū)ο笥质羌兒瘮?shù)式接口。沒有方法會發(fā)生變化,只會返回一個新對象。
添加回答
舉報