一般に、?:
オペレーターはクラシックの代わりにはなりませんif() ... else() ...
。両方の演算子 (および条件) が値または値を返す式である場合は、そのまま使用できます。goto
、break
またはのようなステートメントでは使用できませんcontinue
。
次のことが可能です。
condition ? dothis() : dothat(); // there's no assignment, but it's still valid
var = condition ? dothis() : othervar;
condition ? (var=4, othervar=3) : (somevar = 1);
ただし、式以外のもの (つまり、値または結果を持たないもの) を含めることはできません。
condition ? continue : break; // statements letting the execution continue somewhere else
condition ? {var = 4; othervar = 3;} : dothat(); // trying to inline scopes/multiple exressions
var = condition ? while(var) {var--;} : 5; // similar, inlining a complete loop
これらの最後の例は実行できますが、if()
呼び出すために本体を使用するか、関数本体を使用する必要があります。
if (condition) continue; else break;
condition ? (var = 4, var = 3) : dothat();
var = condition ? dotheloop(var) : 5; // ok, this could be 'var = condition ? 0 : 5;' but... example code