【Java】if文でプログラムに「判断」をさせよう!条件分岐の基本をいっぽずつ解説
はじめに
みなさんどうも、おげんです。
前回まで「整数」「小数」「文字」「真偽値」と、Javaの基本データ型を四天王のごとく制覇してきました。
これで皆さんの手元には、たくさんの「道具」が揃ったことになります。
でも、道具だけがあっても、それをどう使うかの「指示」がないとプログラムは動きません。
そこで今回から始まるのが、プログラミングの醍醐味である 「条件分岐(if文)」 です。
「もし〜だったら、この処理をする。そうでなければ、こっちをする」
この仕組みを覚えると、プログラムは一気に「知的な動き」を見せるようになります。
例えば、「ログインパスワードが合っていればマイページを表示し、間違っていればエラー画面を出す」といったものです。
このように私たちが普段ネットで見ている動きのほとんどは、この if文 という「分かれ道」で作られています。
独学を始めたばかりの頃の私は、この「条件分岐」を学んだときに初めて、「あ、今自分はプログラムをコントロールしている!」という実感が湧いて、すごく感動したのを覚えています。
今回は、前回学んだ boolean(真偽値) をガソリンにして動く、この「if文」の基本について、いっぽずつ丁寧に紐解いていこうと思います。
- booleanはわかったけど、具体的にどう使うのか知りたい人
- プログラムを「自分の思い通り」に分岐させて動かしたい人
- if文の
{ }や括弧の書き方でいつもエラーが出る人 - エンジニアの実務で必須の「条件分岐」の基礎を固めたい人
if文の基本ルール
if文の書き方は、実はとっても定型的です。
if (条件式) {
// 条件が true のときに実行したい処理
}「もし(if)、この条件式が true(正解) だったら、波括弧 { } の中身をやってね!」という命令です。
実際のコードで見てみよう
例えば、「もし80点以上なら、合格!と表示する」プログラムはこうなります。
int score = 85;
if (score >= 80) {
System.out.println("合格!おめでとう!");
}この場合、score >= 80 は true になるので、無事に「合格!」のメッセージが表示されます。
逆に、もしスコアが75点だったら、Java君は「あ、ここは条件に合わないな」と判断して、波括弧の中身を無視してスルーします。
Java君は「カッコ」に厳しい
独学時代の私が何度もエラーを出したのが、このカッコのルールです。
( )丸カッコ: 条件式(比べたい内容)を書く場所{ }波カッコ: 条件に合った時に実行する「範囲」を決める場所
特に、最後の } を書き忘れて「どこまでがif文なの!?」とJava君をパニックにさせてしまうのは、初心者あるあるです(笑)。
「if文は、この2種類のカッコがセットで動くんだ」と意識するだけで、エラーの数はグッと減りますよ!
「そうでなければ(else)」の力
前章のif文だけだと、条件に合わなかった時は「ただ無視して終わり」でした。
でも、実際の生活では「もし雨なら家で読書する、そうでなければ(晴れたら)外へ買い物に行く」という風に、どちらの場合も何かしら動きたいことが多いですよね。
そんな時に使うのが else(エルス) です。
else の書き方
if の波括弧が終わったすぐ後ろに、おまけのように付け足します。
if (条件式) {
// true のときにやること
} else {
// false(条件に合わなかった時)にやること
}実際のコードで見てみよう
「合格」か「不合格」か、どちらかの結果を必ず出したい時はこう書きます。
int score = 75;
if (score >= 80) {
System.out.println("合格!おめでとう!");
} else {
System.out.println("残念、不合格です。次は頑張ろう!");
}この場合、スコアは75なので score >= 80 は false になります。
するとJava君は「ifの中身は飛ばして、elseの中身をやろう!」と判断し、「残念、不合格です」と表示してくれます。
複数の分かれ道(else if)
プログラミングをしている中で条件が2つだけとは限りませんよね。
「80点以上なら『優』、60点以上なら『良』、それ以外は『不可』」という風に、3つ以上の分かれ道を作りたいときに登場するのが else if です。
else if の書き方
上から順番に条件を確認していき、当てはまったところで実行されます。
if (条件A) {
// Aが true ならここ
} else if (条件B) {
// Aは違うけど、Bが true ならここ
} else {
// AもBも違うならここ
}実際のコードで見てみよう
点数によってメッセージを変える、ちょっと豪華な判定プログラムです。
int score = 65;
if (score >= 80) {
System.out.println("判定:優!素晴らしい!");
} else if (score >= 60) {
System.out.println("判定:良!よく頑張りました。");
} else {
System.out.println("判定:不可。次は本気を出そう!");
}上から順番にチェックされるのがポイント
Java君は、まず一番上の if を見ます。
もし score が 85 だったら、最初の if で「合格!」となり、その下の else if や else は見向きもせずにスルーします。
逆に score が 65 の場合、最初の if は false なので、次の else if を見に行き、「あ、ここは 60 以上だね!」と判断して中身を実行します。
当時の私は、条件を書く順番を適当にしてしまって、「全部の条件に当てはまっちゃう!」と混乱したことがありました(笑)。
「一番厳しい条件から順番に書いていく」のが、else if を使いこなすコツなんです。
判定をするときの大事な注意点(復習)
if文が書けるようになると、一気にプログラミングが楽しくなります。
でも、そんな楽しさを一瞬で奪いに来るのが、Java君の「厳格すぎる文法チェック」です。
特に私が何度も泣かされたポイントを2つ紹介します。
やっぱり「==」と「=」の間違い
前回のbooleanの記事でも触れましたが、if文の中でこれを取り違えると、プログラムは全く違う動きをしてしまいます。
if (score == 100):スコアが100点と「同じ」かな?(比較)if (score = 100):スコアに100を「入れる」よ!(代入)
Javaでは、if のカッコの中は「trueかfalse(boolean)」でなければなりません。
= を1つにしてしまうと、Java君から「値を入れられても、正しいかどうかわからないよ!」と怒られて、エラーが出てしまいます。
String(文字列)の比較は特別
これは少し発展的ですが、私が一番驚いたのがこれです。
数字の比較は == でいいのですが、名前などの「文字列」を比べるときは == を使わないのがJavaの鉄則です。
String name = "おげん";
// ❌ こうではなく
if (name == "おげん") { ... }
// ✅ こう書く!
if (name.equals("おげん")) { ... }「なんで文字列だけ仲間外れなの!?」と当時の私は憤慨しました(笑)
Javaにとって String は「特別なエリート(参照型)」なので、中身を比べるには equals という専用の道具を使う必要があるんです。
今は「文字列の時は .equals() を使うんだな」と頭の片隅に置いておくだけで、将来の絶望を一つ回避できますよ!
まとめ:プログラムの「意思」を操ろう
今回はJavaの「条件分岐(if文)」について解説しました。 最後に、大事なポイントを振り返ってみましょう。
- if文はプログラムに「分かれ道」を作るための仕組み
( )には条件を、{ }には実行する処理を書く- 「そうでなければ」は
else、さらに条件を足すならelse ifを使う - 比較するときは
==! 文字列の比較には.equals()を使うのがJavaの鉄則
if文が書けるようになると、今までバラバラだった「変数」や「型」の知識がひとつに繋がって、まるでプログラムに命が吹き込まれたような感覚になります。
基礎的なことかもしれませんが、この「もし〜なら」の積み重ねが、世界中の複雑なアプリやシステムを作っています。
皆さんも、まずは簡単な「おみくじプログラム」や「点数判定」を作って、Java君と対話してみてくださいね。
次は、同じ処理を何度も繰り返す便利な機能、「繰り返し(for文/while文)」についてお話ししようと思います。
一緒に頑張りましょう!
