Keyword Reference

Func...Return...EndFunc

引数と返し値を持つことのできるユーザー定義関数を定義します。

Func functioname ( [Const] [ByRef] $param1, ..., [Const] [ByRef] $paramN, $optionalpar1 = value, ...)
    ...
    [Return [value]]
EndFunc

 

パラメータ

ユーザーが定義したパラメータ。定義後、他の組み込み関数と同様にして呼び出すことができます。

 

注意

オプションでConst句を設定することでパラメータ値が関数実行中に変化しないように指定できます。Constで宣言された変数はConstパラメータを持つ関数にのみ渡すことができます。

ByRef句によってパラメータを元のオブジェクトへの参照として取り扱うよう指定にできます。デフォルト処理ではパラメータは新しい変数にコピーされますが、ByRefによって新しい変数は元のパラメータとリンクされます。ByRefは関数が大きな配列など大量のデータを扱うことが予想され、 その全てのデータをコピーすると著しく効率が悪い場合などによく使われます。ByRefパラメータとして渡すことのできる名前がつけられている変数だけでなく、関数の返し値など名前のない一時変数もByRefパラメータとして渡されます。定数をByRefパラメータとして渡すことはできません。

ByRefとConstの両方を関数のパラメータに使用する場合、適用される変数の前にさえ書かれていればその順番はどちらでも構いません。

カッコ([ ])をつけないで配列名を渡すことで関数に配列全体を渡すことが(返すことも)可能です。ByRef句を使用してユーザー定義関数に配列を渡すと配列内の全データがコピーされる処理を防ぐことができます。

オプションパラメータはデフォルト値をパラメータに代入しておくことで定義できます。使用できる値はグローバル変数、マクロ、定数値です。オプションパラメータはパラメータ定義の最後に定義しなければなりません。最初に定義したオプションパラメータ以降のパラメータは全てオプションパラメータになります。関数呼び出し時に渡されたパラメータの数は、関数内で@NUMPARAMSマクロを使って取得できます(例2を参照)。

Return句を使用することで関数を終了できます。組み込み関数と異なり、ユーザー定義関数は返し値を指定しない場合0を返します。

関数内で関数定義をすることはできません。

 

関連

Dim/Global/Local, #include, Const

 


Opt('MustDeclareVars', 1)

Example1()
Example2()

; 例1
Func Example1()
; 3つのユーザー定義関数 サンプルスクリプト
; 変数、ByRef、Return 使用法

Local $foo = 2
Local $bar = 5
msgBox(0,"Today is " & today(), "$foo equals " & $foo)
swap($foo, $bar)
msgBox(0,"After swapping $foo and $bar", "$foo now contains " & $foo)
msgBox(0,"Finally", "The larger of 3 and 4 is " & max(3,4))
EndFunc   ;==>Example1

Func swap(ByRef $a, ByRef $b)  ;2つの変数の中身の入れ替え
    Local $t
    $t = $a
    $a = $b
    $b = $t
EndFunc

Func today()  ;現在の日付を mm/dd/yyyy 形式で返す
    return (@MON & "/" & @MDAY & "/" & @YEAR)
EndFunc

Func max($x, $y)  ;2つの数の内大きい方を返す。
    If $x > $y Then
        return $x
    Else
        return $y
    EndIf
EndFunc

;サンプルスクリプト1終了

; 例2
Func Example2()
; @NumParamsマクロのサンプルスクリプト
    Test_Numparams(1,2,3,4,5,6,7,8,9,10,11,12,13,14)
EndFunc   ;==>Example2

Func Test_Numparams($v1 = 0, $v2 = 0, $v3 = 0, $v4 = 0, $v5 = 0, $v6 = 0, $v7 = 0, $v8 = 0, $v9 = 0, _
    $v10 = 0, $v11 = 0, $v12 = 0, $v13 = 0, $v14 = 0, $v15 = 0, $v16 = 0, $v17 = 0, $v18 = 0, $v19 = 0)
    Local $val
    For $i = 1 To @NumParams
        $val &= Eval("v" & $i) & " "
    Next
    MsgBox(0, "@NumParams example", "@NumParams =" & @NumParams & @CRLF & @CRLF & $val)
EndFunc
 
;サンプルスクリプト2終了