CoffeeScriptの書き方いろいろ
とりあえずちょっとした時間で思いついた分です。
お好みに合うかどうかは別として...
可変長引数呼び出し
# funcを呼び出したら、anotherFuncを引数そのままの状態で呼び出す func = (args...) -> anotherFunc args...
コストが気になるなら最後にreturnを置きましょう
func = (list) -> # 最後にリストを作ってしまうのがいやなら... e.hoge() for e in list betterFunc = (list) -> e.hoge() for e in list # こうすればいい return
いないプロトタイプだーれだ?
# 厳密には行儀悪いかも Function::bind ?= (context, baseArgs...) -> (args...) => @call context, baseArgs..., args...
配列のコピー
ary = [1..100] copied_array = [ary...]
値交換
[a, b] = [b, a]
変数名省略
{ hoge, fuga } = obj # { hoge : hoge, fuga : fuga } = obj func {hoge, fuga} # func { hoge : hoge, fuga : fuga }
リストに混ぜて引数にして呼び出し
a = 1 b = [1..10] c = 2 d = [3..10] # console.log(1, 1, 2, 3, 4, .., 10, 2, 3, 4, .., 10) console.log a,b..., c, d... console.log a,[b..., c, d...]...
お好きなだけ分配してください
[a, b..., c] = [d..., e, f..., g...] [[a, alpha], b..., c, {hoge, fuga}, { foo : bar, baz : boo}] = [d..., e, f..., g...]
足りないとどうなるんだろう?
lack = ([head, body..., tail]) -> console.log head, body, tail lack [1, 2, 3] # prints '1 [ 2 ] 3' lack [1, 2] # prints '1 [] 2' lack [1] # prints '1 [] undefined' lack [] # prints 'undefined [] undefined''
仮引数でも分配できるよ
func = ([first, mid..., last]) -> first + last console.log func [1..10] # prints '11' func = ({a, b}) = a + b console.log func a : 1, b : 2 # prints '3' # 文法としては成立するようです func = ({length}...) -> length # 下記コードとあわせると[3,2,1].lengthを返す console.log func 3,2,1 # prints '3' # だからこれもアリ func = ({0 : one, 1 : two, 2 : three}...) -> one * two * three console.log func 1,2,3 # prints '6'
グローバル関数の定義
@globalFunction = (x) -> x * x # スコープを分けたい場合は do => で do => scopedVariable = [1..4] @anotherGlobalFunction = -> console.log(scopedVariable)
関数を気軽に飾りましょう
$this = (fn) -> (args...) -> fn.call $(@), args... $(':input').each $this -> @val 'hello!'