Function...Fend

最小單位的可執行程式,1個函式是以Function陳述式開始並以Fend陳述式結束。

格式
Function 函式名稱 [(引數清單)] [As型(函數)] 陳述式 Fend

參數

函數名稱
以64個字元以內的字母,對以Function開始並以Fend命令結束的陳述式群組指定名稱。也可使用下劃線。
引數清單
是呼叫並傳遞給函數的引數變數清單。若有數個變數,則用逗號進行分隔。可省略。
如下所述為引數格式。

[ {ByRef | ByVal}​ ] 變數名稱[( )] As型(引數)

変数的傳遞方式指定為ByRef或ByVal之一。省略時被視為指定ByVal。

ByRef
參照要呼叫的函數變數時,指定ByRef。此時,可將函式內的引數變更反映於叫用側的變數中。
ByVal
是預設值。不變更以叫用函式參照的變數值時,則指定ByVal。可省略。
變數名稱[()]
為引數的變數名稱,是必須的參數。請依循變數命名規則。若要將陣列變數用作引數,請務必指定ByRef,並在變數之後附加表示陣列的「()」括弧。
As型(引數)
是必須的參數。請宣告引數型態。
As型(函數)
是欲讀取傳回值時附加的參數。請宣告傳回值的型態。

傳回值
是在函式宣告的最後以As指定的資料型態(As型(函數))。若未宣告,則數值0為傳回值。

說明
Function陳述式用於表示SPEL+陳述式群組的開始。用Fend陳述式表示1個函式的結束。Function和Fend陳述式之間的所有陳述式,均視為該函式的一部分。

Function和Fend陳述式如同一個容器,包括在兩者之間的所有陳述式,其本身為1個函式。還可將多個函式用於1個程式檔案。

若要使用傳回值,請將值指派與函式名稱同名的變數,然後結束函數。

叫用函式有如下方法。

  1. 作為Xqt的引數指定。作為其他任務調用函式。Xqt用於啟動指定函式並立即返回。
  2. 作為Call的引數指定。作為副程式叫用函式。Call將程式控制切換到指定的函式。
  3. 填寫函式名稱。視為透過Call叫用。傳回值為字串時將會發生錯誤。
  4. 作為命令的引數指定。函式作為副程式執行,該傳回值作為叫用方命令的引數代入。作為任務名稱指定至Quit等以任務識別碼為引數的命令時,不記載引數和前後的括弧。

參照
Call、Fend、Halt、Quit、Return、Xqt

Function...Fend範例
[例1] 以下是1個檔案中包括3個函式的範例。從main叫用task2和task3,並與main同時執行。

Function main
  Xqt 2, task2 '同時執行工作2
  Xqt 3, task3 '同時執行工作3
  .
  .
  .
Fend

Function task2
  Do
    On 1
    On 2
    Off 1
    Off 2
  Loop
Fend

Function task3
  Do
    On 10
    Wait 1
    Off 10
  Loop
Fend

[例2] 以下是將週邊裝置的壓力控制序列作為引數賦予並將其傳送到外接裝置時的結果作為傳回值,顯示於畫面時的函式範例。

Function main
  Integer iResult
  Real Sequence1(200)
  .
  .
  iResult = PressureControl(ByRef Sequence1())   '引數為陣列
  .
  Print "Result:", iResult
  .
Fend

Function PressureControl(ByRef Array1() As Real) As Integer
  .
  (基於Array1陣列,對週邊裝置進行壓力控制)
  .
  PressureControl = 3    '傳回值
  .
  .
Fend

[例3]
下述為函式叫用方法不同的範例。

Function main

    ' 傳回值和引數均未定義的函式
    Print TaskInfo(SubFunction0, 0)       ' 取得任務名稱"SubFunction0"的資訊。
    Print TaskInfo((SubFunction0), 0)     ' 作為副程式執行後,傳回值"0"超出範圍並發生錯誤。

    ' 傳回值已定義的函式
    Print TaskInfo(SubFunction1, 0)       ' 取得任務名稱"SubFunction0"的資訊。
    Print TaskInfo((SubFunction1), 0)     ' 作為副程式執行後,取得相當於傳回值的任務編號資訊。

    ' 傳回值和引數均已定義的函式
    Print TaskInfo(SubFunction2, 0)       ' 取得任務名稱"SubFunction2"的資訊。
    Print TaskInfo(SubFunction2(0), 0)    ' 作為副程式執行後,取得相當於傳回值的任務編號資訊。

    ' 傳回值透過字串定義的函式
    Print TaskInfo(SubFunction1$, 0)      ' 取得任務名稱"SubFunction1$"的資訊。
    Print TaskInfo((SubFunction1$), 0)    ' 第一引數的資料類型不同,因此發生創建錯誤。
Fend

Function SubFunction0
    ・
Fend

Function SubFunction1 As Integer
    ・
    SubFunction1 = 1
Fend

Function SubFunction2(i As Integer) As Integer
    ・
    SubFunction2 = 1
Fend

Function SubFunction1$ As String
    ・
    SubFunction1$ = "main"
Fend