0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java Silver対策】波括弧 { } のない if 文の引っかけ問題

0
Posted at

🟢 はじめに

Javaの学習をしていると、文法的には間違っていないのに「思っていた動きと違う!」というバグに遭遇することがあります。

今回は、Java Silverの試験によく出ると言われている「波括弧 { } を省略した if 文の罠」について、RPGの勇者の冒険に例えながら解説します!

💻 サンプルコード

勇者の現在の「HP体力)」をチェックして、メッセージを表示するプログラムを書いてみました。

以下のコードを実行すると、コンソールには何が表示されるでしょうか?

public class RpgTrap {
    public static void main(String[] args) {
        int hp = 5;

        // ① 正常な if文(HPが10未満なら警告)
        if (hp < 10) {
            System.out.println("HPがピンチです!回復してください!");
        }
        System.out.println("現在のHP: " + hp);

        // ② 罠が仕掛けられた if文(HPが10より大きければ安全を知らせる...?)
        if (hp > 10)
            System.out.println("HPは十分にあります。");
            System.out.println("さあ、次のボスに挑みましょう!");
    }
}

勇者のHP5 です。

下の②の if 文の条件(HPが10より大きいか)は満たしていないので、「メッセージは何も表示されない」ように見えますよね?

しかし、実際の実行結果はこうなります👇

HPがピンチです!回復してください!

現在のHP: 5

さあ、次のボスに挑みましょう!

「え!?HPがピンチなのに、次のボスに挑もうとしてる!?」

一体なぜ、こんな無謀な勇者になってしまったのでしょうか?

罠の正体:インデント(字下げ)の幻術

このバグの原因は、②の if 文に波括弧 { }ブロック)がないことです。

Javaの世界には、次のような絶対のルールがあります。

💡 波括弧 { } のない if文は、直後の「1行(1コマンド)」しか支配できない!

つまり、コンピューターの目線から先ほどのコードを見ると、実はこのように見えているのです。

// 勇者のHPは 5
if (hp > 10) {
    // もしHPが10より大きければ、この1行だけ実行する(今回はスキップされる)
    System.out.println("HPは十分にあります。");
}

// ⚠️ここから下は、if文とは全く無関係に表示されます。
System.out.println("さあ、次のボスに挑みましょう!");

コードを書いた人は、インデント字下げ)を揃えることで「2行とも if文の仲間だよ」と見せかけていたつもりかもしれません。

しかし、Javaコンパイラシステム)はインデントの見た目を一切気にしません。

波括弧 { } で囲まれていないため、if 文の影響力は直後の1行で途切れてしまいます。

その結果、最後の行の「さあ、次のボスに挑みましょう!」は、if文の条件とは一切関係なく、誰でも必ず通るただの道になってしまい、強制的に実行されてしまったのです。

🛡️ 冒険の鉄則(ベストプラクティス)

このような「見た目の幻術」によるバグは、後から見つけるのがとても大変です。

この罠を完全に防ぐための、プログラマーとしての「最強の盾」があります。

それは、「処理が1行だけでも、必ず波括弧 { } を書くこと」です!

// 常に { } を書くクセをつけましょう!
if (hp > 10) {
    System.out.println("HPは十分にあります。");
    System.out.println("さあ、次のボスに挑みましょう!");
}

たったこれだけで、意図しないバグを防ぐことができます。

📝 まとめ

  • if 文に波括弧 { } がないと、影響するのは直後の1行だけ!

  • インデント字下げ)を揃えても、Javaはそれをブロックとしては認識してくれない。

  • 処理が1行だけでも、省略せずに { } を書くのが安全なプログラミングの鉄則!

Java学習中の方の参考になれば幸いです🙌

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?