LoginSignup
2
1

More than 1 year has passed since last update.

if if と if else は違う

Last updated at Posted at 2022-09-27

タイトルの通り、if文についての個人的に勘違いしていたことです。

やりたかったこと

1~30までの数字を出し、3の倍数の時は「あほ」になり、5の倍数の時は「犬」になる。

最初に書いたコード

var number;

for (var i = 1; i <= 30; i++) {
  number = i;
  if (i % 3 == 0) {
    number = number + "あほ";
  } else if (i % 5 == 0) {
    number = number + "犬";
  }
  document.write(number + "<br>");
}

これで、実際に出たのはこちら。
1
2
3あほ
4
5犬
6あほ
7
8
9あほ
10犬
11
12あほ
13
14
15あほ
16
17
18あほ
19
20犬
21あほ
22
23
24あほ
25犬
26
27あほ
28
29
30あほ

一見できてるっぽいけど、3の倍数でもあり5の倍数でもある15と30に「あほ」としか表示されていません。
つまり、現時点では「3の倍数」であると判断されているということ。

var number;

for (var i = 1; i <= 30; i++) {
  number = i;
  if (i % 3 == 0) {
    number = number + "あほ"; //ここで終わっている
  } else if (i % 5 == 0) {
    number = number + "犬";
  }
  document.write(number + "<br>");
}

なぜこうなるのか?

if{...}else if{...}文は、複数ある{...}のうち、1つしか処理されない。
つまり、今回のコードでは、まず
if(i % 3 == 0){...}を処理して、trueだったら 「当てはまるやんけ〜!終わり!」 で、その下の処理は全く見ない。

ではどうしたらいいのか

答えは非常に簡単だった。
else ififに変えるだけ。

var number;

for (var i = 1; i <= 30; i++) {
  number = i;
  if (i % 3 == 0) {
    number = number + "あほ";
  }
  if (i % 5 == 0) { //ここをifにする
    number = number + "犬";
  }
  document.write(number + "<br>");
}

こうすると、ifの中身はとりあえず全部処理しようとするので、
一つ目の処理が当てはまっても、 「当てはまったで〜!ほな、次の条件は...おっ、これも当てはまる!」 という感じで、
当てはまるもの全ての処理をする。

今回の式で言うと、

var number;

for (var i = 1; i <= 30; i++) {
  number = i;
  if (i % 3 == 0) {
    number = number + "あほ"; //当てはまったで〜 → 「あほ」を出力
  }
  if (i % 5 == 0) { 
    number = number + "犬"; //当てはまったで〜 → 「犬」を出力
  }
  document.write(number + "<br>");
}

//2つにあてはまったら「あほ」「犬」の順番で出力される。

と言うこと。

if文は全部else ifで処理したことしかなかったので、勉強になりました。

2
1
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
2
1