Skip to main content

ObjectScript のブーリアン値

このページでは、ObjectScript のブーリアン値と、これらを操作する演算子について説明します。

概要

一部の他の言語とは異なり、ObjectScript には、ブーリアン・リテラル値の特殊な表現は用意されていません。代わりに以下のようになります。

  • 値 1 と、ゼロ以外の数値として解釈される式は、true と見なされます。文字列の解釈方法については、"文字列から数値への変換" を参照してください。

  • 値 0 と、0 として解釈できる式または数値として解釈されない式は、false と見なされます。

また、オペランドをブーリアン値として解釈する演算子は、true の場合は 1、false の場合は 0 を返します。

ブーリアン値の簡易な表現が必要な場合は、わかりやすくするために、true の場合は 1、false の場合は 0 を使用します。

使用法

ブーリアン値は、以下で最もよく使用されます。

論理演算子

以下の演算子は常に、オペランドをブーリアン値として扱います。

否定 (')

否定演算子は、ブーリアン型オペランドの真偽値を反転します。オペランドが True (1) の場合、否定演算子は False (0) になります。オペランドが False (0) の場合、否定演算子は True (1) になります。

以下に例を示します。

USER>SET x=0

USER>WRITE 'x
1

"否定 (')" のリファレンス・ページを参照してください。

論理積 (& または &&)

論理積演算子は、オペランドの両方の値が True (1) であるかどうかを判断します。オペランドが両方とも True の場合 (つまり、数値として計算した場合、ゼロ以外の値となる)、ObjectScript は、True (1) を返します。それ以外の場合、False (0) を返します。

論理積演算子には、以下の 2 つの形式があります。

  • & 演算子は、両方のオペランドを評価し、いずれかのオペランドの値がゼロの場合、False (0) を返します。それ以外は True (1) を返します。

  • && 演算子は、左のオペランドを評価し、そのオペランドの値がゼロの場合、False (0) を返します。左のオペランドがゼロ以外の場合にのみ、&& 演算子は右のオペランドを評価します。右のオペランドの評価がゼロの場合、False (0) を返します。それ以外は True (1) を返します。

例えば、以下のようになります。

USER>SET A=-4,B=1
 
USER>WRITE A&&B
1

"論理積 (& または &&)" および "論理積否定 (NAND) ('&)" のリファレンス・ページを参照してください。

論理和 (! または ||)

論理和演算子は、いずれか一方のオペランドが True の値を持つ場合、あるいは両方のオペランドが True (1) の値を持つ場合、True (1) を返します。論理和演算子は、両方のオペランドが False (0) の場合にのみ False (0) を返します。

論理和演算子には、以下の 2 つの形式があります。

  • ! 演算子は、両方のオペランドを評価し、両方のオペランドの値がゼロの場合、False (0) を返します。それ以外は True (1) を返します。

  • || 演算子は、左のオペランドを評価します。左のオペランドがゼロ以外の値に評価された場合、|| 演算子は、右のオペランドを評価せずに True (1) を返します。左のオペランドがゼロの場合にのみ、|| 演算子は、右のオペランドを評価します。右のオペランドがゼロの場合、False (0) を返します。それ以外は True (1) を返します。

以下に例を示します。

USER>SET A=5,B=7

USER>WRITE A!B
1
USER>WRITE A||B
1

"論理和 (! または ||)" および "論理和否定演算 (NOR) ('!)" のリファレンス・ページを参照してください。

論理演算子の優先順位

ObjectScript は、厳格に演算子を左から右へ評価するため、その他の演算子が関与する論理比較では、必要な優先順位を実現するために、演算をグループ化する括弧を使用する必要があります。例えば、以下のプログラムで True (1) を返すために、論理 OR (!) テストが要求されます。

  SET x=1,y=0
  IF x=1 ! y=0 {WRITE "TRUE"}
  ELSE {WRITE "FALSE" } 
  // Returns 0 (FALSE), due to evaluation order

しかし、この論理比較を適切に実行するには、その他の演算を入れ子にする括弧を使用する必要があります。以下の例では、期待される結果が得られます。

  SET x=1,y=0
  IF (x=1) ! (y=0) {WRITE "TRUE"}
  ELSE {WRITE "FALSE" } 
  // Returns 1 (TRUE)

ブーリアン値の組み合わせ

論理演算子を使用することにより、複数のブーリアン論理式を組み合わせることができます。すべての InterSystems IRIS の式と同様に、これらは厳密に左から順に評価されます。論理演算子のタイプには、正規論理演算子 (& および !) と簡易論理演算子 (&& および ||) の 2 つがあります。

正規論理演算子を使用して論理式を組み合わせる場合、InterSystems IRIS では、すべての式の評価が完了する前にブーリアン値の結果がわかっていたとしても、指定された式をすべて評価します。これにより、すべての式の妥当性が保証されます。

簡易論理演算子を使用して論理式を組み合わせる場合、InterSystems IRIS ではブーリアン値結果の割り出しに必要な式のみを評価します。例えば、複数の AND テストをする場合、0 を返す最初の式によって全体のブーリアン値結果が決まります。この式の右側にある論理式は評価されません。これにより、不必要な時間的浪費となる式の評価を回避できます。

コンマ区切りリストを引数値として指定できるコマンドもあります。この場合、InterSystems IRIS ではリストの各引数を独立コマンド文のように扱います。したがって、IF x=7,y=4,z=2IF x=7 THEN IF y=4 THEN IF z=2 と解析され、簡易論理演算子の文の IF (x=7)&&(y=4)&&(z=2) と機能的に同一となります。

以下の例では、IF テストにて正規論理演算子 (&) を使用しています。したがって、最初の関数が 0 (False) を返すため、自動的に式全体の結果が False になりますが、すべての関数が実行されます。

LogExp
 IF $$One() & $$Two() {
    WRITE !,"Expression is TRUE."  } 
 ELSE {
    WRITE !,"Expression is FALSE." }
One() 
 WRITE !,"one"
 QUIT 0
Two()
 WRITE !,"two"
 QUIT 1

以下の例では、IF テストにて簡易論理演算子 (&&) を使用しています。したがって、最初の関数の実行により 0 (False) を返すため、自動的に式全体の結果が False になります。2 番目の関数は実行されません。

LogExp
 IF $$One() && $$Two() {
    WRITE !,"Expression is TRUE."  } 
 ELSE {
    WRITE !,"Expression is FALSE." }
One() 
 WRITE !,"one"
 QUIT 0
Two()
 WRITE !,"two"
 QUIT 1

以下の例では、IF テストにてコンマ区切り引数を指定しています。コンマは論理演算子ではありませんが、簡易 && 論理演算子の指定と同じ効果があります。最初の関数の実行により 0 (False) を返すため、自動的に式全体の結果が False になります。2 番目の関数は実行されません。

LogExp
 IF $$One(),$$Two() {
    WRITE !,"Expression is TRUE."  } 
 ELSE {
    WRITE !,"Expression is FALSE." }
One() 
 WRITE !,"one"
 QUIT 0
Two()
 WRITE !,"two"
 QUIT 1

関連項目

FeedbackOpens in a new tab