Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

クラス・パラメータの定義と参照

この章では、クラス・パラメータを定義する方法と、そのパラメータをプログラムで参照する方法について説明します。以下のトピックについて説明します。

このドキュメントをオンラインで表示している場合は、このドキュメントの "序文" を使用すると、他のトピックをすばやく見つけることができます。

クラス・パラメータの概要

クラス・パラメータでは、特定のクラスのすべてのオブジェクトで使用できる特別な定数値を定義します。このクラス・パラメータの値は、クラス定義を作成するときに (またはコンパイル前の任意の時点で) 設定できます。既定では、各パラメータの値は NULL 文字列になりますが、パラメータ定義の一環として NULL 以外の値を指定することもできます。コンパイル時に、パラメータの値はクラスのすべてのインスタンスに対して構築されます。わずかな例外はありますが、この値を実行時に変更することはできません。

クラス・パラメータは一般的に、以下の目的で使用されます。

  • さまざまなデータ型クラスの振る舞いをカスタマイズするため (検証情報の提供など)。

  • クラス定義に関するユーザ指定の情報を定義するため。クラス・パラメータは、単純な任意の名前と値の組み合わせです。この組み合わせを使用して、クラスに関する必要な情報を保存します。

  • クラス固有の定数値を定義するため

  • 使用するメソッド・ジェネレータ・メソッドに対して、パラメータ化された値を提供するため。メソッド・ジェネレータは、特別なタイプのメソッドで、この実装は実際に、コンパイル時に実行される短いプログラムです。メソッドに対する実際の実行時コードを生成します。メソッド・ジェネレータの多くは、クラス・パラメータを使用します。

クラス・パラメータの定義

クラス・パラメータをクラス定義に追加するには、以下のいずれかのような要素をクラスに追加します。

Parameter PARAMNAME;

Parameter PARAMNAME as Type;

Parameter PARAMNAME as Type = value;

Parameter PARAMNAME as Type [ Keywords ] = value;

以下はその説明です。

  • PARAMNAME は、パラメータの名前です。慣習により、Caché のシステム・クラスのパラメータは、ほとんどすべてが大文字になる点に注意してください。この慣習により、その他のクラス・メンバのパラメータを名前だけで簡単に区別できるようになります。同じようにする必要はありません。

  • Type はパラメータのタイプです。次のセクションを参照してください。

  • value は、パラメータの値です。ほとんどの場合、これは、100 や "MyValue" などのリテラル値になります。いくつかのタイプでは、ObjectScript 式にすることもできます。次のセクションを参照してください。

  • Keywords はパラメータ・キーワードを表します。これらはオプションです。キーワードの概要は、このドキュメントで前述した “コンパイラ・キーワード” を参照してください。パラメータ・キーワードについては、"Caché クラス定義リファレンス" の “Parameter キーワード” を参照してください。

パラメータのタイプと値

パラメータのタイプを指定する必要はありませんが、指定する場合、この情報は主に開発環境で使用するためのものになります。スタジオのクラス・インスペクタでは、適切なオプションと検証を提供するために、パラメータのタイプが使用されます。例えば、パラメータのタイプが BOOLEAN の場合、クラス・インスペクタは選択肢に 1 と 0 を提示します。

パラメータのタイプには、BOOLEAN、STRING、INTEGER などがあります。これらは、Caché のクラス名ではありません。完全なリストについては、"Caché クラス定義リファレンス" の “パラメータ定義” を参照してください。

コンパイラはパラメータのタイプを無視します。ただし、COSEXPRESSION タイプと CONFIGVALUE タイプを除きます (どちらもサブセクションで説明します)。

実行時に評価されるクラス・パラメータ (COSEXPRESSION)

実行時に評価される ObjectScript 式として、パラメータを定義できます。そのためには、以下のように COSEXPRESSION としてタイプを指定し、値として ObjectScript 式を指定します。

Parameter PARAMNAME As COSEXPRESSION = "ObjectScriptExpression";

PARAMNAME は定義するパラメータです。ObjectScriptExpression は実行時に評価される ObjectScript コンテンツです。

以下にクラス・パラメータ定義の例を示します。

Parameter DateParam As COSEXPRESSION = "$H";

コンパイル時に評価されるクラス・パラメータ (中括弧)

コンパイル時に評価される ObjectScript 式として、パラメータを定義できます。そのためには、以下のようにタイプを指定せずに、値を中括弧で囲んで指定します。

Parameter PARAMNAME = {ObjectScriptExpression};

PARAMNAME は定義するパラメータです。ObjectScriptExpression は実行時に評価される ObjectScript コンテンツです。

例 :

Parameter COMPILETIME = {$zdatetime($h)};

実行時に更新されるクラス・パラメータ (CONFIGVALUE)

クラス定義の外側で変更できるように、パラメータを定義できます。そのためには、CONFIGVALUE としてタイプを指定します。この場合、$SYSTEM.OBJ.UpdateConfigParam() メソッドによってパラメータを変更できます。例えば、以下のようにして、MyApp.MyClass クラスのパラメータ MYPARM の値を新しい値の 42 に変更します。

set sc=$system.OBJ.UpdateConfigParam("MyApp.MyClass","MYPARM",42)

$SYSTEM.OBJ.UpdateConfigParam() は、新しいプロセスで使用される生成済みのクラス記述子に影響しますが、クラス定義には影響しません。クラスをリコンパイルすると、Caché によりクラス記述子が再生成され、クラス定義に記載されたようにこのパラメータの値を使用するため、$SYSTEM.OBJ.UpdateConfigParam() によって行った変更は上書きされます。

クラスのパラメータの参照

クラスのパラメータを参照するには、以下のいずれかを実行できます。

  • 関連するクラスのメソッド内で、以下の式を使用します。

    ..#PARMNAME
    

    この式は、DO コマンドおよび SET コマンドと共に使用することも、別の式の一部として使用することもできます。以下に一例を示します。

     set object.PropName=..#PARMNAME
    

    その次のバリエーションでは、クラス内のメソッドでパラメータの値を確認し、その値を後続の処理の制御に使用します。

     if ..#PARMNAME=1 { 
       //do something
     } else { 
       //do something else
     }
    
  • クラス内のパラメータにアクセスするには、以下の式を使用します。

    ##class(Package.Class).#PARMNAME
    

    Package.Class はクラスの名前です。また、PARMNAME はパラメータの名前です。

    この構文では、指定のクラス・パラメータにアクセスして、その値を返します。この式は、DO コマンドや SET コマンドなどと共に使用することも、別の式の一部として使用することもできます。以下に例を示します。

     w ##class(%XML.Adaptor).#XMLENABLED

    この例では、XML アダプタによって生成されたメソッドが XML 対応Opens in a new tabかどうかが表示されます。既定の設定は 1 です。

  • 実行時までパラメータ名が決定されないパラメータにアクセスするには、以下のように $PARAMETER 関数を使用します。

    $PARAMETER(classnameOrOref,parameter)
    

    classnameOrOref は、クラスの完全修飾名か、クラスのインスタンスの OREF です。また、parameter は関連するクラスのパラメータ名に評価されます。

    OREF の詳細は、“登録オブジェクトを使用した作業” を参照してください。

    詳細は、"Caché ObjectScript リファレンス" の "$PARAMETER" のページを参照してください。

FeedbackOpens in a new tab