条件演算子(Delphi)

提供:RAD Studio

式(Delphi) への移動


If 条件演算子

構文:

if <BoolExpr> then <thenValue> else <elseValue>

備考: この条件演算子は、動作が ?: 演算子に似ていますが、構文はより Pascal 指向であり、if-then-else 構造に似ています。

次の例では、2 つのバージョンで使用される、単純な代入式を示しています。最初のバージョンでは従来の文をベースにしており、2 番目のバージョンは if 演算子をベースとしています。

if Left < 100 then
    X := 22
  else
    X := 45;
  X := if Left < 100 then 22 else 45;

主な違いは、次のように、演算子を任意の式の一部として使用できることです:

ShowMessage (if Left < 100 then 'Small' else 'Big')

ここでは、古い表現から新しい表現への文法の変化がわかります。

旧:

Expression  -> SimpleExpression [ RelOp SimpleExpression ] . . .

新:

Expression  -> SimpleExpression [ RelOp SimpleExpression ] . . .
                -> IF Expression THEN Expression ELSE Expression

結果の式の型は、パラメータとして渡される2つの型によって決まります。 すべての型の組み合わせが正しいとは限りません。 以下の表は、組み合わせの概要を示しています:

型 1 型 2 結果の型
AnsiChar AnsiChar AnsiChar
AnsiString AnsiString、AnsiChar AnsiString
配列 配列 同じ要素型の配列
ブーリアン型 ブーリアン型 汎用ブーリアン型またはブーリアン型
クラス参照 クラス参照、nil 汎用型、基本型、TClass
動的配列 動的配列 汎用動的配列型
列挙型 列挙型 汎用列挙型型
File File エラー(File 型への利用ポインタ)
インスタンス インスタンス、nil 汎用型、基本型、TObject
整数型 整数型 汎用整数型、または両方の範囲をカバーする型
整数型 実数型 実数型
インターフェイス インターフェイス、nil 汎用型、基本型、インターフェイス
nil AnsiChar、ShortString、AnsiString、WideChar、WideString WideChar へのポインタ
オブジェクト オブジェクト オブジェクト型
AnsiChar へのポインタ AnsiChar、ShortString、AnsiString リテラル AnsiChar へのポインタ
AnsiChar へのポインタ WideChar リテラルへのポインタ WideChar へのポインタ
WideChar へのポインタ AnsiChar、ShortString、AnsiString、WideChar、WideString、UnicodeString UnicodeString
ポインタ型 ポインタ型 汎用ポインタ型、またはポインタ型
手続き 手続き プロシージャ型(同じシグニチャを持つ場合)
オブジェクトのプロシージャ オブジェクトのプロシージャ オブジェクト型のプロシージャ(同じシグニチャを持つ場合)
実数型 実数型 より高精度を持つ実数型
レコード レコード レコード型
プロシージャへのリファレンス
無名メソッド
プロシージャへのリファレンス
無名メソッド
プロシージャ型への参照(同じシグニチャを持つ場合)
セット セット 汎用セット型、またはリスト リテラルの場合には大きなセット型
Short 文字列 Short 文字列、AnsiChar より長い Short 文字列
テキスト テキスト エラー(Text 型への利用ポインタ)
UnicodeString UnicodeString、WideString、AnsiString、Short string、WideChar、AnsiChar UnicodeString
Variant Variant Variant 型
WideChar WideChar WideChar
WideChar AnsiChar、AnsiString UnicodeString
WideString WideString、AnsiString、WideChar、AnsiChar WideString

thenelse の式は、キャストを使用して、コンパイラによる式の型の評価をガイドできます。

メモ:
2 つの型が一致せず、互換性がない場合、コンパイラは次のようにエラー メッセージを発します: [dcc32 Error] Unit31.pas(38): E2010 Incompatible types: 'string' and 'Integer'
メモ:
if-then-else 式は if-then-else 文とは異なる点を意識することは大切です。式は単一型を持ちます。 thenelse 式の型が異なる場合、式の型はこの 2 つの式の型の共通型になります。これは、最小上界(LUB: Least Upper Bound)型とも呼ばれます。

式の中で if-then-else 演算子を使用する場合、他の演算(例:加算)の方が優先度が高いことに注意してください。予期しないエラーを引き起こします。 優先度が低いブール演算子の場合と同様に、括弧を追加して使用してください。

関連項目