CoffeeScriptでclassをファイル分割する方法


えとっ、えとっ

えーと、凡ミスしたくないから確認しとこ、として表題の語彙で検索したら、RequireJSの話とか出てきたのでぎょっとした。いや、そーゆー話じゃなくてだな。一番基本のやり方あるじゃんよ。分割した先にクラスを返す関数を書いて、ってやつ。たぶん、Javascriptでクラスを使うのは大変なので、なかなかそういう記事が書かれないのかも。

ってか、これで、いいんだよね? 心配になっちゃうよ。

というわけで、書いておきます。

下記例を実行すると、

terminal
[mogemoge coffeeshop]$ coffee mainfile.coffee
---outstatic
static
---outprivate
private
---outproperty
test
---utility
thanks for using
---util2
a ri ga to u!
[mogemoge coffeeshop]$

こうなります。ちゃんと動いて良かった。凝ったことをやったときは知りませぬ。

おねがい! かんすーのなかに挿れてっ!

というわけで、ついでにCoffeeScriptで使うメソッドとかのありがちなパターンを列挙しておきました。まっじめー。とは言え、privateメソッドとか入ってないな、とかまだまだあるので、それはぐぐってね。

mainfile.coffee
subfile = require('./subfile.coffee')

myclassinstance = new(subfile.myclass())

console.log '---outstatic'
subfile.myclass().outstatic()
console.log '---outprivate'
myclassinstance.outprivate()
console.log '---outproperty'
myclassinstance.outproperty()

my2ndclass = subfile.my2ndclass()

console.log '---utility'
my2ndclass.utility()
console.log '---util2'
my2ndclass.util2()
subfile.coffee
myclass = ->
  class myclass
    _privatevar = 'private'
    @staticvar: 'static'

    constructor: ->
      @instanceproperty = 'test'

    @outstatic: ->
      console.log @staticvar
    outprivate: ->
      console.log _privatevar
    outproperty: ->
      console.log @instanceproperty

module.exports.myclass = myclass

my2ndclass = ->
  class my2ndclass
    @utility: ->
      console.log 'thanks for using'
    @util2: ->
      console.log 'a ri ga to u!'

module.exports.my2ndclass = my2ndclass