CoffeeScriptでクラスのプライベートメンバを作るのに挫折した話と妥協案
JS書くのも疲れてきたので、CoffeeScriptを触っていたんですが、クラスを使えると聞いて試してみて沼にはまったお話し。
まず試してみたクラスが以下のもの
class BadPractice # static @public_static_var = 'public_static_var' private_static_var = 'private_static_var' @public_static_func = -> console.log 'public_static_func' private_static_func = -> console.log 'private_static_func' # prototype public_prototype_var: 'public_prototype_var' public_prototype_func: -> console.log 'public_prototype_func' constructor: (this_is_also_private_var)-> # instance @public_instance_var = 'public_instance_var' private_instance_var = 'private_instance_var' @public_instance_func = -> console.log 'public_instance_func' private_instance_func = -> console.log 'private_instance_func'
こんなもの使えたもんじゃなかった。
具体的に言うと、staticメンバが相互に呼び出せなかったり、プロトタイプメソッドから、プライベートなインスタンス変数を呼び出せなかったり、、、死んじゃう。
なので、クラスの素晴らしい機能である隠匿というものを捨てて、全てパブリックで定義してみた。
class GoodPractice # class @class_var = 'class_var' @class_func = => console.log 'class_func' console.log "class_func can access #{@class_var}" # instance constructor: (@instance_var) -> instance_func: -> console.log 'instance_func' console.log "instance_func can access #{@instance_var}" console.log "instance_func can access #{GoodPractice.class_var}"
これで沼からは脱出したが、なんだかなあ。。。
だれかよい方法を教えてください。