跳轉到內容

Futurebasic/語言/參考/def fn expr

來自華夏公益教科書,自由的教科書

DEF FN <expr> 語句

[編輯 | 編輯原始碼]

DEF FN <expr>

[編輯 | 編輯原始碼]

✔ 外觀 ✔ 標準 ✔ 控制檯

DEF FN functionName [(var1 [,var2 ...])] = expr

此語句定義一個“單行”函式。您可以在程式的後續部分使用以下形式的表示式來引用該函式:

   FN functionName [(parm1 [, parm2 ...])]

此表示式返回函式定義中expr的值。

DEF FN <expr>語句不應出現在任何LOCAL函式內部。

functionName可以是任何有效的FB識別符號,它與程式中定義的任何其他函式名稱不同。functionName可以選擇性地以型別識別符號字尾結束(例如%$&等)。

如果functionName以型別識別符號字尾結束,則該字尾表示函式返回的資料型別(因此expr應為相同型別)。如果沒有指定型別識別符號字尾,則該函式返回一個長整型值。

您可以在函式定義中選擇性地包含一個形式引數列表:這是一個用逗號分隔並用括號括起來的變數名稱(var1var2等)列表,緊跟在functionName之後。通常,expr將包含對這些引數變數的引用。當您呼叫具有形式引數列表的函式時,您會在實際引數列表中傳遞值(parm1parm2等)。然後將這些值分配給var1var2等,並用於評估expr.

var1var2等必須是“簡單”變數:它們不能是陣列元素、記錄或記錄欄位。parm1parm2等(除了一些例外)可以是任何型別的表示式,只要每個parm表示式的型別與形式引數列表中對應的var變數相容即可。實際引數列表中的項數和順序必須與形式引數列表中的項數和順序完全匹配(如果有)。

形式引數列表中的變數是全域性變數(如果它們先前在BEGIN GLOBALS...END GLOBALS部分中宣告),或者它們是“主函式區域性變數”。在這兩種情況下,這意味著分配給這些變數的值(當您呼叫函式時)即使在函式返回值後也會保留。如果您隨後在“主函式”(在所有LOCAL函式之外)中執行包含其中一個變數的某些語句,您需要牢記這一點。

expr可能包含除出現在形式引數列表中的變數之外的其他變數。expr中的所有變數都是全域性變數(如在BEGIN GLOBALS...END GLOBALS塊中宣告)或主函式區域性變數。

DEF FN Area!(r!) = pi# * r! * r!

LOCAL FN Circle6
  a! = FN Area!(6.0)
  PRINT a!
END FN

函式FN Area!計算圓的面積,其中圓的半徑作為引數傳遞。我們假設變數pi#是一個全域性變數或一個“主函式區域性變數”,其值先前已設定為 3.14159...

當我們呼叫Circle6函式時,值 113.079 會被分配給區域性變數a!。作為呼叫FN Area!(6.0)的副作用,主函式區域性變數r!的值被更改為 6.0。

DEF FN <expr>是一個“不可執行”語句,這意味著您無法透過將DEF FN <expr>放在THENELSE之後(在IF語句中)來影響函式的定義,也無法將其放在任何型別的“條件執行”塊中,例如LONG IF...END IFWHILE...WENDFOR...NEXT等。但是,您可以透過將DEF FN <expr>放在COMPILE LONG IF塊中來影響函式定義(在編譯時)。

DEF FN不適用於執行緒函式。

LOCAL FN; END FN; USING; FN <userFunction>; @FN; DEF FN USING <fnaddress>

華夏公益教科書