プログラムの構造 — プログラミング言語 Ring 1.14 取扱説明書

Skip to content

# プログラムの構造

複数のソースコードファイルを同じプロジェクトで扱う方法です。

## ソースコードファイルの階層

ソースコードは下記の各階層から構成されています (同一順)。

ソースコードの階層
ファイルの読み込み
ステートメントとグローバル変数
関数
パッケージとクラス

アプリケーションは一本以上のファイルから構成されています。

## 複数のソースコードファイルを扱う方法

Load 命令はプロジェクトへ別のソースファイルをインクルードします。

文法:

    Load  "filename.ring"

注釈

Load 命令は、コンパイラの構文解析処理の段階で実行します。

ちなみに

実行時までファイル名がわからない、または関数でファイルのパスを取得する必要がある場合は、 eval() を使用します。

用例:

    # ファイル : Start.ring

    Load "sub.ring"

    sayhello("Mahmoud")

    # ファイル : sub.ring

    func sayhello cName
            see "Hello " + cName + nl

## Load Package

'Load' 命令により、複数の Ring ソースファイルをプロジェクトで使えますが、

グローバルスコープを共有しているため、グローバル変数の名前衝突が起きることがあります。

この問題は "Load Package" 命令で解決します。

"Load Package" 命令で新規生成したグローバルスコープへライブラリ (*.ring ファイル) を読み込みます。

これにより既存のグローバル変数との名前衝突を回避できます。これはライブラリ開発でも非常に便利です。

用例:

ファイル: loadpackage.ring

    x = 100
    ? "Hello, World!"
    load package "testloadpackage.ring"

    ? x
    test()

ファイル: testloadpackage.ring

    ? "Hello from testloadpackage.ring"

    x = 1000

    test()

    func test
            ? x

実行結果:

    Hello, World!
    Hello from testloadpackage.ring
    1000
    100
    1000

## Load Again

Ring 1.12 から Load Again コマンドが使えるようになりました。

このコマンドを使うと Ring ソースファイルにある定数を何度でも読み込めます。

これはグローバル定数による翻訳用 Ring ソースファイルを使用するときに便利です。

用例:

下記はアラビア語と英語に対応するプロジェクトからの引用です。

english.ring と arabic.ring ファイルには翻訳で使う定数があります。

これらのファイルはプログラムの開始時に読み込まれます。

Load コマンドで同じファイルの再読み込みはできません。

Load コマンドは同じソースファイルを一度だけ読み込み、それ以降の読み込み指定は無視するからです。

しかし Load Again コマンドならできます。

よって、下記のコードを使うと実行中にファイルの再利用ができます。

    func setLang nLanguage
            if C_ENV_DEFAULT_LANG = nLanguage
                    return
            ok
            C_ENV_DEFAULT_LANG = nLanguage
            # 言語の変更
                    switch nLanguage
                            on C_TRANSLATION_ENGLISH
                                    load again "translation/english.ring"
                            on C_TRANSLATION_ARABIC
                                    load again "translation/arabic.ring"
                    off