電子書籍の厳選無料作品が豊富!

条件演算子 ”?:”をつかってif分と同じようなことができると知りました。

c = (a>b) ? a : 0 ;

というようにスルのですが、ふと、条件に満たない場合はそのまま、という場合にはどう記述したらいいのかわかりません。ためしに

c = (a>b) ? a : c ;

としてみました。これで正しく動作したのですが、


//(a<=b)のときは
c = c ;

ということになるんですよね。これってなんとなく”無駄”な感じがします。
if文でいうと、"else"を記述しない場合の書き方で、スマートなものはないでしょうか?

A 回答 (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の多重分岐も扱えます。
    • good
    • 0
この回答へのお礼

なるほど!

なんとなく、IFぶんよりもスマートな感じがして好きなんですよ。

ほほう。多重分岐もいけるんですね。

勉強になりました!

お礼日時:2003/03/15 22:10

ShaneOMac さんがご自身でもおっしゃっていますが、 Java では、



c = (a > b) ? a : c;

のような書き方はできても、

(a > b) ? (c = a) : 0;

のような書き方はできません。

Java では、ひとつの文の中に、代入やメソッド呼び出しなどの「意味のある」動作が含まれている必要があります。

前者は、? : 演算子で値を選択した後、それを変数に代入しています。しかし後者では、ただ単に ? : 演算子で値を選択しているだけです。たとえ文の一部に代入操作が含まれていても、文を全体としてみたときにそれが ? : 演算子による式である以上、有効な文ではないのです。

> if文でいうと、"else"を記述しない場合の書き方で、スマートなものはないでしょうか?

すべてが ? : 演算子ですんでしまうのなら、誰も最初から if 文なんて物を作りません。無理をせず if 文を使えばよいのです。↓

if (a > b) c = a;

無理に「テクニック」を多用しても、後でソースが読みにくくなるだけですし、プログラムの実行速度が返って遅くなることもあります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2003/03/15 22:16

投稿してから気づきました。

Javaですか?Cだと思ってしまいました。Javaだと違うのかも。
    • good
    • 0
この回答へのお礼

JAVAです。

でも、cから受け継いでいるので同じだと思います。

JAVAの入門書には余り詳しく書いていませんのです

お礼日時:2003/03/15 22:12

>条件に満たない場合はそのまま



なのであれば、

if (a > b) c = a;

で十分ですよ。
そのままなのであれば、わざわざelseや?を使う必要はありません。
    • good
    • 0
この回答へのお礼

ありがとうございました。

でも、どうなるのかな~、とふと思っただけです

お礼日時:2003/03/15 22:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!