Nimrod Advent Calendar の 4日目を担当している、@takano32 a.k.a. TAKANO Mitsuhiro です。3日目の記事は @esehara さんの オフサイドルールこそが正義である です。ぜひ、こちらもご覧ください。
今日はサンプルのプログラムとして有名な FizzBuzz をNimrod で書いてみたときのことを紹介したいと思います。
まず、FizzBuzz というのは
プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は 「Fizz」(Bizz Buzz の場合は 「Bizz」)、5で割り切れる場合は 「Buzz」、両者で割り切れる場合は 「Fizz Buzz」 (Bizz Buzz の場合は 「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。
Wikipediaより引用
というルールのゲームです。これをプログラムで出力します。私がはじめに Nimrod で書いた FizzBuzz はこんなものでした。そして、 exampels のひとつとして取り込んでもらうために pull request しました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Fizz Buzz program | |
var f = "Fizz" | |
var b = "Buzz" | |
for i in 1..100: | |
if i mod 15 == 0: | |
echo f & b | |
continue | |
if i mod 5 == 0: | |
echo b | |
continue | |
if i mod 3 == 0: | |
echo f | |
continue | |
echo i |
Commit 0398a3c616d3de11f779ac36c3b0ef957052a814 to hametsu/Nimrod - GitHub
このプログラムにはいくつか問題がありました。それを Araq はとても親切に指摘してくれています。
Use 'elif' instead of 'continue'. Use 'echo a, b' instead of 'echo a & b'. Use 'const' instead of 'var'. Sorry for the nitpicking, but people like examples to be idiomatic nimrod code ;-).日本語にすると以下のようなかんじでしょうか。
'continue' の代わりに 'elif' を使って、'echo a & b' の代わりには 'echo a, b' を使おう。あと、'var' の代わりに(変化しない変数なのだから)'const' を使うといいよ。 examples は多くの人が Nimrod の理想的なコードとして参考にするので細かい指摘ばかりになっちゃった(^−^)とても親切に細かいところまでレビューしていただきました。その後、数度のやり取りを経て、以下のようなコードとなりました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Fizz Buzz program | |
const f = "Fizz" | |
const b = "Buzz" | |
for i in 1..100: | |
if i mod 15 == 0: | |
echo f, b | |
elif i mod 5 == 0: | |
echo b | |
elif i mod 3 == 0: | |
echo f | |
else: | |
echo i |
このコードは取り込まれ、現在、Nimrodのexamples以下にあります!みなさんもぜひexamplesになりそうなコードなどを書いてコミットしてみてはいかがでしょう。
5日目の記事はsyanbi a.k.a. @xga さんの記事になります。お楽しみに!
0 件のコメント:
コメントを投稿