三項演算子
こんにちは。「Javaを復習する初心者」です。
今回は三項演算子という演算子のひとつを扱いました。条件演算子とも言います。今回は構文ではなくて演算子を使うということになりますが、内容は分岐処理です。
特定の処理のif文
if文で以下ような記述をしたとします。
if(条件){
変数1への代入処理;
} else {
変数1への代入処理;
}
上記のif文は条件で変数1に格納する値を切り替えています。このように、if文とelse文の内容が1行で同じ変数へ代入している場合に三項演算子を使うことがあります。具体的なサンプルは次で紹介します。
ソースと実行結果
以下にフローを書きます。
- boolean型変数flagを宣言し、trueで初期化する。
- String型変数sを宣言し、nullで初期化する。
-
- flagがtrueの場合、sに"こんにちは。"を格納する。
- flagがfalseの場合、sに"さようなら。"を格納する。
- sをprintlnで出力する。
上記内容を見るとif elseの構文で書けますが、三項演算子を使うこともできます。
以下はソースと実行結果です。
package test;
public class HelloConditionalOperator {
public static void main(String[] args) {
boolean flag = true;
String s = null;
s = flag ? "こんにちは。" : "さようなら。";
System.out.println(s);
}
}
こんにちは。
解説
「? : 」が三項演算子です。構文的に書くと以下のようになります。
条件式 : 条件式がtrueのときの式 : 条件式がfalseのときの式;
上記サンプルでは式というより値そのもの書いてます。flagをfalaseで初期化した場合、「さようなら。」が出力されます。三項演算子の使いかたはExcel関数のIF文と雰囲気が似ていると思います。
null回避で使う方法
三項演算子の他の使い方の例として、Stringがnullのときに他の値に書き換えたい場合では、if文使うより三項演算子のほうが1行で済みます。Stringは参照型変数なのでnullという値で初期化可能なのですが、nullのままの変数でprintlnで出力すると「null」という文字そのものが表示されます。なので三項演算子を使ってnullの場合を他の文字列に直すという場合があると思います(または空文字の場合)。以下にサンプルを挙げました。
package test;
public class HelloConditionalOperatorString {
public static void main(String[] args) {
String s = null;
System.out.println("こんにちは。" + s + "さん。");
System.out.println("こんにちは。"
+ (s == null ? "名無し" : s)
+ "さん。");
s = "太郎";
System.out.println("こんにちは。"
+ (s == null ? "名無し" : s)
+ "さん。");
}
}
こんにちは。nullさん。
こんにちは。名無しさん。
こんにちは。太郎さん。
上記のプログラムの三項演算子では変数sがnullであるか判定し、falseならば変数s自身になります。オラクルのSQL関数にnvl関数というのがありますが、それと似ている気がします。