為什麼它特別是立即如果(IIF)?
我對 MS Access(以及一般的數據庫)很陌生,但我注意到 IF() 語句實際上是使用 IIF() 函式編寫的。
線上快速搜尋告訴我,它代表 Immediate If,我假設是因為它是立即評估的。
Support.Office.com 告訴我 IIF() 具有與其他程序和語言中的 IF() 相同的功能,所以我的問題是為什麼它是 IIF() 而不是 IF()?
我無法在任何地方找到這個答案。
是否有“延遲”IF(或任何其他類型的 IF)證明需要立即 IF 是合理的?如果是這樣,另一個 if 的可能案例是什麼?
如果沒有不同的 IF,為什麼 IIF() 函式不只是稱為 IF()?
在 Access 中,
IIf ( expr , truepart , falsepart )
是一個具有三個參數的函式。Access 中還提供 VBA(Visual Basic for Applications),它具有通常的
If ... Then ... ElseIf ... End If
條件執行塊,但在這種情況下If
,其他術語都是Basic 語言的關鍵字。函式形式
IIF()
可以在 SQL 語句中使用,也可以作為某些對象屬性中單個可執行語句的一部分,例如Control Source
表單控制項的屬性。在這兩種情況下,都不允許使用完整的多行If
結構(即完整的 VBA 程式碼塊)。如果沒有函式形式,就無法在這種情況下執行條件表達式。名稱不同的一個原因是為了避免函式與關鍵字同名的衝突。有趣的是,Excel 也支持 VBA,但它仍然有一個名為 IF() 的電子表格函式。儘管其中一些原因可能只是原始應用程序設計者決定的慣例(風格),但可能還有其他更微妙的原因。例如,Access 更有可能在不同的上下文中出現混合表達式(如前所述),因此避免與 VBA 關鍵字發生衝突很重要。相反,不可能在電子表格單元格之外的任何其他上下文中執行 Excel“電子表格命令”。儘管可以從 Excel 單元格執行正確定義的 VBA 函式,但不能直接從電子表格命令中執行 VBA 程式碼。換句話說,
在 Access 的情況下,“立即”或“延遲”版本的概念
If
是不相關的。某些語言(Java、C++、C# 等)支持短路邏輯運算符(如 && – 邏輯與),它們僅在邏輯必要時執行第二條語句。但是IIF()
函式和 VBAIf
語句都不支持這種行為。“傳遞”到任一表單的所有表達式和/或函式呼叫都將被完全評估/執行。在某些情況下,例如在 SQL 語句中,此類表達式的計算結果可能為 NULL,因此整個表達式也可能為 NULL 並被有效忽略,但忽略表達式的結果與跳過單個語句的執行不同。