CoffeeScriptの勉強 その2(構文)

Posted by Tatsuyano on Fri, Mar 8, 2013
In
Tags coffeescript

Hello World

$ emacs test.coffee

hello = ->
        console.log(“Hello World!”)

hello()

コンパイル coffee -> js。 test.jsというJsファイルが生成される

$ coffee -c test.coffee

生成したJsの実行

$ node test.js
Hello World!

生成されたJsの中身

(function() {
    var hello;
    hello = function() {
    return console.log("Hello World!");
 };
 hello();
}).call(this);

コンパイルせずに直接実行

$ coffee test.coffee
Hello World!

coffee <ファイル名> と入力するのが面倒なので、zshのaliasを設定する

emacs $HOME/.zshrc

alias -s coffee=coffee

source $HOME/.zshrc

今後は、ファイル名を入力するだけで実行される

$ ./test.coffee
Hello World!

オプション

  • -c (–compile) .coffee から .js にコンパイルします。
  • -b (–bare) 外側の (function(){ … }).call(this); を取り除きます。
  • -w (–watch) ソースファイルを監視して、ファイルが変更されるたびにコンパイルを実行します。

構文

  • var での変数宣言が不要
  • 関数の定義(function)の代わりに -> を使う
  • 式の終わりや行末にセミコロンを必ずしも置かなくてもよい
  • インデントでブロックを表現する
  • 引数を取る関数の場合、() を省略して書くこともできる

コメントアウト

# 1行コメント
# コンパイル時には消される

###
複数行コメント
コンパイル時にも残る
###

関数

-> を使って定義します。引数を取る場合は -> を (var1, var2) -> のようにして引数を並べます。
関数内の最後の値が自動的にreturnされます。

square = (x) -> x * x

コンパイル結果 ↓

square = function(x) {
  return x * x;
};

例) 引数がないので、()を省略

hello = -> “Hello World!”
hello()

if文

  • 複数行の場合

    fib = (n) ->
    if n < 2
     n
    else
     fib(n-1) + fib(n-2)
    

  • 一行の場合

    fib = (n) -> if n < 2 then n else fib(n-1) + fib(n-2)
    

変数展開

” “ でくくった文字列の中では #{変数名} で変数の値を埋め込むことができます。

name = “Nao”
console.log “My name is #{name}!”

演算子

|Coffee | Js |
|:------|:---|
| is    | ===|
| isnt  | !==|
| not   | !  |
| and   | && |
| or    | || |

参考サイト

以下のサイトを参考にさせていただきました。ありがとうございます!