FizzBuzzをWhileドにやってみた。

オヤジギャグを言っても問題ない年齢になってしまった事を謝罪します。

 

大変申し訳ございませんでした。

 

さてRubyを使ってFizz Buzzで使用したWhile分について自分なりに試して気づいた事をアウトプットします。

 

Fizz Buzzってなに?って調べたらウィキペディアに書いてありました。

詳しくはウィキペディアを参照してください。

 

今回は学習で行った内容でFizz Buzzについて掘り下げたい訳ではありません。

 

今回学習で出題された問題の条件としては以下

1. 1〜100までの数字をターミナルに出力してください。

2.「3の倍数」のときは数字の代わりに文字列でFizz

3.「5の倍数」のときは数字の代わりに文字列でBuzz

4.両方の倍数である「15の倍数」のときはFizzBuzzと出力してください。

 

まず学習で以上の条件を元にし作成した正解がこれ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
  def fizz_buzz
    num = 1
    while (num <= 100) do
      if (num % 3 == 0) && (num % 5 == 0)
        puts "FizzBuzz"
      elsif (num % 3) == 0
        puts "Fizz"
      elsif (num % 5) == 0
        puts "Buzz"
      else
        puts num
      end

      num = num + 1
    end
  end

  fizz_buzz

 

今回気になって調べたり、色々試したりした事がwhile文の範囲や成立する為の記述です。

 

while文はdoからendの処理を指定した条件式まで繰り返すという式です。

 

2行目のnum=1ですがこれはnum=0ではダメなのか?

 

num=0からにしてしまうとその後whileの範囲指定のnumに0が代入されてしまう。

( 0 <= 100 )となってしまうので1からではなく0からFizzBuzzってしまうので101回目のプロポーズカウントされてしまうので上にあげた1の条件不成立となりました。

 

次が14行目のnum = num + 1が4行目ではなくなぜ条件分岐処理後なのか?

 

ここがwhile文を理解を深める重要なポイントでした。

 

今回ポイントになる事がnumが100になるまで繰り返す。という事のなので

4行目にnum = num + 1を記述してしまうとnumが最初に2から始まってからif条件分岐が始まり足されてしまうという事です。ちなみにnum = num + 1を書いておかないと数が増えていかないので永遠と1の処理をくりかえしいずれ朽ちて灰になります。

 

1から数字が始まって数字がFizzBuzzなの?Fizzなの?Buzzなの?それ以外なの?の結果(値)を出力して次の数字にカウントを増やしてまたwhileの処理を100まで繰り返す。その為にnum = num + 1が最後に必要だったという訳です。

 

そんなの当たり前じゃん?って思うかもしれませんが、プログラマー初心者や未経験者人にとってはその当たり前が当たり前ではなく、それを説明したりアウトプットしている人がなぜかいないのでアウトプットしてみました。

 

実はいたらごめんなさい。