私は JavaScript コードを書き、関数型言語の性質を利用しようとしています。
他の関数型言語 (または Ruby でさえも) では、関数の戻り値を明示的に設定しないと、最後に評価された式の値が返されます。JavaScript はこのパターンに従いません。(正確には、JavaScript も常に値を返します。何も設定されていない場合はundefined
.)
私の質問は次のとおりです。値を返す必要がない (そして返さない) 関数があります。関数型プログラミングのコンテキストでは、明示的な戻り値を持たない関数を持つことは意味がありますか? または、この場合に自分自身を見つけた場合、どこかで失敗しましたか?
たとえば、次の関数があります。ロケーションハッシュが変更されたかどうかを定期的に確認し、変更されている場合は、指定された関数を呼び出します。
LIB_hashManager = function(f, context) {
var prev = '';
var pollHash = function() {
if (prev !== window.location.hash) {
prev = window.location.hash;
f.apply(context);
}
};
window.setInterval(pollHash, 100);
};
ここに何か返すべきですか?
アップデート
一方、将来いつでも の知識を拡張する必要がある場合はLIB_hashManager
、関数コンストラクター パターンに従って、オブジェクトにメソッドを追加するだけLIB_hashManager
で、生成されたオブジェクトを返すことができると思いました。
LIB_hashManager = function(f, context) {
// inside logic
// ...
};
そして後で私は書くかもしれません:
LIB_hashManager = function(f, context) {
// inside logic
// ...
// return public methods
return {
// ...
}
};
最初のケースで空のオブジェクトを返すのは意味がありませんか?