Help us understand the problem. What is going on with this article?

CoffeeScript のアンドキュメントな記法

More than 5 years have passed since last update.

即時関数の引数に別名をつける

外部のスコープで宣言された変数を別名でスコープに取り入れる。

CoffeeScript
do ($ = jQuery) ->
  console.log $

コンパイルすると...

JavaScript
(function($) {
  return console.log($);
})(jQuery);

jQuery のプラグイン書くときとかに使う。

オブジェクトを作るショートハンド

変数名をキー名として取り入れる。

CoffeeScript
a = 3
b = true
c = 'bar'
console.log {a, b, c}   # { a: 3, b: true, c: 'bar' }

分解代入1で変数宣言

複数の変数を宣言する。

CoffeeScript
[ a, b, c ] = []

コンパイルすると...

JavaScript
var a, b, c, _ref;

_ref = [], a = _ref[0], b = _ref[1], c = _ref[2];

super を引数付きでコールする

super() ではなく super と書くことで引数を引き継いでコールしてくれる。

CoffeeScript
class Foo
  constructor: (@a) ->

class Bar extends Foo
  constructor: ->
    super

bar = new Bar 3
console.log bar.a  # => 3

便利な反面、super と書いた時点で継承元の関数が実行されることに気をつけなければならない。

CoffeeScript
class Foo
  func: ->
    console.log 'executed!!'
    'foo'

class Bar extends Foo
  func: ->
    @superFunc = super
    console.log @superFunc

bar = new Bar()
bar.func()  # => 'executed!!'
            # => 'foo'

このように super@superFunc に格納するつもりで書いたコードを実行すると、
super を実行した戻りが @superFunc に格納されることになる。

比較演算子

複数の条件をまとめて比較する。

CoffeeScript
a <= b < c

コンパイルすると...

JavaScript
(a <= b && b < c);

分解代入1とクラスの this 代入の合わせ技

CoffeeScript
class Foo
  constructor: ({@a})->

foo = new Foo {a: 3}
console.log foo.a   # 3

Array comprehensions とそのシュガー

配列を生成します。ここまではドキュメント通り。

CoffeeScript
countdown = (num for num in [10..1])

本末転倒気味だけど、括弧を書きたくない場合などは即時関数で書くことができる。

CoffeeScript
countdown = do -> num for num in [10..1]

引数の並置

CoffeeScript
# pattern1
a 1, 2, 3

# pattern2
a 1,
  2,
  3

# pattern3
a 1,
  2
  3

これらはコンパイルすると...

JavaScript
a(1, 2, 3);

pattern3 は使う気起きない。柔軟というよりは曖昧なコンパイラ。


  1. 分解代入については CoffeeScript - Destructuring Assignment - Qiita [キータ] を参照 

minodisk
冷やし中華はじめました
resily
OKR導入・運用改善コンサルティングと、自社開発のクラウドOKRツール『Resily』を展開するスタートアップ
https://resily.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away