トップへ戻る

Autoitプログラミング

関数

関数とは、引数と呼ばれるデータを受け取り、定められた通りの処理を実行して結果を返す一連の命令群を言います。

 

関数の形式は次のようになります。

 

Func autoit("パラメータ1","パラメータ2", ....)

 

コード....

 

EndFunc

 

AutoIt には200以上の関数があり、UDF関数も大量にあります。

 

UDFとは:User Defined Function 、ユーザー定義関数

 

これらの関数以外に、ユーザー自身が繰り返し行うコードを簡略化するために「ユーザー定義関数」を作成することができます。

ユーザー定義関数

引数と返し値を持つことのできる関数をユーザー自身が作成したものを「ユーザー定義関数」と言います。

 

キーワード:Func...Return...EndFunc

 

ユーザー定義関数の形式は次のようになります。

 

Func autoit("パラメータ1","パラメータ2", ....)

 

コード....

 

Return

 

EndFunc

 

2つの数の内、大きい方を返すサンプルです。

 

プログラム中で何度も2つの数値を比較する場合など、「ユーザー定義関数」を作成しておくと作業の効率が良くなりますね。

 

 

$x = 3
$y = 2

 

MsgBox(0, "", "$x と $y 大きいのは: " & max($x, $y))

 

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

 

 

 

こちらはテキストファイルの内容を返すユーザー定義関数です。

 

毎回 FileOpen、FileRead、FileClose を書くのはとても面倒ですね。

 

ご自身でユーザー定義関数を作成しておくと、とても便利ですよ。

 

 

$textfile = "test.txt"

 

MsgBox(0, "test.txtの内容: ", _FileRead($textfile))

 

Func _FileRead($file)
    $open = FileOpen($file)
    $read = FileRead($open)
    FileClose($open)

 

    Return $read
EndFunc   ;==>_FileRead

 

 

 

 

関数内の変数のスコープ(作用範囲)

関数内の変数のスコープ(作用範囲)は2種類あります。

 

1つはローカル変数、もう1つはグローバル変数で、

 

ローカル変数は、関数内でのみ有効であり、関数外には影響しません(例えば関数外に同名の変数がある場合など)。

 

グローバル変数は、ローカル変数と違い、プログラム中のすべての範囲で有効になります。

 

 

Global $Global = 100 ; グローバル変数 $Global の宣言。100を代入。

 

 

MsgBox(0, "", " 関数_Aのローカル変数の値:" & _A() & @LF & " 関数_Bのローカル変数の値:" & _B() & @LF & " グローバル変数$Globalの値:" & $Global)

 

; & で文字列を連結,@LF は改行(ラインフィード)

 

 

Func _A()
    Dim $Local

 

    $Local += 10 ; ローカル変数の値に10を足します。

 

    Return $Local ; ローカル変数の値を返します。
EndFunc   ;==>_A

 

Func _B()
    Dim $Local

 

    $Local = 2 ^ 4 ; 16
    $Global -= $Local ; グローバル変数から関数_Bのローカル変数の値を引きます。

 

    Return $Local
EndFunc   ;==>_B

 

 

 

 

関数_A と _B では同名のローカル変数 $Local を使用しています。

 

代入している値は同じではないが、どちらの関数にも影響していません。

 

では、グローバル変数の $Global はどうでしょう?

 

関数_B 内で $Global から $Local の値を引いているので、初めに代入した $Global の値 100 は 84 に変更されていますね。

 

グローバル変数は、プログラム中のすべての範囲で有効になります。