node.jsの関数型プログラミング

  • 投稿日:
  • by
  • カテゴリ:

Kmoneyを開発する過程でJavascriptについてあれこれ調べていて、node.jsに辿りついた。

サーバーサイドJavascriptの環境で、ファイル入出力やTCP/IP通信などもできるようになっている。つまりRubyやPerlと同様に使える。今までPerlで書いてきたプログラムの大半はこれで書きなおすことができそうだ。

プログラムはシングルスレッドで動き、ネットワーク通信やファイル入出力などは非同期で実行される。プログラミングのモデルはオブジェクト指向ではなく、関数型になる。

var fs = require('fs');

function readdirCallback(err, files) {
	function readFileCallback(err, data) {
		console.log(data);
	}

	for (var i = 0; i < files.length; i++) {
		if (files[i].indexOf('.js') !== -1) {
			fs.readFile(files[i], 'utf8', readFileCallback);
		}
	}
}
fs.readdir('.', readdirCallback);

カレントディレクトリにある'.js'の付いたファイルを読み込む処理はこんな感じ。ディレクトリを読み込むreaddir()、ファイルを読み込むreadFile()にコールバック関数を渡して、読み込んだデータに対する処理はコールバック関数の中で行う。非同期の処理なので独立のスレッドにする必要はない。

このモデルはJavascriptの特性によく合っているように思える。プロトタイプベースのオブジェクト指向モデルに対する違和感はやっぱり正しかったようだ。この点はNodeビギナーズブックというチュートリアルで指摘されていて、Javaが「名詞王国」であるのに対してJavascriptは「動詞王国」とのこと。