立即評估與惰性評估
急切評估表示表示式在遇到時就進行評估,而惰性評估表示需要時才評估表示式。檢視以下示例以瞭解此概念。
import java.util.function.Supplier;
public class FunctionTester {
public static void main(String[] args) {
String queryString = "password=test";
System.out.println(checkInEagerWay(hasName(queryString)
, hasPassword(queryString)));
System.out.println(checkInLazyWay(() -> hasName(queryString)
, () -> hasPassword(queryString)));
}
private static boolean hasName(String queryString){
System.out.println("Checking name: ");
return queryString.contains("name");
}
private static boolean hasPassword(String queryString){
System.out.println("Checking password: ");
return queryString.contains("password");
}
private static String checkInEagerWay(boolean result1, boolean result2){
return (result1 && result2) ? "all conditions passed": "failed.";
}
private static String checkInLazyWay(Supplier<Boolean> result1, Supplier<Boolean> result2){
return (result1.get() && result2.get()) ? "all conditions passed": "failed.";
}
}
輸出
Checking name: Checking password: failed. Checking name: failed.
在此 checkInEagerWay() 函式首先評估引數,然後執行其語句。而 checkInLazyWay() 執行其語句並在需要時評估引數。由於 && 是一個短路運算子,因此 checkInLazyWay 僅評估第一個引數,結果為 false,並且根本不評估第二個引數。
廣告