2017-08-12 5 views
5

私はReactのソースを見ていて、var emptyFunction = require('fbjs/lib/emptyFunction');という要件を見つけました。makeEmptyFunctionはfbjsでどのような目的を果たしますか?

私はこの機能を見て、それが何をするのか混乱しました。ここで

はコメントで

function makeEmptyFunction<T>(arg: T): (...args: Array<any>) => T { 
    return function() { 
    return arg; 
    }; 
} 

const emptyFunction: (...args: Array<any>) => void = function() {}; 

機能である、彼らは私がで混乱していた以下の説明を与える:この機能は受け付けて入力を破棄し

を。副作用はありません。 これは常に呼び出し可能である必要が エンドポイント、JSはココア

ALAヌル・コール イディオムを欠い以来、私はヌルコール・イディオムに遭遇したことがないし、誰かができた期待していたオーバーライド機能のために慣用的に、主に有用ですこれが意味するものを明確にし、この機能の目的を技術的ではない言語で説明してください。

この問題は、正確にコード関連ではないので、うまくいきません。たぶんそれはどこか他の所に属しているかもしれません。もしそうなら、私は残念です。

答えて

4

JavaScriptでプログラミングする場合、関数をパラメータとして特定の操作に使用できます。例として、ある種のイベントの後に呼び出されるコールバックを持つ関数があります。このcallbackはオプションのパラメータであり、それが提供されていない場合、コールバックが定義されていないので

function doIt(callback) { 
    // some work 
    callback(); 
    // more work 
} 

今、私たちはUncaught TypeError: callback is not a functionエラーが発生します。この問題には2つの解決策があります。明らかなのはifステートメントでcallbackをチェックしていることです。もう1つのオプションは、割り当てられていない場合は、デフォルト値のcallbackとして空の関数を設定します。このアプローチは非常に便利で、callback関数を呼び出す複数の場所がある場合は光り輝きます。だから私たちはそれを呼び出す前に毎回未定義にチェックする必要はありません。

function doIt(callback) { 
    callback = callback || function(){}; 
    // some work 
    callback(); 
    // more work 
} 

同様に、オーバーライド可能な関数変数を持つことができる多くの使用例があります。デフォルトの値としてこれらの型の変数を空の関数に設定するのが一般的なパターンです。したがって、それらが代入/オーバーライドされているかどうかを気にせずに呼び出すことができます。

また、特殊な場合には、何もせずに特定の値を返す関数を持つと便利です。このような機能を作成するにはmakeEmptyFunctionが使用されます。基本的には、何もしないパラメータを渡す関数を返します。

emptyFunction.thatReturnsFalse = makeEmptyFunction(false); 

上記のコードでわかるように、上記のコードでは、falseという値を返す空の関数を生成しています。

"null call idiom"はObjective-C/Cocoaプログラミングで見つかったものです。基本的には、ほとんどの他の言語のようにエラーを出すことなく、call a method of an uninitialized object(ヌルポインタ)にすることができます。私は、それがコメントで説明しようとしたことだと思います。

JavaScriptは、このような言語機能を持っていないので、我々は明示的に空の機能を使用してそれを達成。一部の人々はNOOPやNOOP、それを呼び出すと、あなたは、このようなJQueryともAngularJSなどの他の人気のJavaScriptライブラリに似てヘルパーを見つけることができます。

関連する問題