ダイナミックインポートの利用

ダイナミックインポートを使うことで、”必要なときだけ”必要なパッケージをインポートすることができます。これによって、アプレット起動などのパフォーマンスを向上させることができます。

以下が例となります。

        || pはPackageクラス(ここではCOM.CURL.CDK.SQLITEパッケージをインポート)
        def p = {import-package {make-package-selector “COM.CURL.CDK.SQLITE”}}
        || SQLiteDatabaseクラスを取得
        def SD = {p.lookup “SQLiteDatabase”, check-imports? = true}
        def the-database = {SD {url “test.db”}} || SQLiteDatabaseのインスタンス生成(コンストラクタの呼出)
        {the-database.execute
            |”
               CREATE TABLE IF NOT EXISTS orb_simple_cache (
                 name VARCHAR,
                 key VARCHAR,
                 value BLOB,
                 PRIMARY KEY (name, key)) “|

        } || SQLiteDatabase.executeメソッドの呼出

ダイナミックインポートを利用するには、import-packageを利用して、Packageクラスのオブジェクトを取得します。(ちなみにその引数で対象のパッケージを選択するために、make-package-selectorを使うことができます。) 

注意) このとき、上記の方法の場合、マニフェストにパッケージを指定する必要があります。マニフェストにパッケージを記述したくない場合は、import-packageのキーワード引数のmanifestにパッケージファイルのurl(パス)を指定します。

対象のPackageオブジェクトから、そのプロシージャやクラスを取得するには、Package.lookupを利用します。(もしパッケージに新しいプロシージャやクラスなどを追加したい場合は、Package.addを使うことで動的に追加できます。)

また以下の例のようにevaluateプロシージャ内でもダイナミックインポートしたパッケージをPackageオブジェクト(正確にはOpenPackage)を利用できます。(evaluatepackageキーワード引数)

        || pはPackageクラス(ここではCOM.CURL.CDK.SQLITEパッケージをインポート)
        def p = {import-package {make-package-selector “COM.CURL.CDK.SQLITE”}}
        || evaluateでも利用できます。
        {evaluate
          || ここにコード
          , package = p asa OpenPackage
        }

 その他関連APIとして、dynamic-lookupなどを参照ください。