CoffeeScriptでFizzBuzz書いた
開発したいサービスがあるので、CoffeeScriptを0からこつこつ勉強しています。
わたしのプログラミング歴は、2000年頃にMacromedia DirectorのLingoを少々書いていたのと、2004年頃に半年くらい付け焼刃でJavaScriptとPHPを終電まで書いていたことがあったけれど、文法は9割忘れたぐらいです。
というわけでお勉強がてら、FizzBuzz問題を解いてみました。ロジック考えて文法調べて一行ずつ心をこめて丁寧に作りました。難しかった・・・!
CoffeeScript で書いてみた
# numという配列に1〜100までの数字を入れる num = [1..100] # numの配列の数だけforループし、条件に応じてnumの値を入れ替える # iは配列の値、つまり1〜100 for i in num # []内はnumの添え字、0から始まるためiの値から-1して数字を揃える num[i-1] = "Fizz" if i % 3 is 0 # 1回目のループ時、上のコードは num[1] = Fizz if 1 % 3 is 0となる。 num[i-1] = "Buzz" if i % 5 is 0 num[i-1] = "FizzBuzz" if i % 3 is 0 and i % 5 is 0 # numの中身をアラート alert num
結果
CoffeeScriptの可読性のおかげで、見通しの良いコードになったと思います。過剰なコメントを除けば。
仕様通り動くコードは30分くらいで作れたけれども、一言一句なんでそうなるのかをちゃんと調査するのに+1時間くらいかかった感じ。調査の結果、わかったことは全部コメントに書いてあるとおりです。
ハマったポイントは2つ。
- for文の宣言に何をどう書いていいものかわからなかった
- iの「どっから出てきたのあなた感」、慣れない・・・
- 配列の添字が0から始まるのが謎だった
- i-1とかこのとってつけた感は、かっこ悪すぎやしないか
両方とも、プログラマの皆様的には超当たり前ポイントなのでしょうが、慣れてないといちいちつまづくなあ。書いてみるとよくわかる。あたしゃ何もわかっちゃいねえということが。
そして、上のコードをJSに変換したのがこちら
var i, num, _i, _j, _len, _results; num = (function() { _results = []; for (_i = 1; _i <= 100; _i++){ _results.push(_i); } return _results; }).apply(this); for (_j = 0, _len = num.length; _j < _len; _j++) { i = num[_j]; if (i % 3 === 0) { num[i - 1] = "Fizz"; } if (i % 5 === 0) { num[i - 1] = "Buzz"; } if (i % 3 === 0 && i % 5 === 0) { num[i - 1] = "FizzBuzz"; } } alert(num);
おおお、なんだか複雑になった!! 「for i in num」すら、ひーひー書いた私には、到底書けないコードが出来上がってます。
これを読んでから、CoffeeScriptを読み返すと、とってもシンプル。わたしにもCoffeeScriptなら書けるかもしれない、と思わせてくれるものがあるね。
先が長いけど、がんばろう。
関連記事
-
Webとかガジェットとか
母ちゃんがゲーム実況をはじめてみた理由
-
Webとかガジェットとか
レシート1枚10円で売れるONEアプリ、試してみた
-
Webとかガジェットとか
メモアプリ使い分け2018年版 #iOSメモ #Trello #Ulysses #NoteShelf2
-
Webとかガジェットとか
Google Home Mini を百均のスポンジホルダーで壁付けにしてみた
-
Webとかガジェットとか
iOS操作自動化アプリ「Workflow」で作った、Dropbox Cameraのレシピを共有します
-
Webとかガジェットとか
Pebble Time のおかげで、電話を逃さなくなった。買ってよかった。