ここまでで、
- 書き方が間違っていると止められる(コンパイルエラー)
- 状態が危険だと途中で止められる(実行時エラー)
というエラーを見てきました。
でも、プログラミングにはもう一つ、
少し厄介なケースがあります。
エラーは出ない
プログラムも最後まで動く
でも、結果がどこかおかしい
このときに起きているのが、論理エラーです。
論理エラーとは
論理エラーは、
Java的には正しいが、人間の期待と結果がズレている状態です。
- 文法は正しい
- 実行もできる
- 例外も出ない
それでも、
「想定と違う結果」になります。
Javaはルールどおりに、
とても素直に動いています。
ズレているのは、
人間側の前提や考え方です。
よくある論理エラーの例
例1:ループ回数の思い込み
for (int i = 1; i < 5; i++) {
System.out.println("れんぞくこうげき!");
}
このコードは、
攻撃を 4回 行います。
でも、人間の感覚では、
1~5回だよね?って考えてしまいがちです。
例2:条件分岐の思い込み
int hp = 0;
if (hp >= 0) {
System.out.println("こうげき!");
} else {
System.out.println("バトル終了");
}
このコードでは、
HPが 0のときでも攻撃 できます。
仕様としては、
HPが0以上だったら攻撃可能って考えてしまいがちです。
なぜ論理エラーは止められないのか
Javaが判断できるのは、
- 文法が正しいか
- 型が合っているか
- 実行できるかどうか
までです。それが、正しい仕様なのか
判断できません。
だから、
止める理由がないのです。
あとがき
ここまで読んでくれて、本当にありがとうございました。
「プログラミングって難しい…」って思ってた人も、
「ちょっと楽しいかも…!」って思ってもらえたらうれしいな。
次の投稿も、よろしくおねがいします。
💬 コメント・フィードバック歓迎!
「この章わかりやすかった!」
「これ表現まちがってない?」
「次は○○をやってほしい!」などなど、
お気軽にコメントで教えてくださいね!