ファイルの入出力ができるopenメソッドと非同期処理ができるsleepメソッド
コードができました
前回で、私がコードを書くといっていた件で、コードが完成しましたので、ここに解説しておきます。自分のほしい機能をいっぱい詰め込みました。
このコードでできることは、
- ファイルの入出力操作
- sleepを使った非同期処理
- 引数の引継ぎ
- 結果の引継ぎ
の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]); };
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メソッドを呼び出した関数順に並んでいます。
ソースコード
開発はSourceForge.JPのgitでオープンソース(MIT License)としてしています。ソースコードは以下のとおりです。