手続きを定義します。
構文:
パラメタ:
identifier:
サブルーチンの名前
external_identifier:
外部的に目に見える(リンカへの)、引用符で囲まれた名前
parameter_list:
parameter[, parameter[, ...]]
parameter:
[ByRef|
ByVal]
identifier [As type]
[= default_value]
identifier:
サブルーチンで参照される変数の名前。引数が配列の場合、識別子の後に空の括弧を付ける必要があります。
type:
変数の型
default_value:
呼び出しで、何も指定されていない場合の引数の値
(default_value はリテラル、定数、または共有変数にすることができます)
statements:
サブルーチンの本体を作る、1つ以上の命令文
記述:
サブルーチンは、プログラムからいつでも呼び出すことができる、コードのブロックです。
コードのブロックは、複数回実行する必要がある場合があります。サブルーチンは、このコード・ブロックを、1つのサブルーチン呼び出しで置き換えることによって、コードを単純化する、非常に重要な手段を提供します。
サブルーチンは、ユーザが、カスタム命令を作って FreeBASIC言語を拡張できるようにする役割も果たします。
FreeBASIC に組み込まれている多くの関数は、デフォルトでリンクされている「ランタイム・ライブラリ」の一部のサブルーチンに過ぎません。
Sub 予約語は、サブルーチンの開始を示し、終了は End Sub で示します。
「名前(identifier)」パラメータは、このサブルーチンが呼び出される名前です。
たとえば、"Sub...End Sub" の宣言では、ユーザーは、"Sub foo" と "End Sub" の間のコードを、命令文として "foo" を使って実行できます。
このコードは、サブルーチンを呼び出すコードとは別に実行されるため、変数名が共有されていなければサブルーチンでは使用できません。
ただし、パラメータを使って値を渡すことができます。
パラメタは、どんな命令文にも渡すことができる引数です。
例えば、ユーザが "
Print 4" として命令文を実行すると、値 "4" が関数 "
Print" に渡されます。
サブルーチンに渡す必要があるパラメータは、"
Sub" 予約語の、1つ以上のパラメータ引数で指定します。
"
Sub mysub(foo, bar)...End Sub" でサブルーチンを作ると、"
Sub" と "
End Sub" の間のコードは、最初に渡された引数を "foo" 、2番目の引数を "bar" として参照できます。
パラメタにデフォルト値を与えておけば、そのパラメタは必須ではなく、任意になります。
配列パラメーターは、識別子の後に空の括弧をつけて指定します。
配列パラメーターは常に
ByRef です。配列パラメーターに
ByRef キーワードを付ける必要はなく、付けることは許可されていません。
配列の引数を持つサブルーチンを呼び出す際にも、空の括弧を付けなければなりません。
デフォルト方言
-lang fb では、パラメータも "
parameter as type" の形式で型を指定しなければなりません。型接尾辞は使えません。
サブルーチンは、構文定義に示されているように、パラメータが "
Byref" か "
Byval" のいずれかで渡されるように指定することもできます。
パラメータが "
Byref" の場合、パラメータ名は、文字どおりサブルーチンに渡された元の変数への参照になります。 その変数に加えられた変更は、サブルーチンの外部に反映されます。
一方、パラメータが "
Byval" に渡された場合は、渡された変数の値は新しい変数にコピーされ、変更が加えられても元の変数には反映されません。
Static 指定子は、そのサブセットで定義されているすべてのローカル変数の値を、呼び出しの間で保持する必要があることを示します。
個々のローカル変数を、静的変数として指定するには、
Static 予約語を参照してください。
サブルーチン本体の外側でグローバルとして定義された重複シンボルにアクセスするには、プレフィックスとして 1つまたはできれば 2つの点を追加します:
.SomeSymbol またはできれば
..SomeSymbol (
With..End With ブロック内の場合は
..SomeSymbol のみ)。
Sub は、
Function と同様ですが、値を返すことはできません。
サブルーチンを呼び出すとき、サブルーチン名の後の括弧(引数リストがある場合はそれを囲む)はオプションです。
2番目の構文は、それぞれ
Constructor と
Destructor 予約語を使って、構築子(リソースの確保と初期化を行う) か解体子(リソースの解放を行う) のいずれかを定義します。
構築子サブルーチンは、モジュールの最初のコード行の前に実行され、解体子は、モジュール終了時に実行されます。
構築子と解体子の両方について、パブリック・アクセス指定子と、空のパラメータリストに、注意してください。
64-bit コンパイラのみの警告:
ユーザー手続きの識別子名の選択については、
識別子規則 を参照してください。(特に「プラットフォームの違い」の段落)
例:
'' Sub を使って、色付きの文字を表示する例
Sub PrintColoredText( ByVal colour As Integer, ByRef text As String )
Color colour
Print text
End Sub
PrintColoredText( 1, "blue" ) '' いくつかの色
PrintColoredText( 2, "green" )
PrintColoredText( 4, "red" )
Print
Dim i As Integer
For i = 0 To 15 '' 全てで 16 色
PrintColoredText( i, ("color " & i) )
Next i
Sleep
' これは、デフォルトと、オプションのパラメータを表示する例です。
Sub TestSub(P As String = "デフォルト")
Print P
End Sub
TestSub "テスト1:"
TestSub
TestSub "テスト2:"
Sleep
方言差:
QBからの違い:
-
Public と Private のアクセス指定子は、FreeBASICで新規作成。
-
構築子サブルーチンは、FreeBASICで新規作成。
参照: