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?

ObjectScript の概要

ObjectScript は、複雑なビジネス・アプリケーションの迅速な開発のために設計された、オブジェクト・プログラミング言語です。以下のさまざまなアプリケーションに適しています。

  • ビジネス・ロジック

  • アプリケーションの統合

  • データ処理

ObjectScript のソース・コードは、Caché 仮想マシン内で実行されるオブジェクト・コードにコンパイルされます。このオブジェクト・コードは、文字列操作やデータベース・アクセスなど、ビジネス・アプリケーションで一般的な処理を実行するために、高度に最適化されています。ObjectScript プログラムは、Caché がサポートするすべてのプラットフォーム間で完全に移植可能です。

以下のいずれのコンテキストでも、ObjectScript を使用できます。

  • ターミナルのコマンド行からインタラクティブに使用

  • Caché オブジェクト・クラスのメソッドの実装言語として使用

  • Caché 内に含まれ、実行される個別のプログラムである ObjectScript ルーチンを生成するために使用

  • Caché SQL のストアド・プロシージャとトリガに対する実装言語として使用

  • Caché Server Pages (CSP) アプリケーションで、サーバ側のスクリプト言語として使用

ObjectScript は、Caché の他のネイティブ・スクリプト言語 Caché Basic と完全な互換性と相互運用性があります。

ObjectScript を詳細に学習するには、以下も参照してください。

機能

以下は、ObjectScript の主な機能です。

  • 文字列と連動する強力な組み込み関数

  • メソッド、プロパティ、多態を含むオブジェクトのネイティブ・サポート

  • アプリケーションでコントロール・フローを管理する多様なコマンド

  • 入出力デバイスを処理するコマンド・セット

  • ローカルとグローバル (永続) の両方で多次元なスパース配列 (要素番号が連続しない配列) をサポート

  • 効率的な埋め込み SQL のサポート

  • 間接指定、実行時の評価とコマンド実行のサポート

言語の概要

以下は、ObjectScript の主な要素の概要です。

ObjectScript は予約語が定義されていないため、任意の単語を識別子 (変数名など) として自由に使用できます。このために、ObjectScript は、組み込みのコマンド一式と特殊文字 (関数名の “$” 接頭語など) を使用して、他の言語要素から識別子を区別します。

例えば、変数に値を割り当てる場合、SET コマンドを使用できます。

 SET x = 100
 WRITE x

ObjectScript では、以下のプログラムに示すように、任意の有効な名前を識別子名として使用できます (推奨ではありません)。このプログラムと上記のプログラムは、機能的に同じです。

 SET SET = 100
 WRITE SET

ObjectScript のコンポーネントには、コマンド名や関数名のように、大文字と小文字が区別されないものがあります。また、変数名、ラベル、クラス名、およびメソッド名のように、大文字と小文字が区別される ObjectScript のコンポーネントもあります。詳細は、このドキュメントの “構文規則” の章の “大文字小文字の区別” を参照してください。

空白は、ObjectScript のほとんどの場所で、挿入または省略できます。ただし、空白の使用法の 1 つに重要な意味を持つものがあります。コマンドは、行の最初の文字位置からは開始できず、行の最初の文字位置で続行することもできません。そのため、コマンド行はすべてインデントする必要があります。また、コメントもインデントする必要があります。ただし、ラベルは、行の最初の文字位置で開始する必要があり、マクロ・プリプロセッサ文などの一部の構文は、行の最初の文字位置で開始する場合があります。詳細は、このドキュメントの “構文規則” の章の “空白” を参照してください。

ObjectScript は、コマンド・ターミネータ文字や行ターミネータ文字を使用しません。

コマンドと関数の呼び出し

一番単純な ObjectScript 構文は、以下のような形式で、式でコマンドを呼び出します。

   WRITE x

これは、変数 x に WRITE コマンドを実行します (これにより、x の値を表示します)。上記の例で、x は です。ObjectScript 式は、値を算出するために評価される 1 つ以上の “トークン” です。それぞれのトークンは、リテラル、変数、1 つ以上の演算の結果 (2 つの数字の加算の合計など)、関数の評価からの返り値、あるいはこれらのうちの組み合わせなどになります。文の有効な構文には、そのコマンド関数、および演算子が関係しています。

文とコマンド

ObjectScript プログラムは、多くの文から構成されています。それぞれの文が、プログラムで実行する特定の動作を定義します。文には、コマンド引数があります。

以下に ObjectScript 文があります。

 SET x="World"
 WRITE "Hello",!,x

