ToDoDoDo

WEBとクリエイティブな何かについて

CoffeeScriptでよりすっきりとコードを書くための小ネタをいくつか

f:id:eiji_sm:20130601153924p:plain

普段、JavaScriptをCoffeeScriptで書くことが多い僕ですが、
もっとすっきりコードを書きたいときの小ネタが他言語にあるのと同様に、
CoffeeScriptにもそういうものが存在します。
そういう小ネタの一部を書き留めておこうと思います。

Q1. 配列の要素に連続した無名のオブジェクトを定義したい時

JavaScript記述例

var sample;          
sample = [
  {
    id: 0,
    title: 'hello',
    body: '犬も歩けば棒に当たる'
  }, {
    id: 1,
    title: 'world',
    body: '井の中の蛙大海を知らず'
  }, {
    id: 2,
    title: 'hogehoge',
    body: '下手の考え休むに似たり'
  }
];


A1. CoffeeScript記述例

sample = [
  {
    id: 0
    title: 'hello'
    body: '犬も歩けば棒に当たる'
  }
  {
    id: 1
    title: 'world'
    body: '井の中の蛙大海を知らず'
  }
  {
    id: 2
    title: 'hogehoge'
    body: '下手の考え休むに似たり'
  }
]

省略したのは、変数宣言とカンマやセミコロンのみで、行数も多くなりがち。
そこで、次は行数を減らしてみる。


A2. CoffeeScript記述例

sample = [
    id: 0
    title: 'hello'
    body: '犬も歩けば棒に当たる'
  ,
    id: 1
    title: 'world'
    body: '井の中の蛙大海を知らず'
  ,
    id: 2
    title: 'hogehoge'
    body: '下手の考え休むに似たり'
]

インデントに注意する必要があるが、カンマでオブジェクトの区切りを示す。
これでわりとすっきり書ける。


Q2. 上記の1のような配列の要素などを、より簡単に代入したい時

A. 分割代入を用いる
CooffeeScriptでは以下の様な表記で分割代入を行うことが出来る。

[a, b, c] = sample
# a = sample[0], b = sample[1], c = sample[2]

これを利用して、配列や、オブジェクトの各要素を順に定義していく事もできる。
非同期通信でのレスポンスのJSONなどを、より短いコードで代入することが出来て非常に楽、かつわかりやすい。


Q3. aに値があれば、a、なければbを返したい(0を値に含む)

A. 以下のコードで実行できる

a ? b

また、aに値があれば、a、偽ならbを返したい(0を含まない)場合は、

a || b

これはJavaScriptでも使える同じ表記


Q4. クラスにおける、publicなメンバ、privateなメンバなどの定義の仕方

A. 以下のコードで(ry

class Sample
  # -- PRIVATE STATIC MEMBER -- #
  _privateStaticMember = ''

  # -- PRIVATE STATIC METHOD -- #
  _privateStaticMethod = ->
    false

  # -- PUBLIC STATIC MEMBER -- #
  publicStaticMember = ''

  # -- PUBLIC STATIC METHOD -- #
  publicStaticMethod = ->
    true

  # -- CONSTRUCTOR -- #
  constructor: (arg)->
    # -- PRIVATE INSTANCE MEMBER -- #
    _privateInstanceMember = arg

    # -- PRIVATE INSTANCE METHOD -- #
    _privateInstanceMethod = ->
      arg

    # -- PUBLIC INSTANCE MEMBER -- #
    @publicInstanceMember = arg

    # -- PUBLIC INSTANCE METHOD -- #
    @publicInstanceMember = ->
      arg

大体こんな感じ、うん、まぁ初見さんお断りな非常にキモい書き方ではあると思う