新言語を学ぶ時の3つのポイント~見習いPGのメモ~を読んで、
fizzbuzzは新しいプログラミング言語の入門に最適だと思ったという話。
fizzbuzzとは
fizzbuzzとは、数字を使った言葉遊びです。
日本では世界のナベアツ(桂三度)さんのネタでも有名な、
「実数を読み上げていき、決められたタイミングで違うことをする」やつです。
それをプログラムの設問にすると以下のようになります。
1から100(あるいは任意の実数)までの各実数値をひとつずつ表示するプログラムを作成せよ。
ただし、数値が3の倍数の場合は数値の代わりに"fizz"、5の倍数の場合は"buzz"、
3の倍数かつ5の倍数の場合は"fizzbuzz"と表示させること。
処理のアルゴリズムについては解説を省きます。
プログラミング自体の初学者におかれましては、
「どう処理すればこれが実現できるのか?」を考えるのも
プログラミングの工程のひとつですので、自分で考えてみるのもいいかもです。
なぜfizzbuzzが最適か
今までは特に深い理由はなく、以下の翻訳記事を読んでから、
新しい言語を学ぶ時はまずfizzbuzzを書こう、と思って実践してました。
どうしてプログラマに…プログラムが書けないのか?
その後、冒頭で取り上げた記事を読んでいるうちに、
fizzbuzzは以下のような通常のプログラミングで頻繁に使う要素を
最低限含んでいる簡潔なプログラムなんだなーと思いました。
- 数列(配列、リストなど)の生成とその扱い
- 画面表示(標準出力、ウィンドウ、アラートなど)
- ループ
- 条件分岐
また同時にこれらの書き方には
言語による違いが如実に現れていたり、お作法が大きく違っていたりします。
そのため、言語の習熟度によってソースの書き方にも違いが生まれ、
プログラマ業務でよくある以下の作業についても、学ぶことができます。
- コードの簡素化
- コードの効率化
さらに、上級fizzbuzzerにいたっては、
処理がシンプルでコードがいかようにも書けることを活かし、
設問に更なる枷を加えてfizzbuzzを書くチャレンジを行う人もいます。
- 1行で書いてみる(ワンライナー)
- 不適切に書いてみる
たとえばこんな感じ
以下は自分で書いてみた例です。参考程度にどうぞ。
<?php
for ($i = 1; $i <= 100; $i++) {
if ($i % 15 == 0) {
echo "fizzbuzz";
} elseif ($i % 5 == 0) {
echo "buzz";
} elseif ($i % 3 == 0) {
echo "fizz";
} else {
echo $i;
}
echo "\n";
}
(1..100).each do |n|
puts case 0
when n % 15 then :fizzbuzz
when n % 5 then :buzz
when n % 3 then :fizz
else n
end
end
for i in range(1, 101):
if i % 15 == 0:
print "fizzbuzz"
elif i % 5 == 0:
print "buzz"
elif i % 3 == 0:
print "fizz"
else:
print i
for i in [1 .. 100]
fizz = i % 3 == 0
buzz = i % 5 == 0
if fizz and buzz
console.log 'fizzbuzz'
else if buzz
console.log 'buzz'
else if fizz
console.log 'fizz'
else
console.log i
まとめ
これからもfizzbuzzでプログラミング言語の学習を楽しんでいこうと思います。