WRITE はコマンドです。これは、その名前のとおり、引数として指定された内容を現在の主出力デバイスに書き込みます。この場合、WRITE は、リテラル文字列 “Hello”、“!” 文字 (改行またはキャリッジ・リターンを発行する WRITE コマンドに固有の記号演算子)、および実行時に最新の値に置き換えられるローカル変数 x の 3 つの引数を書き込みます。引数はコンマで区切られ、引数と引数の間に空白を挿入することもできます (いくつかの制限があります)。空白については、本ドキュメントの "構文規則" の章で説明しています。

ほとんどの ObjectScript のコマンド (および関数や特殊変数) には、長い形式と短い (省略された) 形式 (通常は 1、2 文字) があります。例えば、次のプログラムは前述のプログラムと同じものですが、コマンド名が省略された形で使用されています。

 S x="World"
 W "Hello",!,x

短い形式のコマンド名は、長いコマンド名の入力を好まない開発者が使用する 1 つの手段です。長い形式とまったく同じコマンドを示します。このドキュメントでは、長い形式のコマンド名を使用します。完全なリストは、"Caché ObjectScript リファレンス" の "ObjectScript で使用する省略形" を参照してください。

コマンドの詳細は、"コマンド" の章、あるいは "Caché ObjectScript リファレンス" のそれぞれのリファレンス・ページを参照してください。

関数

関数とは、処理 (例えば、文字列をその等価の ASCII コード値に変換するなど) を実行して値を返すルーチンのことです。関数は、コマンド行内で呼び出されます。この呼び出しにより関数にパラメータ値が渡され、このパラメータ値を使用して処理を実行します。次に関数は単一の値 (結果) を呼び出し元コマンドに返します。 を使用できる場所ならどこでも関数を使用できます。

Caché では、大量のシステム指定の関数 (“内部” 関数とも呼ばれる) を提供しており、これらを変更することはできません。これらの関数は、1 つのドル記号 (“$”) で始まり、パラメータが括弧で囲まれているため、識別可能です。パラメータが指定されない場合でも、括弧は必須です(特殊変数名も単一のドル記号で始まりますが、括弧は含まれません)。

多くのシステム指定の関数名には、省略形があります。このドキュメントでは、完全な関数名が使用されます。省略形は関数の参照ページに示され、"Caché ObjectScript リファレンス" の "ObjectScript で使用する省略形" には完全なリストが用意されています。

関数は常に値を返します。通常、返り値はコマンドに渡され、SET namelen=$LENGTH("Fred Flintstone") または WRITE $LENGTH("Fred Flintstone") のようになるか、あるいは別の関数に指定されて WRITE $LENGTH($PIECE("Flintstone^Fred","^",1)) のようになります。返り値の受取先を指定しないと、通常 <SYNTAX> エラーが発生します。ただし、一部の関数では、返り値の受取先を指定することは必須ではありません。関数の実行によって行われる処理 (ポインタの移動など)、または関数のパラメータの 1 つを設定することは、関連する処理です。このような場合、DO または JOB コマンドを使用して、返り値を受け取らずに関数を呼び出すことができます。例えば、DO $CLASSMETHOD(clname,clmethodname,singlearg) のように指定します。

関数には、1 つのパラメータまたは複数のパラメータを指定することも、パラメータを指定しないこともできます。関数のパラメータは定位置にあり、コンマで区切られます。多くのパラメータはオプションです。パラメータを省略する場合、Caché はそのパラメータの既定値を使用します。パラメータは定位置のため、指定されたパラメータのリスト内でパラメータを通常省略することはできません。場合によっては ($LISTTOSTRING など)、パラメータのリスト内でパラメータを省略し、プレースホルダのコンマを指定できます。オプションのパラメータについては、最後の指定されたパラメータの右側にプレースホルダのコンマを指定する必要はありません。

大半の関数は、同じパラメータを繰り返して指定できません。しかし、$CASE$CHAR$SELECT は例外として使用できます。

一般的に、パラメータはリテラル、変数、または別の関数の返り値として指定できます。パラメータをリテラルとして指定しなければいけない場合もあります。ほとんどの場合、関数パラメータとして指定するには、変数をまず定義する必要があります。そうしないと、<UNDEFINED> エラーが発生します。一部のケースでは ($DATA など)、パラメータ変数を定義しなくてもよい場合があります。

一般的に、関数パラメータは関数に値を指定する入力パラメータです。関数は入力パラメータとして指定された変数の値を変更しません。関数は値を返すと共に出力パラメータを設定する場合もあります。例えば、$LISTDATA は、指定された位置にリスト要素があるかどうかを示すブーリアン値を返します。また、(オプションで) リスト要素の値に対して 3 番目のパラメータを設定します。

