関数とサブルーチン

    関数とサブルーチンはプログラムのどこからでも実行可能できるコードのブロックです。

    関数とサブルーチンにおける最大の相違点は、関数は値を返せます。基本的に関数は文字列や数値を式で使います。 RCBasic には平方根の計算、時刻の取得など様々な処理を担う組み込み関数があります。関数は変数や配列と同じく数値や文字列を扱います。つまり、関数はどこでも使える変数や配列のようなものです。以下を参照してください:

    Dim x[2]
    x[0] = Sqrt(25)
    x[1] = Sqrt(36)
    Print "25 の平方根は "; x[0]
    Print "36 の平方根は "; x[1]

    上述のコードは数値の配列 X に 2 個の要素を作成します。第一インデックスには 25 の平方根、そして第二インデックスには 36 の平方根が存在します。その後、コンソールへ両値を出力します。このような出力になります:

    25 の平方根は 5
    36 の平方根は 6

    数値関数は数値式と同じように使えますし、文字列関数は文字列式と同じように使えます。以下のコードをご確認ください:

    B$ = Mid$("HELLO WORLD", 0, 2)
    Print "HELLO WORLD の最初の二文字は ";B$

    文字列変数 B の作成後、文字列 HELLO WORLD の位置 0 を起点とした 2 文字を代入します。その後、コンソールへ値を出力します。このような出力になります:

    HELLO WORLD の最初の二文字は HE

    サブルーチンは関数と同じくプログラムの別の部分に存在するコードを実行できます。しかし、サブルーチンを返すことはできず式でも使えません。関数ではなく、サブルーチンが必要な理由は? 関数のように内部処理でスタックへ値を退避する必要がないためサブルーチンはオーバーヘッドが少ないからです。ゆえに値を返す必要がなければサブルーチンをお使いください。 RCBasic には返値が不要な処理を担うために組み込みサブルーチンがあります。以下を参照してください:

    FPrint("test")

    FPrint はコンソールへテキストを出力するサブルーチンです。  FPrint は計算処理を行わないため関数として実装する必要はないからです。

    RCBasic では組み込み関数とサブルーチンに加えてプログラマで開発した関数とサブルーチンを組み込むことができます。これは FUNCTION または SUB キーワードで作成します。

    Function  MyFunc(a, b)
        c = a + b
        Return c
    End Function

    上述のコードは二個の引数を扱う関数として MyFunc を作成します: a と b です。この関数を使うには、いかのように呼び出します:

    MyFunc(3, 4)

    上述のコードでは MYFUNC の A に 3 を、 B に 4 を変数ごとに渡します。関数では変数 C を作成後に 3 + 4 の合計をイコール記号で代入します。その後 C を返します。よって関数の結果は 7 となります。これは数値の関数あるため数値の変数への代入、または値を PRINT でコンソールへ出力できます。


    変数と配列の作成時と同じく文字列の変数を作成するには関数名の末尾に $ を追加します。

    Function MyString$ ( G$ )
        Return "なにか入力 " + G$
    End Function

    Print MyString("しましたよね")

    上述のコードの結果は以下の通りになります:

    なにか入力しましたよね

    サブルーチンは SUB キーワードで作成します。 以下を参照してください:

    Sub MySub ( )
        For i = 1 To 5
            Print i
        Next
    End Sub

    MySub ( )

    FOR ループで数値 1 ~ 5 をコンソールへ出力するサブルーチンとして MYSUB を生成します。

    デフォルトでは、関数とサブルーチンには変数に値を渡します。以下を参照してください:

    Sub  MySub ( a )
        a = 5
    End Sub

    n = 0

    MySub ( n )
    Print n

    上述のコードではサブルーチンの引数として変数 A があります。 A には 5 が渡されます。その後、サブルーチンの外側で変数 N の作成と N へ 0 を代入します。MYSUB には引数として N が渡されます。その後に N がコンソールに出力されます。これは 0 をコンソールに出力します。すなわち MYSUB には N の値だけを渡しますが、 MYSYB は N を変更できません。 MYSUB で N を変更可能にするには MYSUB の引数で参照渡しを扱えるようにてください。この指定には BYREF キーワードを使います。

    Sub MySub ( ByRef a )
        a = 5
    End Sub

    n = 0

    MySub ( n )
    Print n

    上述のコードは値を参照するのではなく BYREF キーワードで変更する点を除き前述のコードと同じです。これは MYSUB へ変数 N を渡すとき、 N に代入された値の代わりに A が使われるため、 A を変更すると N も即座に変更されます。この用例ではコンソールへ 5 を出力します。