ã¤ãã³ãé§ååã®ããã°ã©ã ããããã«ä½ã
ãJavaScriptã®ããã°ã©ã ã¯ãã¤ãã³ãé§ååã§éåæãªæ§é ãåºæ¬ã¨ãªãã¾ããä»ã®ããã°ã©ãã³ã°è¨èªã§ä¸è¬çãªãåæåãã®é¢æ°ã§ã¯ãä¾ãã°ãããã¯ã¼ã¯çµç±ã§ãã¼ã¿ãèªã¿è¾¼ãå ´åããã¼ã¿ãèªã¿è¾¼ã颿°ãå®è¡ããã¨ãã®èªã¿è¾¼ã¿ãå®äºããã¾ã§ããã°ã©ã ã®å®è¡ã¯æ¢ã¾ã£ãã¾ã¾ã«ãªãã¾ãã
ãããã«å¯¾ãã¦ããéåæåãã®é¢æ°ã使ãã¨ãã¼ã¿ã®èªã¿è¾¼ã¿ãå®äºããã¾ã§ä»ã®å¦çãå®è¡ã§ããèªã¿è¾¼ã¿ãå®äºããå¾ã§ç¹å®ã®é¢æ°ãå¼ã³åºãã¦ããããã¨ãã§ãã¾ãã身è¿ãªä¾ã«ä¾ããã¨ãã¡ã¼ã«ãéä¿¡ãã¦ç¸æããã®è¿ä¿¡ãæ¥ãã¾ã§ä½ãããã«å¾ ã¤ã®ãåæå颿°ã ã¨ããã°ãéåæå颿°ã¯è¿ä¿¡ãå¾ ã¤éã«ä»ã®ä»äºãããªããã¨ãã§ãã¾ãã
ãWebã¢ããªã±ã¼ã·ã§ã³ã¯ãããã¯ã¼ã¯éä¿¡é¨åã«æãæéããããå ´åãå¤ãããããã®å¾ ã¡æéã«ä»ã®å¦çãããªãã°ããã å¾ ã£ã¦ãããããé¥ãã«å¹çããå¤ãã®å¦çãããªããã¨ãã§ãã¾ããNode.jsã®æ¨æºAPIã¯å ¥åºåã«é¢ããå¤ãã®é¢æ°ãéåæåããã¦ãããå¹çè¯ãå¦çãè¡ãããã°ã©ã ãç°¡åã«æ¸ããããã«ãªã£ã¦ãã¾ãããã ãéåæå颿°ãå¤ç¨ããã¨ããã°ã©ã ã®æµããè¤éã«ãªããã½ã¼ã¹ã³ã¼ããèªã¿ã¥ãããªãã¨ããæ¬ ç¹ãããã¾ãã
fs = require 'fs' data = fs.readFileSync '/etc/hosts', 'utf8' console.log data
fs = require 'fs'
fs.readFile '/etc/hosts', 'utf8', (err, data) ->
#ï¼2ï¼
throw err if err
console.log data
#ï¼1ï¼
ããªã¹ã1ã®ããã°ã©ã ã¯å¾æ¥éãä¸ããä¸ã¸ã¨å¦çãé²ã¿ãfs.readFileSync()ã§/etc/hostsã¨ãããã¡ã¤ã«ã®èªã¿è¾¼ã¿ãå®äºããã¾ã§ããã°ã©ã ã¯æ¬¡ã®è¡ã«ã¯é²ã¿ã¾ããã䏿¹ããªã¹ã2ã®ããã°ã©ã ã§ã¯ãèªã¿è¾¼ã¿ãå®äºããæã«å®è¡ãã颿°ããfs.readFile()ã®ç¬¬3弿°ã«æå®ãã¦ãã¾ãããã®ããã«å¾ããå®è¡ãã¦ããããã弿°ã¨ãã¦æ¸¡ã颿°ã®ãã¨ãã³ã¼ã«ããã¯é¢æ°ã¨å¼ã³ã¾ãããªã¹ã2ã§ã¯ã/etc/hostsãã¡ã¤ã«ã®èªã¿è¾¼ã¿ä¸ãããã°ã©ã æ¬çã®å¦çã¯æ¢ã¾ããã«å ã«ï¼1ï¼ã®é¨åãå®è¡ããããã¡ã¤ã«ã®èªã¿è¾¼ã¿ãå®äºããå¾ã§ï¼2ï¼ã®é¨åãå®è¡ããã¾ãã
ããªã¹ã2ã§fs.readFile()ãå¼ãã§ããï¼2ï¼ã®é¨åãã©ã®ãããå¾ã«å®è¡ããããã¯ããã°ã©ã ãå®éã«å®è¡ãããã¾ã§ãããã¾ããããã®ä¾ã®ããã«åç´ãªããã°ã©ã ãªãã°ããã§ãããè¤éãªããã°ã©ã ã«ãªãã«ã¤ããã³ã¼ã«ããã¯é¢æ°ã ãã§ãã¹ã¦ã®éåæå¦çãè¡ãã®ã¯å¤§å¤ãªä½æ¥ã«ãªã£ã¦ããã¾ããããã§è§£æ±ºçã®1ã¤ã¨ãã¦ç»å ´ããã®ãEventEmitterã§ãã
EventEmitter
ãNode.jsã«ã¯EventEmitterã¨ããã¤ãã³ãéç¥ç¨ã®ã¯ã©ã¹ãæ¨æºã§ç¨æããã¦ãã¾ããEventEmitterã使ãã¨ãã½ã¼ã¹ã³ã¼ãä¸ã§ãäºãé¢ããç®æã«ããã³ã¼ã«ããã¯é¢æ°ãå®è¡ã§ãã¾ãããã®éãã¤ãã³ãåãæãããã¨ãã¦å®è¡å¯¾è±¡ã®ã³ã¼ã«ããã¯é¢æ°ãè¦ã¤ãã¾ããããã§ã®ã¤ãã³ãåã¨ã¯ãä¾ãã¦è¨ãã¨ã¡ã¼ã«ã¢ãã¬ã¹ã®ãããªãã®ã¨èãã¦ãã ããããããããç¹å®ã®ã¤ãã³ãåãã¤ã¾ãã¡ã¼ã«ã¢ãã¬ã¹ãä½ã£ã¦ããããããç¸æã«ç¥ããããã¨ã§ç¸æã¯ã¡ã¼ã«ã¢ãã¬ã¹ãæãããã«ã¡ãã»ã¼ã¸ãéãã¾ããEventEmitterã¯Node.jsã«ãããéµä¾¿ã·ã¹ãã ã®ãããªãã®ã§ãå¤ãã®ãµã¼ããã¼ãã£ã®ã©ã¤ãã©ãªãEventEmitterã使ã£ã¦ãã¾ãã
ãEventEmitterã¯ãªã¹ã3ã®ããã«ä½¿ããã¨ãã§ãã¾ãã
{EventEmitter} = require 'events'
# ä¸ã®è¡ã¯ EventEmitter = require('events').EventEmitter ã¨åç
emitter = new EventEmitter
emitter.on 'arrive', (where) ->
console.log "#{where}ã«å°çãã¾ãã"
emitter.emit 'arrive', 'å®¶'
å®¶ã«å°çãã¾ãã
ãããã§ã¯ãã¾ãemitter.on(ã¤ãã³ãå, ã³ã¼ã«ããã¯é¢æ°)ãå¼ã¶ãã¨ã§ã³ã¼ã«ããã¯é¢æ°ãã¤ãã³ããªã¹ãã¨ãã¦ç»é²ãã¦ãã¾ããã¤ãã³ããªã¹ãã¨ã¯ãç¹å®ã®ã¤ãã³ããèµ·ããæã®éç¥å ã®ãã¨ã§ããããã¦emitter.emit(ã¤ãã³ãå, 弿°1, 弿°2, ...)ã§ã¤ãã³ããçºè¡ããã¨ãã¤ãã³ããªã¹ãã§ããã³ã¼ã«ããã¯é¢æ°ãå®è¡ããã¾ããemit()ã®ç¬¬2弿°ä»¥éã¯ã³ã¼ã«ããã¯é¢æ°ã«ãã®ã¾ã¾æ¸¡ããã¾ãã
ã1ã¤ã®ãã¡ã¤ã«å ã ãã§EventEmitterã使ãåã«ã¯ãã®ãããªä½¿ãæ¹ã§ãæ§ãã¾ããããå¤§è¦æ¨¡ãªããã°ã©ã ãå¤é¨ã«å ¬éããã©ã¤ãã©ãªãä½ãã¨ãã¯EventEmitterãç¶æ¿ããã¯ã©ã¹ãä½ãã¨ããã§ããããEventEmitterãç¶æ¿ããã¯ã©ã¹ã¯EventEmitterã®ã¡ã½ããããã¹ã¦æã¡ã¾ãã
{EventEmitter} = require 'events'
# EventEmitterãç¶æ¿ããMyTimerã¯ã©ã¹ãå®ç¾©ãã
class MyTimer extends EventEmitter
trigger: ->
# alarmã¤ãã³ããçºè¡ãã
this.emit 'alarm', 'MyTimer'
# MyTimerã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãä½ã
timer = new MyTimer
# alarmã¤ãã³ããçºè¡ãããæã«å®è¡ããã³ã¼ã«ããã¯é¢æ°ãç»é²
timer.on 'alarm', (origin) ->
console.log "alarm received from #{origin}"
timer.trigger()
alarm received from MyTimer
ããªã¹ã4ã®ããã«ã¯ã©ã¹ãä½ã£ãããMyTimerã¯ã©ã¹ãå¤é¨ããrequire()çµç±ã§ä½¿ããããã«ãã¦ããã¾ããããEventEmitterã¯æ¨æºAPIã®ããä¸è¨ã®ãããªä½¿ãæ¹ãåºãèªç¥ããã¦ãããä»äººããè¦ã¦ãä½¿ç¨æ¹æ³ãããããããã¨ããå©ç¹ãããã¾ãã
EventEmitterã®ä¸»ãªã¡ã½ãã
emitter.addListener(event, listener) emitter.on(event, listener)
ãeventãçºè¡ãããæã«é¢æ°listenerãå®è¡ããããã¤ãã³ããªã¹ãã¨ãã¦ç»é²ãã¾ããonã¨ãã颿°åã§ã使ããã¨ãã§ãã¾ãã
emitter.once(event, listener)
ãeventãçºè¡ãããæã«1度ã ãå®è¡ããã颿°listenerãç»é²ãã¾ãã2度ç®ä»¥éã®eventã«ã¯åå¿ãã¾ããã
emitter.emit(event, [arg1], [arg2], [...])
ãã¤ãã³ããçºè¡ãã¾ããeventã§ã¤ãã³ãåãæå®ãã¾ãããã®ã¤ãã³ãã«ã¤ãã¦ç»é²ããããªã¹ãããã¹ã¦å®è¡ããã¾ãã第2弿°ä»¥éï¼ä»»æï¼ãæå®ãããå ´åã¯ãã¤ãã³ããªã¹ãã«å¼æ°ã¨ãã¦ãã®ã¾ã¾æ¸¡ããã¾ãã
emitter.removeListener(event, listener)
ãç»é²ããã¤ãã³ããªã¹ããåé¤ãã¾ãã
emitter.removeAllListeners([event])
ããã¹ã¦ã®ã¤ãã³ããªã¹ããåé¤ãã¾ããeventï¼ä»»æï¼ãæå®ãããå ´åã¯ããã®ã¤ãã³ãã«ã¤ãã¦ç»é²ããããªã¹ãã ããåé¤ãã¾ãã
EventEmitter2
ãEventEmitterã®æ©è½ãæ¡å¼µããEventEmitter2ï¼MITã©ã¤ã»ã³ã¹ï¼ã¨ãããµã¼ããã¼ãã£ã®ã©ã¤ãã©ãªãããã¾ããEventEmitterã®æ©è½ã«å ããã¤ãã³ãåããããåºåãã®ãã¼ã ã¹ãã¼ã¹ã§ãã£ã«ã¿ãªã³ã°ããæ©è½ãªã©ãåãã¦ãã¾ãï¼ãªã¹ã5ï¼ã
{EventEmitter2} = require 'eventemitter2'
# ã¯ã¤ã«ãã«ã¼ãã«ãããã£ã«ã¿ãªã³ã°ãæå¹ã«ããã¤ã³ã¹ã¿ã³ã¹ã使
reporter = new EventEmitter2 wildcard:true
# ã¤ãã³ãåã®å
é ããæ±äº¬.ãã®æã«å®è¡
reporter.on "æ±äº¬.*", (value) ->
console.log "ãæ±äº¬ã#{value}"
# ã¤ãã³ãåã®å
é ãã大éª.ãã®æã«å®è¡
reporter.on "大éª.*", (value) ->
console.log "ã大éªã#{value}"
# ã¤ãã³ãåããæ±äº¬.天æ°ãã®æã«å®è¡
reporter.on "æ±äº¬.天æ°", (value) ->
console.log "ãæ±äº¬ã®å¤©æ°ã#{value}"
# ã¤ãã³ãåã®æ«å°¾ãã.天æ°ãã®æã«å®è¡
reporter.on "*.天æ°", ->
console.log "å¤©æ°æ
å ±"
# ã¤ãã³ãåã®æ«å°¾ãã.æ°æ¸©ãã®æã«å®è¡
reporter.on "*.æ°æ¸©", ->
console.log "æ°æ¸©æ
å ±"
# ãã¹ã¦ã®ã¤ãã³ãã«å¯¾ãã¦å®è¡
reporter.onAny (value) ->
console.log "æ´æ°ãã"
console.log "[1]"
reporter.emit "æ±äº¬.æ°æ¸©", "æ°æ¸© 11度"
console.log "[2]"
reporter.emit "大éª.æ°æ¸©", "æ°æ¸© 14度"
console.log "[3]"
reporter.emit "æ±äº¬.天æ°", "å¤©æ° æã"
console.log "[4]"
reporter.emit "大éª.天æ°", "å¤©æ° æ´ã"
[1] æ´æ°ãã ãæ±äº¬ãæ°æ¸© 11度 æ°æ¸©æ å ± [2] æ´æ°ãã ã大éªãæ°æ¸© 14度 æ°æ¸©æ å ± [3] æ´æ°ãã ãæ±äº¬ã®å¤©æ°ãå¤©æ° æã ãæ±äº¬ãå¤©æ° æã å¤©æ°æ å ± [4] æ´æ°ãã ã大éªãå¤©æ° æ´ã å¤©æ°æ å ±
ã詳ããä½¿ãæ¹ã¯ãå ¬å¼ããã¥ã¡ã³ããåèã«ãã¦ãã ããã
