ハイスペック発達障害への道

世の中の発達障害の方々が活躍できる世の中を目指して、まずは自分が頑張ります。

2018年7月2日のプログラミング修練記

JavaScriptを簡単に書けてしまうもの。CSSで言うSCSSのようなものか。

sudo npm install -g coffeescript

上記のコードをプロンプトで叩けばインストールができる。現バージョンではcoffee-scriptではなく、ハイフン抜きのcoffeescriptであることに注意。

バージョン確認は以下の通り。

coffee -v

CoffeeScriptで「Heelo, World!」。

class HelloWorld
  hello: (arg) ->
    console.log 'Hello, World!'

hw = new HelloWorld
hw.hello()

Object.prototype.p2 = "v2"
obj = new Object
obj.p1 = "v1"

CoffeeScriptで、上のようなオブジェクトを定義していたとする。

for name, value of obj
  console.log "#{name}: #{value}"

上の出力結果は次の通り。

p1: v1
p2: v2

for own name, value of obj
  console.log "#{name}: #{value}"

ownというキーワードを入れた場合の出力結果は次の通り。prototypeの部分は無視されているのがお分かりいただけるかと思う。

p1: v1

dog1 =
  name: "まだない"
  speak: ->
    console.log "A: 我が輩は犬である。名前は#{@name}。"
    speak_speak= ->
      console.log "B: 我が輩は犬である。名前は#{@name}。"
    speak_speak()

dog1.speak()

この場合、結果は以下のようになる。

A: 我が輩は犬である。名前はまだない。
B: 我が輩は犬である。名前はundefined。

こうなってしまうのは、thisオブジェクトがspeak_speakに引き継がれていないためである。

そこで、以下のように->=>に書き換えると、thisが引き継がれるようになり、期待通りに動作する。それだけCoffeeScriptは便利である。

dog2 =
  name: "まだない"
  speak: ->
    console.log "A: 我が輩は犬である。名前は#{@name}。"
    speak_speak= =>
      console.log "B: 我が輩は犬である。名前は#{@name}。"
    speak_speak()

dog2.speak()
A: 我が輩は犬である。名前はまだない。
B: 我が輩は犬である。名前はまだない。