FreeBASIC マニュアルのトップに戻る

FreeBASIC Function

目次→命令文→手続きFUNCTION←オリジナル・サイト

Function(関数) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

値を返す手続きを、定義します。

構文:
[Public|Private] Function identifier [CDecl|Pascal|StdCall] [Overload] [Alias external_identifier] [([parameter_list])] [ ByRef ] As return_type [Static] [Export]
statements (命令文)
...
{ {Return [return_value]}|{Function = return_value}|{identifier = return_value} }
...

End Function

パラメタ:
identifier: 関数の名前
external_identifier: 引用符で囲んだ、外部的に見える(リンカへの)名前
parameter_list: parameter[, parameter[, ...]]
parameter: [ByRef|ByVal] identifier [As type] [= default_value]
identifier: 関数で参照する変数の名前
引数が配列の場合は、空の丸カッコを、識別子の後ろに付けなければなりません
type: 変数の型
default_value: 呼び出しで、引数が何も指定されていない場合に使う値(default_value は、リテラル、定数、または共有変数にすることができます。)
return_type: 関数によって返される変数の型
statements: 関数の本体を構成する、1つ以上の命令文
return_value: 関数から戻る値

記述:
関数は、コードのブロック(複数行の命令文の塊)を定義します。
このコードのブロックは、関数名を使って、単一の命令文(関数呼び出し)で実行することができます。
そして、コードの実行終了時に、関数の呼び出し先に、値(戻り値)を提供することができます。
関数を使うと良い理由は、いつくかあります:

アクセス権 :
予約語 PublicPrivate は、それぞれ、公開の、または、非公開なイントラ・モジュール・レベルの、アクセス権を指定します。
どちらも指定しないと、関数は、デフォルトで、公開アクセス権( Public )になります。

呼び出し規則 :
関数呼び出しの間に、引数をスタックに格納して、取り出すときの、呼び出し規則や、順番を指定するために、 CDeclPascalStdCall 予約語を使います。
なにも指定しないと、関数は、デフォルトで、標準規則 (StdCall) を使います。

引数の受渡し :
関数は、呼ばれたときに、一つか複数の、変数または引数を、受け取ります。
これらの引数は、parameter_list の中に、parameters として、記載されます。
ByRefByVal 予約語は、引数が、それぞれ、参照か、値か、どちらで渡されるかを、指定します。
引数の型は、parameter につづく、 "As type" によって与えます。
宣言で、パラメタにデフォルト値を与える場合は、パラメタは任意です。
配列パラメタは、識別子に、空の丸括弧を続けることで、指定します。
配列パラメタは、いつも ByRef です。 ByRef 予約語は、配列パラメータのために必要なく、また許容もされていないことに注意してください。
配列引数で関数を呼ぶときも、丸括弧を付けなければなりません。
下の例を参照ください。

多重定義された関数 :
多重定義された関数は、別の異なるサインのものと、同じ名前(identifier)を共有することができます。
Overload 予約語は、関数が、多重定義されていることを明示します。
関数は、関数を多重定義するのに先立って、Overload 予約語を使って、定義するか、宣言しなければなりません。

戻り値 :
return_type は、終了時に関数によって返される Data Type を指定します。
データ型を指定しないと、関数はデフォルトのデータ型を返します。デフォルト・データ型は、DefSng, DefDbl, DefStr などを使って別のデータ型に設定されていない限り、Integer になります。
関数は、次の 3つの方法で値を返すことができます。Return キーワードの後ろに値を指定すると、関数を直ちに終了して、その値を呼び出し元に返します。
関数は、Function キーワードまたは関数の identifier を、目的の戻り値に代入することで値を返すこともできます(ただし、Function キーワードまたは関数の identifier では、現在代入されている値を評価することはできません)。 ただし、この 2つの方法では、関数は終了しません。
構築子を持つオブジェクトを返す場合、同じ関数内で、Return キーワードを、Function= keyword または関数の identifier= や Exit Function キーワードと組み合わせることは、サポートされていません。
関数は値を返すので、関数の呼び出しは、式として評価されます。したがって、assignmentsIf 命令文など、式が期待される場所であればどこでも関数を呼び出すことができます。関数は、ByRef As return_type を指定して、参照を返すこともできます。