すべての関数は SET コマンド (SET x=$LENGTH(y) など) の右側で指定できます。一部の関数は SET コマンドの左側でも指定できます (SET $LIST(list,position,end)=x など)。SET の左側で指定可能な関数は、参照ページの構文ブロックでそのように識別されます。

システム指定の関数は、Caché の一部として提供されます。"ObjectScript ランゲージ・リファレンス" では、システム指定の関数のそれぞれについて説明しています。クラスで提供される関数はメソッドと呼ばれます。Caché で提供されるメソッドについては、"インターシステムズ・クラス・リファレンス" で説明されています。

システム関数の他に、ObjectScript は ユーザ定義関数 (“外部” 関数ともいいます) もサポートします。また、ユーザ定義関数の定義と呼び出しの詳細は、"ユーザ定義コード" を参照してください。

式は、1 つの値を算出するために評価されるトークン一式です。例えば、リテラル文字列 “hello” は式です。また l + 2 も式です。x などの変数、$LENGTH() などの関数、$ZVERSION などの特殊変数も式として評価されます。

プログラムでは、式をコマンドや関数の引数として使用します。

 SET x = "Hello"
 WRITE x,!
 WRITE 1 + 2,!
 WRITE $LENGTH(x),!
 WRITE $ZVERSION

変数

ObjectScript で変数は、実行時の値が格納される場所の名前です。変数は、SET コマンドなどで定義する必要がありますが、決まった形式は必要ありません。ObjectScript の変数に決まった形式はありません。つまり、変数にはデータ型が割り当てられていないため、任意のデータ値を取ることができます (互換性を維持するために、$DOUBLE 関数を使用して、形式の決まっていない浮動小数点数を特定の数値データ型形式に変換できます)。

ObjectScript は、さまざまな種類の変数をサポートします。

  • ローカル変数 — この変数を作成した Caché プロセスからのみアクセス可能な、プロセスの終了時に自動的に削除される変数。ローカル変数にはどのネームスペースからでもアクセスできます。

  • プロセス・プライベート・グローバル — Caché プロセスからのみアクセス可能な、プロセスの終了時に削除される変数。プロセス・プライベート・グローバルには、どのネームスペースからでもアクセスできます。プロセス・プライベート・グローバルは、サイズの大きいデータ値を一時的に格納する場合に特に便利です。

  • グローバル — Caché データベースに格納される永続変数。グローバルは、すべてのプロセスからアクセス可能であり、そのグローバルを作成したプロセスが終了しても存続します。グローバルは、各ネームスペースに固有です。

  • 配列変数 — 1 つあるいはそれ以上の添え字を持つ変数。すべてのユーザ定義変数は、ローカル変数、プロセス・プライベート・グローバル、グローバル、オブジェクト・プロパティを含め配列として使用されます。

  • 特殊変数 (システム変数とも呼ばれる) — Caché 操作環境における特定の状況の値を含む組み込み変数一式の 1 つ。すべての特殊変数は定義されます。Caché では、すべての特殊変数を初期値 (場合によっては NULL 文字列値) に設定します。特殊変数にはユーザが設定できるものと、Caché でのみ設定できるものがあります。特殊変数は配列変数ではありません。

  • オブジェクト・プロパティ — オブジェクトの特定のインスタンスに関連し、格納される値。

ObjectScript は、変数に対する、あるいは変数間でのさまざまな処理をサポートします。変数については、本ドキュメントの "変数" の章でさらに詳しく説明しています。

演算子

ObjectScript は、多くの組み込み演算子を定義します。演算子には、加算 (“+”) および乗算 (“*”) といった算術演算子、論理演算子、パターン・マッチ演算子などがあります。詳細は、本ドキュメントの “演算子と式” の章を参照してください。

ISO 標準の M 言語とのリレーションシップ

ObjectScript は、ISO 11756-1999 標準の M プログラミング言語の上位集合です。M 言語プログラマは、既存の M アプリケーションを、変更することなく Caché で実行できます。

ObjectScript は、ISO 標準の M 言語より大幅に機能が向上しています。以下はその例です。

  • オブジェクトとオブジェクト指向プログラミングの統合サポート

  • 中括弧 { } の構文を使用した、プロシージャと制御ブロック

  • 空白の要件の緩和

  • 多くの新規関数

これらの新機能を最適な方法で利用し、上記で説明したように、自身のアプリケーションで使用できます。

FeedbackOpens in a new tab