リテラルとは、以下の “Hello” と “5” のように、一連の文字で構成して特定の文字列や数値を表すようにした定数値です。
文字列リテラル
文字列リテラルは、0 個以上の文字を引用符で区切って記述したリテラルです (文字列リテラルと異なり、数値リテラルでは区切り文字を必要としません)。ObjectScript の文字列リテラルでは、区切り文字として二重引用符を使用し (例えば "myliteral")、InterSystems SQL の文字列リテラルでは、区切り文字として一重引用符を使用します (例えば 'myliteral')。このような区切り文字としての引用符は、文字列の長さには算入されません。
文字列リテラルには、スペース文字や制御文字を初めとして、任意の文字を使用できます。文字列リテラルの長さは、バイト数ではなく、文字列を構成する文字の数で表します。文字列に 0 から 255 のコードの文字のみが含まれる場合 (Latin-1 または ASCII 拡張文字とも呼ばれる)、各文字は 8 ビット (1 バイト) となります。文字列に 255 より大きなコードの文字が 1 文字以上含まれる場合 (Unicode またはワイド文字とも呼ばれる)、各文字は 16 ビット (2 バイト) となります。文字列の文字の格納に使用されるバイト数を表示するには、次の例に示すように、ZZDUMP コマンドを使用します。
最大文字列サイズは 3,641,144 文字です。
以下の例は、8 ビット文字による文字列、16 ビット Unicode 文字 (ギリシャ文字) による文字列、および 8 ビット文字と 16 ビット Unicode 文字を組み合わせた文字列を示しています。
DO AsciiLetters
DO GreekUnicodeLetters
DO CombinedAsciiUnicode
RETURN
AsciiLetters()
SET a="abc"
WRITE a
WRITE !,"the length of string a is ",$LENGTH(a)
ZZDUMP a
QUIT
GreekUnicodeLetters()
SET b=$CHAR(945)_$CHAR(946)_$CHAR(947)
WRITE !!,b
WRITE !,"the length of string b is ",$LENGTH(b)
ZZDUMP b
QUIT
CombinedAsciiUnicode()
SET c=a_b
WRITE !!,c
WRITE !,"the length of string c is ",$LENGTH(c)
ZZDUMP c
QUIT
入力不能文字を文字列に使用することもできます。以下の Unicode の例のように、$CHAR 機能を使用すると、入力不能文字を指定できます。
SET greekstr=$CHAR(952,945,955,945,963,963,945)
WRITE greekstr
表示不能文字を文字列に使用することもできます。このような文字として、出力不能文字 (制御文字) があります。WRITE コマンドでは、出力不能文字がボックス記号で表示されます。WRITE コマンドを使用すると、制御文字が実行されます。以下の例の文字列では、NULL 文字 ($CHAR(0))、タブ文字 ($CHAR(9))、キャリッジ・リターン文字 ($CHAR(13)) に入れ替わる出力可能な文字を使用しています。
SET a="a"_$CHAR(0)_"b"_$CHAR(9)_"c"_$CHAR(13)_"d"
WRITE !,"the length of string a is ",$LENGTH(a)
ZZDUMP a
WRITE !,a
プログラムで実行している WRITE では印刷不能文字として表示される制御文字が、ターミナルのコマンドラインから実行した WRITE では実行されることがあります。ベル文字 ($CHAR(7)) と垂直タブ文字 ($CHAR(11)) はその例です。
引用符文字 (") を文字列に含めるには、次の例に示すようにその文字を重複して使用します。
SET x="This quote"
SET y="This "" quote"
WRITE x,!," string length=",$LENGTH(x)
ZZDUMP x
WRITE !!,y,!," string length=",$LENGTH(y)
ZZDUMP y
値を含まない文字列は NULL 文字列と呼ばれ、2 つの引用符 ("") で示されます。NULL 文字列は、定義済みの値と見なされます。その長さは 0 です。以下の例にあるように、NULL 文字列は、NULL 文字 ($CHAR(0)) で構成した文字列とは異なります。
SET x=""
WRITE "string=",x," length=",$LENGTH(x)," defined=",$DATA(x)
ZZDUMP x
SET y=$CHAR(0)
WRITE !!,"string=",y," length=",$LENGTH(y)," defined=",$DATA(y)
ZZDUMP y
文字列の詳細は、このドキュメントの “データ型とデータ値” の章にある "文字列" を参照してください。
数値リテラル
数値リテラルとは、ObjectScript が数値として計算する値のことです。このリテラルでは区切り文字が不要です。InterSystems IRIS では、数値リテラルがキャノニック形式 (数値リテラルの最も単純な数値形式) に変換されます。
SET x = ++0007.00
WRITE "length: ",$LENGTH(x),!
WRITE "value: ",x,!
WRITE "equality: ",x = 7,!
WRITE "arithmetic: ",x + 1
引用符で区切った文字列リテラルとして数値を表現することもできます。数値の文字列リテラルはキャノニック形式に変換されませんが、演算操作では数値として使用できます。
SET y = "++0007.00"
WRITE "length: ",$LENGTH(y),!
WRITE "value: ",y,!
WRITE "equality: ",y = 7,!
WRITE "arithmetic: ",y + 1
詳細は、このドキュメントの “データ型とデータ値” の章にある "数値としての文字列" を参照してください。
ObjectScript では、以下の値を使用した値が数値として扱われます (ここにない値を使用すると数値扱いにはなりません)。
値 |
数量 |
0 から 9 までの数字。 |
1 個以上の任意の個数。 |
符号演算子、単項マイナス演算子 (-)、単項プラス演算子 (+)。 |
個数は任意ですが、他のすべての文字の前に記述する必要があります。 |
decimal_separator 文字 (既定ではピリオドまたは小数点文字、ヨーロッパのロケールではコンマ)。 |
最大 1 個。 |
文字 “E” (科学的記数法で使用)。 |
最大 1 個。2 つの数値の間に記述する必要があります。 |
これらの文字の使用と解釈の詳細は、“データ型とデータ値” の章の "数値の基本" を参照してください。
ObjectScript は、以下の種類の数値を使用できます。