node.jsの組み込み関数を使ってみる

やっとnode.jsを触る暇ができたのでまずは組み込み関数をいろいろ使ってみることに。
そろそろCakefileをちゃんと書けるようにしたいし、いろいろ知っていればできることの幅が広がるだろうし。
環境:Ubuntu11.04 64bit / node.js 0.4.8

http://nodejs.jp/nodejs.org_ja/api/globals.html

global

グローバルなネームスペースのオブジェクト。ただ実際に使うことは少ない気がする。
明示的に書きたい時とかに使ったりするのかな。

> global.console.log('log');
log
require.paths

requireのサーチパス配列。unshift()やpush()をすればサーチパスを追加できる。

> require.paths
[ '/home/sasaplus1/.npm/libraries',
  '',
  '/home/sasaplus1/.node_modules',
  '/home/sasaplus1/.node_libraries',
  '/home/sasaplus1/.nvm/v0.4.8/lib/node' ]
__filename, __dirname

実行されているスクリプトのファイル名とディレクトリ名。絶対パスで示される。

$ cd ~/
$ cat <<'EOB' > name.js
> console.log(__filename);
> console.log(__dirname);
> EOB
$ node name.js
/home/sasaplus1/name.js
/home/sasaplus1

__filenameも__dirnameもグローバルではなく、モジュール毎にローカルみたい。

http://nodejs.jp/nodejs.org_ja/api/stdio.html

log(), info()

改行付きで標準出力へプリントする関数。log()もinfo()も同じ。

> console.log('MAX %d', 300);  // MAX 300
warn(), error()

log(), info()と同じ、ただし出力先は標準エラー出力

dir(obj)

objを文字列化した結果を標準エラー出力にプリントする関数。

> console.dir(console)
{ log: [Function],
  info: [Function],
  warn: [Function],
  error: [Function],
  dir: [Function],
  time: [Function],
  timeEnd: [Function],
  trace: [Function],
  assert: [Function] }
time(label), timeEnd(label)

タイマーを作成する関数と、タイマーを終了して結果を出力する関数。
関数の実行時間を計測するときに有用だと思う。

> var TIMER_NAME = 'timer'
> console.time(TIMER_NAME)
> // ちょっと待つ
> console.timeEnd(TIMER_NAME)
timer: 15250ms
trace()

現在のスタックトレース標準エラー出力にプリントする関数。

> console.trace()
Trace: 
    at [object Context]:1:10
    at Interface.<anonymous> (repl.js:161:22)
    at Interface.emit (events.js:64:17)
    at Interface._onLine (readline.js:153:10)
    at Interface._line (readline.js:408:8)
    at Interface._ttyWrite (readline.js:585:14)
    at ReadStream.<anonymous> (readline.js:73:12)
    at ReadStream.emit (events.js:81:20)
    at ReadStream._emitKey (tty_posix.js:307:10)
    at ReadStream.onData (tty_posix.js:70:12)
assert()

assert.ok()と同じ、とは書いてあるけど……
C言語とかのassert()と同じ使い方かな?

http://nodejs.jp/nodejs.org_ja/api/timers.html

setTimeout(callback, delay, [arg], [...])

delayミリ秒経過後callbackが実行されるようスケジュールする関数。(実行されるようスケジュール、って必ずしもdelayミリ秒後に実行されるわけではないってを暗に言ってるのかな。CPUが忙しいときとか)
戻り値としてclearTimeout()で使えるtimeoutIdが返ってくる。

> setTimeout(function(print){console.log(print);}, 2000, 'timer');
{ _idleTimeout: 2000,
  _onTimeout: [Function],
  _idlePrev: 
   { repeat: 2,
     _idleNext: [Circular],
     _idlePrev: [Circular],
     callback: [Function] },
  _idleNext: 
   { repeat: 2,
     _idleNext: [Circular],
     _idlePrev: [Circular],
     callback: [Function] },
  _idleStart: Sat, 04 Jun 2011 01:12:44 GMT }
> timer  // 2秒後に表示される
clearTimeout(timeoutId)
> var id = setTimeout(function(print){console.log(print);}, 2000, 'timer'); clearTimeout(id);
>  // 2秒待っても何も表示されない


とりあえずこんなもんかな。てかこれ実際は一昨日やったやつで、書くのを忘れてただけだったり。