atom.ioで最初から使えるスニペット集（CoffeeScript編)

atomエディタは最初からスニペットが使えます。
cmd+,でsettingsを開いて左サイドバーの検索窓に[language]と入力すると、言語別に登録済のスニペットが見られます。
ここではCoffeeScriptのスニペットをまとめてみたいと思います。

# 基本

## Subheader
`/3`  ←このキーを入力した後でTabキーを押すと  
↓この様に変換されます。(以下も同じ)

```coffeescript
#
# -------------------------
```
>コメントでサブヘッダーを挿入する用？


## Key-value pair
`:`

```coffeescript
"key": value
```
>{:と入力した後でTabると幸せになれるかも。
ちなみにTabを押すたびにkey(""込み)-key(""内部)-valueと選択範囲を移動できます。

## require
`req`

```coffeescript
sys = require "sys"
```
>node.jsではrequireはよく使うので必修。


## Function
`fun`

```coffeescript
(args) ->
  # body...
```

## Function (bound)
`bfun`

```coffeescript
(args) =>
  # body...

```
>### 注記
>[CoffeeScriptでは太い矢印 「=>」 も関数定義に使うことができ、その場に this を束縛できる。この機能は、PrototypeやjQueryのようなコールバック関数を用いるライブラリで、eachのようなイテレータやイベントハンドラを渡すとき便利である。太い矢印「=>」で定義された関数は、それが定義された場所の this のプロパティを参照できる。](http://memo.sappari.org/coffeescript/coffeescript-langref)

>>CoffeeScript 言語リファレンス - sappari wiki http://memo.sappari.org/coffeescript/coffeescript-langref


## Class
`cla`

```coffeescript
class ClassName extends Ancestor

  constructor: (args) ->
    # body...
```



# 制御構文

## IF
`if`

```coffeescript
if condition
  # body...
```

## If .. Else
`ife`

```coffeescript
if condition
  # body...
else
  # body...
```

## Else if
`elif`

```coffeescript
else if condition
  # body...
```

## Ternary If (三項演算子)
`ifte`

```coffeescript
if condition then value else other
```

>### 注記

```coffeescript
if a then val = b else val = c
```

という式は

```coffeescript
val = if a then b else c
```

と同義である。  
しかしCoffeeScriptで

```coffeescript:coffee
val = a ? b : c
```

と書いてしまうと

```js:js
val = typeof a !== "undefined" && a !== null ? a : {
  b: c
};
```

上記のようにコンパイルされてしまうので注意。



## Unless
`unl`

```coffeescript
action unless condition
```

>### 注記
>Unlessは以下の様なjsにコンパイルされる。
>conditionが偽ならactionを読み込む。

```coffee:coffee
val = 1 unless condition

```

```js:js
if (!condition) {
  val = 1;
}
```

## Comprehension
`fora`

```coffee
for name in array
  # body...
```

>for in は配列を回す


## comprehension
`foro`

```coffeescript
for key, value of Object
  # body...
```

>for ofは連想配列を回す

## Range comprehension (inclusive)
`forr`

```coffeescript
for name in [start..finish] by step
  # body...
```
>startが1、finishが10とした場合、1-10のRangeになります。

## Range comprehension (exclusive)
`forrex`

```coffeescript
for name in [start...finish] by step
  # body...
```
>startが1、finishが10とした場合、1-9のRangeになります。

## Switch
`swi`

```coffeescript
switch object
  when value
    # body...
```

>注記
CoffeeScriptのSwitchはbreakが不要です。
thenを使えば一行で条件と処理を書けます。
またdefaultのかわりにelseを使います。

```coffeescript:coffee
switch object
  when 1 then a()
  when 2
    b()
  else
    c()
```

```js:js
switch (object) {
  case 1:
    a();
    break;
  case 2:
    b();
    break;
  default:
    c();
}
```

# Array(配列)

## Point array
`pt`

```coffeescript
[, ]
```

## Range array
`ra`

```coffeescript
[[, ], [, ]]
```

---

# コンソール出力

## log
`log`

```coffeescript
console.log
```

## error
`error`

```coffeescript
console.error
```

## warn
`warn`

```coffeescript
console.warn
```

>errorやwarnは知りませんでした。そんなのあるんですね。
######[consoleオブジェクトが持つlog以外の便利メソッド18](http://blog.asial.co.jp/1036)
---

# [Mocha](http://visionmedia.github.io/mocha/)用関数

## Describe
`de`

```coffeescript
describe "description", ->
  body
```

## Expectation
`ex`

```coffeescript
expect().to
```

## It block
`it`

```coffeescript
it "", ->

```









---
#[Jasmine](http://jasmine.github.io/)用

## After each
`af`

```coffeescript
afterEach ->

```


## Before each
`be`

```coffeescript
beforeEach ->

```

## Create Jasmine spy
`spy`

```coffeescript
jasmine.createSpy("description")
```


CoffeeScriptの復習も兼ねて書いてみましたが、間違いがあったらご指摘お願いします。

関連
[atomをインストールした状態で何ができるのか試してみた - Qiita](http://qiita.com/_wats/items/44d86a7a642d34faee06)