Solaris 動的トレースガイド

条件式

D では if-then-else 構文はサポートされていませんが、演算子 ?: を使った単純な条件式がサポートされています。これらの演算子では、3 つの式を関連付けることができます。具体的には、最初の式が、残りの 2 つの式のうちどちらを評価するかを決める、条件式になります。たとえば、次の D 文では、値 i に応じて、2 つの文字列のうちのどちらかが、変数 x の設定に使用されます

x = i == 0 ? "zero" : "non-zero";

この例では、最初に式 i == 0 が評価され、真であるか偽であるかが求められます。最初の式が真の場合、2 番目の式が評価され、?: 式の値が返されます。最初の式が偽の場合、3 番目の式が評価され、?: 式の値が返されます。

ほかの D 演算子の場合と同様に、複数の ?: 演算子を 1 つの式で使用することで、より複雑な式を作成できます。たとえば、次の式は、0 - 9、a - z、A - Z のいずれかの文字を含む char 変数 c を取り、この文字を数字と見なした場合の値を 16 進 (base 16) の整数として返します。

hexval = (c >= '0' && c <= '9') ? c - '0' :
    (c >= 'a' && c <= 'z') ? c + 10 - 'a' : c + 10 - 'A';

?: が使用されている最初の式の値が真と評価されるためには、ポインタまたは整数である必要があります。2 番目と 3 番目の式は、互換性のある型であれば何でもかまいません。ただし、一方が文字列型、もう一方が整数型を返すような条件式は作成できません。また、2 番目と 3 番目の式では、trace()printf() などのトレース関数は呼び出せません。条件付きでデータをトレースしたい場合は、第 1 章はじめにで説明したように、述語を使用してください。