警告: どのような出力分岐を使う場合でも、戻り値は常に定義する必要があります。そうしないと、予期しない動作が発生する可能性があります。

局所変数保存 :
Static 予約語は、関数で局所的に宣言された変数が、関数呼び出しの間で保持されることを指定します。
Static で定義された関数に入ると、局所変数はその関数が最後に呼び出されたときと同じ値になります。

グローバル変数アクセス:
関数本体の外側でグローバル変数として定義された重複するシンボルにアクセスするには、プレフィックスとして 1つまたはできれば 2つの点を追加します:..SomeSymbol またはできれば ..SomeSymbolWith..End Withブロック内の場合は ..SomeSymbol のみ)。

関数を呼び出すとき、引数リスト(存在する場合)を囲む括弧は、式の中で関数を呼び出すときだけ必要です。
渡す引数がない場合、括弧はオプションになりますが、関数呼び出しを表すために、関数名の後に空の括弧 '()' を付けるのが一般的な規則です。

64-bit コンパイラだけの警告:
ユーザー手続きの識別子名の選択については、識別子規則 のページを参照してください。(特に「プラットフォームの違い」の段落)

例:

'' このプログラムは、関数の宣言を示します。
'' そして、Return 命令を使って、値を返します。

Declare Function ReturnTen () As Integer

Print ReturnTen () '' ReturnTen は、デフォルトで整数を返します。
Sleep

Function ReturnTen() As Integer
    Return 10
End Function



'' このプログラムは、関数の宣言を示します。
'' そして、関数名への代入を使って、値を返します。

Declare Function ReturnTen () As Integer

Print ReturnTen () '' ReturnTen は、デフォルトで整数を返します。
Sleep

Function ReturnTen() As Integer
    ReturnTen = 10
End Function



'' このプログラムは、関数の多重定義を示します。
'' 多重定義された関数は、FIRST になります。
Declare Function ReturnTen Overload (a As Single) As Integer
Declare Function ReturnTen Overload (a As String) As Integer
Declare Function ReturnTen (a As Integer) As Integer

Print ReturnTen (10.000!) ''ReturnTen は、シングルを取って、整数を返します。
Print ReturnTen (10)      '' ReturnTen は、整数を取って、整数を返します。
Print ReturnTen ("10")    '' ReturnTen は、文字列を取って、整数を返します。
Sleep

Function ReturnTen Overload (a As Single) As Integer
    Return Int(a)
End Function

Function ReturnTen Overload (a As String) As Integer
    Return Val(a)
End Function

Function ReturnTen (a As Integer) As Integer
    Return a
End Function



'' 下の例は、任意パラメータを示します。

Function TestFunc(P As String = "デフォルト") As String
    Return P
End Function

Print TestFunc("Testing:")
Print TestFunc
Print TestFunc ("テスト2:")
Sleep



'' この例は、配列引数を取る関数を宣言して、
'' 呼び出す方法を、示しています。

Function x(b() As Double) As Integer
  x = UBound(b)-LBound(b)+1
End Function

Dim a(1 To 10) As Double
Print x(a())
Dim c(10 To 20) As Double
Print x(c())
Sleep



' この例(渡辺作成)は、Function の中で他の Function を使っています。
' プログラムの後半にある Function を前半で参照するため、先頭の Declare で宣言しています。
 
Declare Function DoubAndAdd10(a As Integer) As Integer
Declare Function Doub(a As Integer) As Integer
Declare Function Add10(a As Integer) As Integer

Dim i As Integer

For i=1 To 10
   Print i, Doub(i), Add10(i), DoubAndAdd10(i)
Next

Sleep

Function DoubAndAdd10(a As Integer) As Integer
   DoubAndAdd10 = Add10(Doub(a))
End Function

Function Doub(a As Integer) As Integer
   Doub = a*2
End Function

Function Add10(a As Integer) As Integer
   Add10 = a+10
End Function


方言差:

QBからの違い:

参照:
手続きに戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2023-08-30 09:25:02
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承