プログラムを学習し始めて最初に覚える式と言えばif文ではないでしょうか?
最も初歩的な条件分岐と言えるif文ですが、便利な使い方やスマートな記述方法などは意外と見落としがちでもあります。
今回はそんなif文について具体的なコードも交えながら解説してみたいと思います。
if文とは
if文は最も基本的な条件分岐です。
簡単に説明すると、基本的には2つの値を比較して結果により処理を変える場合に使用します。
Boolean型の場合にはtrueとfalseで処理を変えたい場合に使用することもあります。
但し2つしか分岐を作れないのかというとそうではありません。これについては後述します。
基本的なif文の使い方
早速ですが、if文の基本的な使い方をコードで見てみましょう。
package sample; public class IfSample { public static void main(String[] args) { int A = 1; int B = 2; if(A > B) { System.out.println("AはBより大きい"); } else { System.out.println("BはAより大きい"); } } }
実行結果
BはAより大きい
このコードは単純に変数Aと変数Bを比較してどちらが大きいか分岐処理を行っています。
では次はこのコードをもっとスッキリ書く方法について解説してみます。
1行処理に使える省略形
先ほどと同じ処理をするコードをもっとスッキリとさせるべく書き直したものが以下のコードになります。
package sample; public class IfSample { public static void main(String[] args) { int A = 1; int B = 2; if(A > B) System.out.println("AはBより大きい"); else System.out.println("BはAより大きい"); } }
実行結果
BはAより大きい
if文では1行で記述できる処理をする場合、ブロック({})を省略して記述することが出来ます。
三項演算子を使った省略形
更にもう一つ、省略して記述できる方法をご紹介します。
三項演算子とは条件式の後に「?」マークを使うことで,trueの場合とfalseの場合を同時に記述できる方法です。
記述方法は以下の通りです。
条件式 ? trueの場合 : falseの場合;
それでは早速コードで見てみましょう。
package sample; import java.util.Arrays; public class IfSample { public static void main(String[] args) { String[] basket = {"バナナ", "アップル", "オレンジ"}; String ans = Arrays.asList(basket).contains("ブドウ") ? "入っています" : "入っていません"; System.out.println(ans); } }
実行結果
入っていません
このコードでは、バスケットにブドウが入っているかどうかを判定させています。
三項演算子を使うことで1行でスッキリとした記述が出来ました。
次に三項演算子を使う場合の注意点について解説します。
複雑な処理を行う場合にこの三項演算子を使ってしまうと、返って読みにくくなってしまう場合があります。
また三項演算子の動作は値を返すだけです。条件によって処理を変える場合には三項演算子は使えませんので注意してください。
以下のコードは三項演算子を使えないケースです。
package sample; import java.util.Arrays; public class IfSample { public static void main(String[] args) { String[] basket = {"バナナ", "アップル", "オレンジ"}; // このような記述は出来ないので注意してください。 Arrays.asList(basket).contains("ブドウ") ? System.out.println("入っています") : System.out.println("入っていません"); } }
入れ子(ネスト)にして使う
条件分岐の中で更にif文などの条件分岐を記述することを入れ子(ネスト)と言います。
次のコードを見てください。
package sample; public class IfSample { public static void main(String[] args) { int A = 5; int B = 2; if(A < 10) { if(A < B) { System.out.println("AはBより小さい"); } else { System.out.println("Aは10より小さく、Bより大きい"); } } else { System.out.println("Aは10より大きい"); } } }
実行結果
Aは10より小さく、Bより大きい
このように、if文の中で更に条件分岐をさせることでより複雑な条件分岐にも対応できることが分かります。
if文と論理演算子
条件式が複数ある場合には「AND」や「OR」を使用します。
実際にコードで見てみましょう。
package sample; public class IfSample { public static void main(String[] args) { int year; year = 2019; if((year % 4 == 0) || (year % 4 == 2)) { System.out.println(year + "年は、夏季もしくは冬季のオリンピック開催年です!"); } else if (!(year % 4 == 0) && !(year % 4 == 2)) { System.out.println(year + "年は、オリンピック開催年ではありません!"); } else { } } }
実行結果
2019年は、オリンピック開催年ではありません!
このコードは現在の西暦を基に二つの条件でオリンピックの開催年かどうかの判定をさせています。
判定には「OR(||)」と「AND(&&)」を使っていることが分かります。
「OR」の判定では、西暦が4で割り切れる若しくは余りが2の場合にtrueが返されます。
「AND」の判定内では「!」マークを使い「NOT」で判定を反転させていますので、どちらの条件にも一致しない場合にtrueが返される仕組みとなっています。
instanceof演算子
インスタンス化されたオブジェクトかどうかの判定には”instanceof”を使います。
if文で”instanceof”を使うことで、オブジェクトとクラス等が一致するかどうかを判別できます。
早速実際のコードを見てみましょう。
package sample; public class IfSample { public static void main(String[] args) { Integer num = Integer.valueOf(1); int[] row = new int[3]; if (num instanceof Integer) { System.out.println("num はIntegerクラスのインスタンスです"); } if (row instanceof int[]) { System.out.println("row はint型の配列です"); } } }
実行結果
num はIntegerクラスのインスタンスです row はint型の配列です
このように、判定が一致すればtrueを返します。
まとめ
いかがでしたか?
今回は基本的な条件分岐のif文について解説してみました。
三項演算子や省略形などは使いどころが難しいので、時と場合によって使い分けれるように訓練しましょう。