RubyでFizzBuzz問題を書こう(改良版)


はじめに

この記事は
RubyでFizzBuzz問題のコードを書く(初心者用)
Ruby の while の使い道
の記事を参考にした、初歩的なプログラミングのアウトプットを目的とした記事です。
見辛い点、分かりづらい点などあったらご指摘いただけると幸いです。

FizzBuzz問題について

FizzBuzz問題は、プログラミングの初歩的な問題です。内容は
"1~100の数字を表示させる"
ただしこの時、
"3の倍数の数字の代わりにFizz"
"5の倍数の数字の代わりにBuzz"
"3と5の倍数の数字の代わりにFizzBuzz"
と表示させる。
と言う問題です。

方針

まず1~100の数字を表示させることから考えます。次に表示させる元の数字によって処理を変えていきましょう。

ここからが参考元と異なる部分です。
Ruby の while の使い道
を参照していただければ分かりやすいのですが、

Ruby では while の出番は少ない,と言い切ってよいと思います。

値をすこしずつ変えてループを回すような場合,たいがいそれに適したメソッドがあります.

と言うことで、ここでは、uptoメソッドを利用して1~100の数字を表示させることを考えます。

1~100の数字の表示


1.upto(100) do |count|
  puts count
end

この記述で、1から100までの数字を表示させることができるようになります。また、このメソッド内ではcountと言う変数に1から100までの値がそれぞれ用意されます。countの値に応じて、FizzやBuzzと言った文字を表示させましょう。

条件分岐

参考元の説明も含めると分かりやすいかと思います。
RubyでFizzBuzz問題を書こう(初心者用)
表示を変更する条件について、最も縛りがきついのは15の倍数についてです。数学の集合の分野で扱うべん図を考えていただければ分かりやすいです。15の倍数は、他2つの条件を常に満たしているのです。すなわち、15の倍数であると言うことは、3の倍数であることも示し、同時に5の倍数であることも示します。
Rubyのプログラムは上に記述されているものから読み込まれます。つまり題意を満たすためには、countが15の倍数の場合の処理について先に記述することが重要と言えます。それに留意したプログラミングを以下に示すと、


if count % 15 == 0
  puts "FizzBuzz"
elsif count % 5 == 0
  puts "Buzz"
elsif count % 3 == 0
  puts "Fizz"
else
  puts count
end

となります。

感想・まとめ

1~100の数字の表示と条件分岐をまとめると、コードは


1.upto(100) do |count|
  if count % 15 == 0
    puts "FizzBuzz"
  elsif count % 5 == 0
    puts "Buzz"
  elsif count % 3 == 0
    puts "Fizz"
  else
    puts count
  end
end

となります。while文を使っているときより、何がしたいか分かりやすいコードになったのではないかと思います。

自分は初心者ですのが、万人にとって分かりやすい表現を考えながらコードを書いていったつもりです。分かりにくい表現があったら申し訳ありません。この記事が初心者の方の少しの助けにでもなれば幸いです。