function型が第一級型ということは、functionを戻り値にすることもできます。
が、これの使い方は正直言ってややレベル高いです。。。
詳しく知りたい方は、「カリー化」「部分適用」「クロージャ」あたりの単語でgoogle先生に訊いてみると幸せになれるかも。
今回は、ブログのタイトルもタイトルなので、ちょっとメタルを絡めたコードを例を書いてみました。
//誰かを紹介するfunction...を返すfunction function introduceSomeone(who){ //ここでの戻り値はfunction return function(description){ //上位の引数であるwhoも参照できるのがポイント //詳しくは「クロージャ」っていう単語でググって下さい。。。 WScript.echo(who + " is " + description + "."); } } //"Alex"について紹介するfunctionが格納される var introduceAlex = introduceSomeone("Alex"); //以下、Alexについての紹介 introduceAlex("a guiterist");// => "Alex is a guiterist." introduceAlex("living in Finland");// => "Alex is living in Finland." introduceAlex("a member of the heavy metal band called Children Of Bodom"); //=> "Alex is a member of the..."(略) //こういう風に呼んでも結果は同じ introduceSomeone("Alex")("the main composer of his band");// => "Alex is the main composer of his band."
以上、Alexのfunctionを返すfunctionの紹介でした。
要は、「複数の引数を取るけど、一回決めた引数は使いまわしたいfunction」に適用すると便利です。
毎回毎回引数を指定するのが面倒・・・というのもありますが、本筋は余計なバグを防止することじゃないでしょうか。
例えば、コピペをミスったりとか、他の処理から間違えて値を更新してしまったりとか。。。
上記の例のintroduceAlexを使っている限り、他の処理が何をやっていてもwhoが"Alex"であることが保障されるのがポイントです。
非同期とか分散処理をやっていても安全に使えるのがいいですね。
0 件のコメント:
コメントを投稿