【C#】FizzBuzz問題を考えてみました。
2019-10-10
2020-02-28
![](https://i0.wp.com/www.soonlabo.com/wp-content/uploads/2019/10/キャプチャ.png?fit=389%2C141&ssl=1)
有名なFizzBuzz問題を考えてみました。
■ルール
・1から100まで表示
・3で割り切れる数字は『Fizz』と表示
・5で割り切れる数字は『Buzz』と表示
・3でも5でも割り切れる数字は『FizzBuzz』と表示
今回は最近仕事でよく使っているC#で書いてみました。
とりあえず動くことを優先させて何も考えず書いたら以下のようになりました。
using System; namespace FizzBuzz { class Program { static void Main(string[] args) { for (int i = 1; i <= 100; i++) { if (i % 3 == 0 && i % 5 == 0) { Console.WriteLine("FizzBuzz"); } else if (i % 3 == 0) { Console.WriteLine("Fizz"); } else if (i % 5 == 0) { Console.WriteLine("Buzz"); } else { Console.WriteLine(i); } } } } }
実行結果
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
・・・(省略)
実行結果も問題なく動いています。おそらくFizzBuzz問題をググってみたらこんな感じのコードになるのではないでしょうか?
しかし上記コードはまだリファクタリングの余地があると思います。ということでここからさらに改良してみました。
リファクタリング
改良点
・ロジックはメソッドに切り出す
・for文よりforeachにしたほうが1から100までというのが分かりやすい気がした(個人の好み)
・変数名を修正(i→currentNumなど)
・メソッドコメントを記載
ということで以下のようにリファクタリングをしてみました。
using System; using System.Linq; namespace FizzBuzz { class Program { static void Main(string[] args) { foreach (int currentNum in Enumerable.Range(1,100)) { if (FizzBuzz(currentNum)) { ConsoleDisplay("FizzBuzz"); } else if (Fizz(currentNum)) { ConsoleDisplay("Fizz"); } else if (Buzz(currentNum)) { ConsoleDisplay("Buzz"); } else { ConsoleDisplay(currentNum.ToString()); } } } // 3で割り切れるか判定 private static bool Fizz(int currentNum) { return currentNum % 3 == 0; } // 5で割り切れるか判定 private static bool Buzz(int currentNum) { return currentNum % 5 == 0; } // 15で割り切れるか判定 private static bool FizzBuzz(int currentNum) { return currentNum % 15 == 0; } // コンソールに表示 private static void ConsoleDisplay(string value) { Console.WriteLine(value); } } }
今回は書いていませんが、テストコードも書きやすくなったと思います。
ただFizzBuzzくらいのロジックであれば、リファクタリング前の方が見やすいかもしれないですね…。でももし仕事で書くとしたら先のことを考えてリファクタリング後のように書くと思います。
関連記事
[初めて]CentOS7にPHP7.2をインストールしてみる
iPhoneでプロファイルを削除する方法
VirtualBoxをインストールしてCentOS7環境を構築・後編
本を選ぶ時に気をつけていること
未経験プログラマー物語【第四章 アンケートサイト開発編③】タイムリミットは22時
未経験プログラマー物語【第一章 コラム】未経験可とは
『お金のこと何もわからないままフリーランスになっちゃいましたが税金で損しない方法を教えてください!』を読みました。
【Java】フィボナッチ数列を考える①
未経験プログラマー物語【第三章 テスター編②】テストデータでCSVファイルを作る
未経験プログラマー物語【第二章 研修編①】はじまりはHTML