if文の省略形 三項演算子って何?
条件によって代入する値を変えたい。そんなとき、if文よりも短く書けるのが三項演算子です。普通のif文と比べながら、使い方と「値を返す」という意味を見てみましょう。
三項演算子とは
if文を省略したような書き方が出来る、三項演算子というものがあります。Javaでは「条件演算子」とも呼ばれます。
条件式 ? 値1 : 値2 このように「?」と「:」を使って書くことで、まず条件式を評価して、trueなら値1、falseなら値2を選びます。選んだ方だけが評価され、その値が式全体の値になります。
条件式は、if文と同じくtrueかfalseで判定できる式でなければいけません。条件式・値1・値2という三つの項を使うので、三項演算子というわけです。
条件によって代入する値を変えたい場合などに、この書き方が役に立ちます。ただし、どんなif文でも置き換えられるわけではありません。「処理を分ける文」ではなく「値を選ぶ式」だという点は、後半で説明します。
三項演算子の使い方
簡単な例を出しますので、普通にif文を使った書き方と、三項演算子を使った書き方を比べてみて下さい。以下のコード例は、それぞれTernaryExample.javaのmainメソッド内に書く部分です。
if文を使った書き方
TernaryExample.java
int num = 5;
String result = "";
if (num > 10) {
result = "numは10より大きいです";
} else {
result = "numは10以下です";
}
System.out.println(result);numは10以下ですnumが10より大きければ、変数resultに「numは10より大きいです」を代入し、numが10以下であれば「numは10以下です」を代入しています。この例ではnumが5なので、後者が代入されます。
三項演算子を使った書き方
TernaryExample.java
int num = 5;
String result = (num > 10) ? "numは10より大きいです" : "numは10以下です";
System.out.println(result);numは10以下です 上のif文と同じことをしています。num > 10がtrueなら「?」の後の文字列、falseなら「:」の後の文字列を選び、その値をresultに代入します。
上記のように条件式を( )でくくると、範囲が分かりやすくなります。この例では( )を省略しても問題ありません。
三項演算子に慣れていない人は、if文の方が読みやすく感じるかも知れませんが、慣れるとスッキリ書けます。条件によって代入する値を変える処理はよく出てくるので、覚えておくと便利です。
三項演算子は値を返す
三項演算子は、あくまで値を選び、式全体の値を得るためのものです。
(num > 10) ? "numは10より大きいです" : "numは10以下です" この式は、二つの文字列のうちどちらかの値になります。その値を変数に代入する、というのが先ほどの使い方です。「返す」とか「評価する」という感覚がよく分からない人は、演算子って何?も読んでみて下さい。
では、次のようにprintlnを選ばせることは出来るでしょうか?
TernaryExample.java
int num = 5;
(num > 10) ? System.out.println("numは10より大きいです")
: System.out.println("numは10以下です"); これはコンパイルエラーになります。気を付けたい点は二つあります。
- printlnは戻り値がvoidなので、三項演算子の値1・値2の位置には書けません。
- 三項演算子の式だけに「;」を付けても、独立した文にはできません。選択肢が文字列でも、その式だけを一行に書くのはエラーです。
単に条件によって行う処理を分けたい場合は、普通にif文を使えばOKです。一方、表示したい文字列を選ぶのであれば、三項演算子をprintlnの引数に入れることが出来ます。
TernaryExample.java
int num = 5;
System.out.println((num > 10) ? "numは10より大きいです" : "numは10以下です");numは10以下ですここでは三項演算子が選んだ文字列を、printlnに渡しています。printlnの処理そのものを選ぼうとしていた、先ほどのエラーになる例とは違いますね。
値1・値2には式も書けますが、結果の型と使う場所の型が合う必要があります。今回の例は、両方ともString型の値を選び、String型の変数への代入や文字列の表示に使っています。
また、booleanの値を選ぶのであれば、if文の条件式に入れることも出来ます。
TernaryExample.java
int num = 5;
if ((num > 10) ? true : false) {
System.out.println("numは10より大きいです");
} ただし、この例は「num > 10がtrueならtrue、falseならfalse」と言っているだけなので、三項演算子を使う意味はありません。普通に次のように書く方が分かりやすいです。
TernaryExample.java
int num = 5;
if (num > 10) {
System.out.println("numは10より大きいです");
} この二つは、numが5なのでどちらも何も出力しません。numを11に変えると、どちらも「numは10より大きいです」と出力されます。
ちょっと後半は話がややこしかったかも知れませんが、要は条件によって代入する値を変えたい時は、三項演算子を使うと便利ですよ、というお話でした。短くしてかえって読みにくくなる場合は、if文を使いましょう。
質問・コメント
0件この記事についての質問や、学習して気づいたことをお寄せください。
コメントを書く
コメントの受付は準備中です。入力しても送信・保存されません。
コメントは管理者の承認後に公開されます。
この記事のコメント
まだコメントはありません。
受付開始後、承認されたコメントがここに表示されます。