目次
索引 🔎︎

# 手続きおよび関数の使用法

ここでは、LibreOffice Basic でのプロシージャーおよび関数の基本的な使用法について説明します。

モジュールを新規作成すると、LibreOffice Basic は自動的に「Main」という名前のプロシージャーを作成します。このデフォルト名は LibreOffice Basic プロジェクトの開始位置や順序には関係ありません。このプロシージャー名は任意に変更できます。

パブリック変数やサブルーチン、関数の名前にはいくつかの制限が適用されます。同じライブラリのモジュールのいずれかと同じ名前を使ってはいけません。

プログラムの構造は、プロシージャー (SUB) や関数 (FUNCTION) を使用することで、個々の機能別に整理することができます。

また、手続きや関数を使用するメリットの 1 つに、こうした特定の機能を担ったプログラムコード群を他のプロジェクトで再利用できる点があります。

## プロシージャー (SUB) や関数 (FUNCTION) への変数の渡し方

プロシージャーや関数には、変数を渡すことができます。これらの変数は、SUB および FUNCTION ステートメント部で使用を宣言する必要があります。

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
    Program code
    End Sub

こうした SUB の呼び出しは、下記の構文で行います。

    SubName(Value1, Value2,...)

SUB に渡す個々の変数は、SUB 宣言部の変数型と一致する必要があります。

これらの事項は FUNCTION についても同様ですが、この場合は関数の戻り値が返されます。これらの戻り値は、各関数の処理ルーチンが終了するまでに算出しておき、戻り値とする計算結果のパラメータを関数名に代入する形で確定します(例を参照)。

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Program code
    FunctionName=Result
    End Function

こうした FUNCTION の呼び出しは、下記の構文で行います。

    Variable=FunctionName(Parameter1, Parameter2,...)

プロシージャまたは関数を呼び出すには、完全修飾名を使うこともできます:
Library. Module. Macro()
たとえば、Gimmicks ライブラリにある Autotext マクロを呼び出すには、以下のようにコマンドを使います：
Gimmicks.AutoText.Main()

## パラメータの参照渡しと値渡し

SUB や FUNCTION に渡すパラメータは、参照渡しか値渡しのいずれかの形で与えることができます。明示的に指定しない限り、パラメーターは参照渡しとして渡されます。この場合、SUB や FUNCTION に渡されたパラメーターは、その値の読み取りだけでなく、値の変更が可能です。

値渡しでパラメーターを与えるには、下記の例のように SUB や FUNCTION の呼び出し時に「ByVal」キーワードをパラメーターの直前に指定します。

    Result = Function(ByVal Parameter)

この場合 FUNCTION 部には、パラメーター本体ではなくその値だけが渡されるため、パラメーター値が書き換えられることはありません。

## 変数の適用範囲

SUB または FUNCTION 内に定義される変数であり、手続きが完了するまでの間だけ有効です。 これは「ローカル」変数です。 多くの場合、すべての手続き内、すべてのライブラリの各モジュール内、または SUB や FUNCTION が完了したあとで、変数を有効にしておく必要があります。

### SUB や FUNCTION 外部での変数宣言

    GLOBAL VarName As TYPENAME

こうして宣言した変数は、LibreOffice セッションの終了時まで有効となります。

    PUBLIC VarName As TYPENAME

こうして宣言した変数は、すべてのモジュールで有効となります。

    Private VarName As TYPENAME

こうして宣言した変数は、該当モジュールの内部だけで有効となります。

    Dim VarName As TYPENAME

こうして宣言した変数は、該当モジュールの内部だけで有効となります。

### プライベート変数の例

CompatibilityMode(true) を設定して、プライベート変数がモジュール間でプライベートになるように強制的に設定します。

    ' ***** Module1 *****
    Private myText As String
    Sub initMyText
        myText = "Hello"
        Print "In module1 : ", myText
    End Sub

    ' ***** Module2 *****
    'Option Explicit
    Sub demoBug
        CompatibilityMode( true )
        initMyText
        ' 空の文字列を返します
        ' (or raises error for Option Explicit)
        Print "Now in module2 : ", myText
    End Sub

### SUB や FUNCTION 終了後も値を維持できる変数

    STATIC VarName As TYPENAME

宣言した変数は、次に SUB や FUNCTION を実行するまで有効となります。 この場合の変数宣言は、SUB や FUNCTION の内部に記述する必要があります。

## 関数の戻り値のデータ型の指定

関数の戻り値のデータ型の設定は、変数の場合と同様の型宣言子を用いて行い、下記の例のように、関数宣言時の関数名とパラメーターリストに続けて「As」および型宣言用キーワードを記述することで指定します。

    Function WordCount(WordText As String) As Integer