ファイルの入出力ができるopenメソッドと非同期処理ができるsleepメソッド

コードができました

前回で、私がコードを書くといっていた件で、コードが完成しましたので、ここに解説しておきます。自分のほしい機能をいっぱい詰め込みました。
このコードでできることは、

  1. ファイルの入出力操作
  2. sleepを使った非同期処理
  3. 引数の引継ぎ
  4. 結果の引継ぎ

の4点です。

openメソッドで、サーバのファイルの入出力をしてみる

たとえば、サーバ上にある二つのファイル「a.txt」と「b.txt」をダウンロードして、一つの文字列に結合したい場合は次のようにします。

f.open("a.txt", "b.txt");

function f (file) {
  console.log(file["a.txt"] + file["b.txt"]);
};

仮に、ファイルa.txtの方に、"abcd"という内容の文字列が入っていて、ファイルb.txtには、"efgh"という文字列が内容として入っている場合、コンソールには文字列として、以下のように出力されます。

>> "abcdefgh"
ファイルハンドル

第一引数はハッシュだけではなく、ファイルハンドルとしても使えます。readメソッドは、自動で、複数のファイルを結合してくれるので、上のサンプルと結果が同じです。writeメソッドは、情報を送信する機能があります。

function f (file) {
  console.log(file.read()); //"abcdeefgh"
};

g.open("edit.php");

function g (file) {
  file.write("hogehoge");

//ファイルの上書き機能も実装可能 (要サーバサイドのプログラミング)
h.open("a.txt", "edit.php");

function h (file) {
  file.write(file["a.txt"] + "hogehoge");
};

また、Array型なので、配列としても使えます。

function f (file) {
  console.log(file[0] + file[1]);
};
引数の引継ぎ
f.open("a.txt", "b.txt", 1, 2, 3, 4);

function f (file, name, a, b, c, d) {
  name;                       //文字列"b.txt"
  console.log(a + b + c + d); //数値10を出力
  file["a.txt"];              //fileはファイルハンドルのままなので、a.txtの中身が入っている
};

上を見ていただければお分かりいただけると思いますが、openメソッドの第2引数以降は、関数fの引数として、引き継ぐことが可能です。メリットしては、クロージャの知識がなくても扱える点です。

sleepメソッドで非同期処理

ファイル入出力だけでは物足りない方のために、sleepメソッドもおまけとして用意しました。

使い方

即時関数の()の前に、.sleepを付ければOKです。
ほんの数行で、非同期処理を行うことができます。

(function() {
  console.log("a");
}).sleep(12);

(function() {
  console.log("b");
}).sleep();

コンソールのログに、文字列「a」が表示された後で、およそ12ミリ秒後に文字列「b」が表示されます。

引数の引継ぎ

openメソッドと同様、第二引数以降は引き継ぐことができます。

(function(result, a, b, c) {
  console.log(a); // "hoge"
  console.log(b); // "piyo"
  console.log(c); // 130
}).sleep(12, "hoge", "piyo", 130);
結果の引継ぎ

では、第1引数には何が入っているかというと、sleepメソッドで指定しておいた前回の関数の実行結果が入っています。なお、最初の規定値は0です。

(function() {
  return 12;
}).sleep(100);

(function(result) {
  console.log(result); //12
}).sleep();

関数の順序には気をつけてください。sleepメソッドを呼び出した関数順に並んでいます。

動作確認

IE8、Opera 16、Firefox 24.0など各ブラウザ。いずれもWin XP SP3。