CoffeeScriptはじめました
Railsアプリケーションを書くときに、JavaScriptを書くことがある場合だいたいCoffeeScriptを書くことになると思います。ご多分に漏れず僕もCoffeeScriptを書くことになります。
TypeScriptとかHaxeとか、altJS色々ありますけどRailsのエコシステムに端から組み込まれているCoffeeをわざわざ使わない理由はないよなって思います。開発しているときにコンパイルとか気にしなくて良いし。
インストールはこの辺参考にして、僕はUbuntuなのでさくっといれました。
Installing Node.js via package manager · joyent/node Wiki · GitHub
sudo apt-get update sudo apt-get install -y python-software-properties python g++ make sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update sudo apt-get install nodejs
nodeJSをさっくり入れて、npm install coffee-scriptするだけね。
ちなみに個人的にCoffee初めて良かったなって思ったのは、なんとなく「括弧のないLisp」ぽいところです。
zero = (f) -> (x) -> x add_1 = (n) -> (f) -> (x) -> f((n f) x) to_int = (c) -> ((c (x) -> x + 1) 0) console.log to_int add_1 add_1 zero
Coffeeのコードスタイルは詳しく知らないけど、lowerCamelCaseが本当はいいみたい。だけど@naoiwata師匠の教えによりsnake_caseで書いてみたりしている。まぁRails書いてるとsnake_caseの方が馴染みやすい気はするし、この言語がlowerCamelCaseってなんか芋っぽい気がするなーとか。
polarmobile/coffeescript-style-guide · GitHub
FizzBuzzなんかもこんな感じで
fizz_buzz = [1..100].map (n) -> if n%15 is 0 then "FizzBuzz" else if n%5 is 0 then "Buzz" else if n%3 is 0 then "Fizz" else n console.log fizz_buzz
あと、個人的に面白かったのはこれ。
hoge = "foo": -> console.log "hoge foo" "bar": -> console.log "hoge bar" hoge.foo() hoge.bar()
連想配列をすっと呼び出して、あたかも関数かのようにそのまま実行できるのステキじゃないですか?
これRubyだったらこう書く。
hoge = { foo: lambda {puts "hoge foo"}, bar: lambda {puts "hoge bar"} } hoge[:foo].call # hoge[:foo].() でも可 hoge[:bar].call
ちょっとRubyがこれだとダサい感じに見えるのは仕方ないんですかね…。
ちなみにGaucheならこんな感じ?
(define hoge '((foo . (^() (print "hoge foo"))) (bar . (^() (print "hoge bar"))))) (eval `(,(assq-ref hoge 'foo)) (interaction-environment)) (eval `(,(assq-ref hoge 'bar)) (interaction-environment))
んー?本当?分からないけど。
まぁそんな感じでちょっとJavaScript方面に対して苦手意識があったけど、少しずつ慣れていきたい所存。