API Basic Visibility ja - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Public / Private

ClassicUO • Basic

Public はモジュールのメンバーを外部に公開します。Private は同じモジュール内の関数、手続き、初期化式からだけアクセスできます。修飾子は呼び出しではなく宣言の前に書きます。

正確な構文

Public declaration
Private declaration

パラメーター

  • visibility — visibility:Public または Private。省略時はモジュールの SUB/FUNCTION が公開、VAR/DIM/CONST が非公開です。
  • declaration — declaration:SUB/FUNCTION、スカラー VAR/DIM、CONST。Public は Module とファイル直下の宣言にも使えます。Private はファイル直下や手続き本体内では無効です。宣言名にドットは付けません。

戻り値

Public と Private は値を返さず、フィールド型や関数の結果も変えません。Normalize(12) は RETURN で Integer 10 を返し、NextCount() は新しい個数を返します。TRUE/FALSE ではありません。

動作

  • Module 内では自分の短い名前と完全名を使えます。外部からは ModuleName.Member で Public だけにアクセスできます。Public でも短いグローバル名にはなりません。
  • Option Explicit Off でも実行前に検証します。他モジュールの Private へのアクセスは SC019、不正なモジュール/修飾子宣言は SC018 または構文エラーです。その後は初期化式も実行しません。
  • 公開関数は非公開ヘルパーを呼べます。判定は呼び出し元関数の宣言モジュールによります。非公開ヘルパーを IDE、ホットキー、外部手続き API から単独起動することはできません。
  • Public Const は変更不可、Public Var は変更可能のままです。明示的ローカル変数は自分の手続き内だけで同名フィールドを隠します。Private はソースを暗号化せず、所有者からコードを隠しません。
  • デバッガーは選択したフレームで短い名前と Private を解決します。モジュール内では参照でき、外部の呼び出し元に切り替えると ModuleName.privateField は拒否されます。

使用例

1. 公開窓口と非公開ヘルパー

# value=12 を Limits.Normalize、次に Clamp へ渡します。maximum=10 で制限し、両関数は Integer 10 を返します。Main は Normalize のみを呼び、外部から Limits.Clamp(12) は呼べません。
Option Explicit On
Module Limits
    Private Const maximum = 10
    Private Function Clamp(ByVal value)
        If value > maximum Then
            Return maximum
        End If
        Return value
    End Function
    Public Function Normalize(ByVal value)
        Return Clamp(value)
    End Function
End Module
Sub Main()
    Return Limits.Normalize(12)
End Sub

パラメーターと実行の説明:

value=12 を Limits.Normalize、次に Clamp へ渡します。maximum=10 で制限し、両関数は Integer 10 を返します。Main は Normalize のみを呼び、外部から Limits.Clamp(12) は呼べません。

2. 非公開フィールドとローカル変数

# 修飾子のない VAR value=7 は Store 内で非公開です。Read はフィールドの 7、LocalValue は独自の value=9 を返し、フィールドは変わりません。Main は 7*10+9、Integer 79 を返します。
Option Explicit On
Module Store
    Var value = 7
    Public Function Read()
        Return value
    End Function
    Public Function LocalValue()
        Var value = 9
        Return value
    End Function
End Module
Sub Main()
    Return Store.Read() * 10 + Store.LocalValue()
End Sub

パラメーターと実行の説明:

修飾子のない VAR value=7 は Store 内で非公開です。Read はフィールドの 7、LocalValue は独自の value=9 を返し、フィールドは変わりません。Main は 7*10+9、Integer 79 を返します。

3. 定数は公開、カウンターは非公開

# Public Const increment=2 は Counter.increment で読めます。Private count は 1 から始まり、NextCount が increment を足して 3 を保存し返します。Main は 3*10+2、Integer 32 を返します。外部から Counter.count へのアクセスや increment の変更は禁止です。
Option Explicit On
Module Counter
    Public Const increment = 2
    Private Var count = 1
    Public Function NextCount()
        count += increment
        Return count
    End Function
End Module
Sub Main()
    Var result = Counter.NextCount()
    Return result * 10 + Counter.increment
End Sub

パラメーターと実行の説明:

Public Const increment=2 は Counter.increment で読めます。Private count は 1 から始まり、NextCount が increment を足して 3 を保存し返します。Main は 3*10+2、Integer 32 を返します。外部から Counter.count へのアクセスや increment の変更は禁止です。


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic