読者です 読者をやめる 読者になる 読者になる

野次馬エンジニア道

野次馬な気持ちでプログラミングをあれこれと綴ります

CoffeeScriptでオブジェクト指向 - クラス定義と継承

以前JavaScriptに続いて js2coffeeで結果を見ながら文法から触れてみる。

変数の宣言と関数

  • セミコロン不要*1
  • varは書かない
  • curly braces の代わりにインデントで書く
  • functionの代わりに->
  • 関数名の後にカッコを書かずに引数を並べる
  • 任意の引数も渡せる
test = (arg...) ->
    console.log arg[0]
  • 関数の最後の値が戻り値となる

文字列の処理

  • 変数値から文字列への変換
test = (a,b) ->
    console.log "#{a},#{b}"
test 'a', 'b'
  • 複数行の文字列は"""で囲む

条件比較とfor文

  • ==!=がより厳密な比較===!===に変更される
  • ==!=isisntとも書ける
  • if notunlessと書ける *2
  • ifunless後置も可能
  • for文は
for i in [0..2]
    console.log i

存在確認演算子

  • if (typeof a !== "undefined" && a !== null )のようなチェックが
if a?
 console.log a

と簡潔に書ける*3

@エイリアス と =>

  • this@ で書ける
  • さらに=>を使うと、引数に関数を渡す際にvar this_ = this; のようにしなくても元のスコープのthisを参照可能
func -> 
    @method =>
        @methodImpl()

続いてクラス定義と継承

クラス定義

class Foo
    constructor : (name) ->
        @name = name
    greet : ->
        "hello my name is "+ @name 

my = new Foo("bar")
my.greet() # hello my name is bar

継承

class BaseClass 
    name : "BaseClass"
    constructor : ->
        console.log "constuructor: BaseClass"
    greet: ->
        "hello my name is "+ @name
        
class SubClass extends BaseClass
    name : "SubClass"
    consructor : ->
        super
        console.log "constuructor: " + @name

my = new SubClass() # constuructor: BaseClass
my.greet()  # "hello my name is SubClass"

ロジックを複数人で書いてメンテするときなどに向いているかもしれない。

*1:C/C++歴が長いのでセミコロン無しはなんか落ち着きません。。。

*2:英語の意味的にはイコールではないようですが。if not と unless の違い

*3:swiftでも同様の演算子がある模様