- ベストアンサー
条件演算子 ? :
条件演算子 ”?:”をつかってif分と同じようなことができると知りました。 c = (a>b) ? a : 0 ; というようにスルのですが、ふと、条件に満たない場合はそのまま、という場合にはどう記述したらいいのかわかりません。ためしに c = (a>b) ? a : c ; としてみました。これで正しく動作したのですが、 //(a<=b)のときは c = c ; ということになるんですよね。これってなんとなく”無駄”な感じがします。 if文でいうと、"else"を記述しない場合の書き方で、スマートなものはないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
そういう処理を条件演算子で表現するなら (a>b)?(c=a):0; あるいはカッコをなくして a>b?c=a:0; と書きます。0(ゼロ)でelse句が省略できるのです。 もっともあなたの例のように初期化演算として頭にc=をもってくるなら通用しませんが。 条件演算子(?:)は基本的に多重分岐を扱うものなのであまりelse句なしのものは使いませんが、好みですからどっちでも良いでしょう。if文を使うより文字数が少なく済みますからね。 c=(a>100)?100:(a>10)?10:0; 上記のようにif-else-elseの多重分岐も扱えます。
その他の回答 (3)
- UKY
- ベストアンサー率50% (604/1207)
ShaneOMac さんがご自身でもおっしゃっていますが、 Java では、 c = (a > b) ? a : c; のような書き方はできても、 (a > b) ? (c = a) : 0; のような書き方はできません。 Java では、ひとつの文の中に、代入やメソッド呼び出しなどの「意味のある」動作が含まれている必要があります。 前者は、? : 演算子で値を選択した後、それを変数に代入しています。しかし後者では、ただ単に ? : 演算子で値を選択しているだけです。たとえ文の一部に代入操作が含まれていても、文を全体としてみたときにそれが ? : 演算子による式である以上、有効な文ではないのです。 > if文でいうと、"else"を記述しない場合の書き方で、スマートなものはないでしょうか? すべてが ? : 演算子ですんでしまうのなら、誰も最初から if 文なんて物を作りません。無理をせず if 文を使えばよいのです。↓ if (a > b) c = a; 無理に「テクニック」を多用しても、後でソースが読みにくくなるだけですし、プログラムの実行速度が返って遅くなることもあります。
お礼
ありがとうございました。
- ShaneOMac
- ベストアンサー率39% (356/898)
投稿してから気づきました。Javaですか?Cだと思ってしまいました。Javaだと違うのかも。
お礼
JAVAです。 でも、cから受け継いでいるので同じだと思います。 JAVAの入門書には余り詳しく書いていませんのです
- HUTABA
- ベストアンサー率27% (436/1611)
>条件に満たない場合はそのまま なのであれば、 if (a > b) c = a; で十分ですよ。 そのままなのであれば、わざわざelseや?を使う必要はありません。
お礼
ありがとうございました。 でも、どうなるのかな~、とふと思っただけです
お礼
なるほど! なんとなく、IFぶんよりもスマートな感じがして好きなんですよ。 ほほう。多重分岐もいけるんですね。 勉強になりました!