ex12-01-6

ソース

// #@@range_begin(list1)
class Log {
  constructor() {
    this.messages = [];
  }
  add(message) {
    const now = Date.now(); /* 現在時刻を表す整数。15章参照 */
    console.log(`ログ追加: ${message}(${now})`);
    this.messages.push({ message, timestamp: now });
  }
// #@@range_end(list1)
// #@@range_begin(list2)
  [Symbol.iterator]() {
    return this.messages.values();
  }
// #@@range_end(list2)
}

// #@@range_begin(list3)
const log = new Log();
log.add("海の監視初日。勤務開始");
/* しばらくして(時間の経過をsetTimeoutを使ってシミュレート) */
setTimeout(function() {log.add("クジラを見た");}, 3*1000); /* 3秒後 */
/* しばらくして */
setTimeout(function() {log.add("1艘の船を見た");}, 7*1000);
/* ... */
setTimeout(function() {log.add("監視終了");}, 9*1000);

setTimeout(function () {
  console.log(`-本日の業務報告- (${new Date()})`); /* 現在日時を表示 */
  for(let entry of log) {
    const date = new Date(entry.timestamp); /* 人間が読める形式に変換(15章参照) */
    console.log(`${entry.message} (${date})`);
  }
}, 10*1000); /* 10秒後 */

/* 実行結果
ログ追加: 海の監視初日。勤務開始(1478504798122)
ログ追加: クジラを見た(1478504801137)
ログ追加: 1艘の船を見た(1478504805137)
ログ追加: 監視終了(1478504807141)
-本日の業務報告- (Mon Nov 07 2016 16:46:48 GMT+0900 (JST))
海の監視初日。勤務開始 (Mon Nov 07 2016 16:46:38 GMT+0900 (JST))
クジラを見た (Mon Nov 07 2016 16:46:41 GMT+0900 (JST))
1艘の船を見た (Mon Nov 07 2016 16:46:45 GMT+0900 (JST))
監視終了 (Mon Nov 07 2016 16:46:47 GMT+0900 (JST))
*/
// #@@range_end(list3)