コールバックも
2134 ワード
さっきある文章を見て、コールバックの過程を話して、私は少し長いと思います.だから私はコールバックに対する理解とjava/javascriptに代表されるコールバックの違いについて話します.
コールバックの概念
関数(foo)が特定のタイミングで実行されると、あるパラメータ(callback)によって表される実行プロセスが実行を続行するようにコマンドされます.
明らかに、このcallbackメソッドは外部で予め定義されており、これにより、呼び出し者は関数(foo)定義を変更することなく、後期実行ポリシーを柔軟に作成することができる.これはクラスライブラリ設計で特に役立ちます.
まず例を見てみましょう.
この例では、コールバックを含む関数fooを定義し、2つのコールバック関数(someCallBack,someCallBack 2)を定義します.最後に呼び出し、それぞれ異なるコールバック関数を使用します.従って、コールバック関数は、最後のプロセスを実行するために使用することができ、パラメータとして主関数に伝達され、主関数の記述をモード化することができる.
コールバックにはどんな特質がありますか.は、実行プロセスである必要があります. はパラメータを受け入れることができ、もちろん受け入れなくてもよい. は、定義された関数によって実行を容易に呼び出すことができる.
コールバックの定義方法
コールバックパラメータは、定義関数(foo)でポインタとして使用されます.呼び出し関数は、実パラメータを設定するときに関数またはインスタンスの参照を直接使用するか、匿名関数、匿名クラス、匿名インタフェース、オブジェクトインスタンスを使用します.
JAvaとjavascriptの実装にはどのような違いがありますか?
JAvaのコールバックパラメータは1つのクラス(またはインタフェース)のみです.
理由は2つあります. 1 javaメソッドのパラメータはクラスでなければなりません. は、関数ポインタを入力することも、この関数ポインタを直接実行することもできません(パラメータを持ち込むことは言うまでもありません).
JAvaはjavascriptに単純にメソッドを入力することはできません.関数は本質的に関数オブジェクトであり、その参照はjavaのクラスインスタンスへの参照と同じです.しかし、異なるのは、関数がクラス変数とクラスメソッドを格納することも、実行プロセスとして直接パラメータを入力して結果を与えることもできます.
ちなみに,クラスとしては,その内部のクラス変数保持とクラスメソッドが成功するには,閉パッケージ概念に頼らなければならない.JAvaではクラスとクラスメソッドが同じ概念を使用することはできません.両者を区別しなければなりません.また、クラスメソッドの実行はオブジェクト名の制限の下で行う必要があります.
コールバックを使用する理由
モジュール化
前述したように、クラスライブラリの設計に特に役立ちます.確かに、コールバックを定義することは、コードをモジュール化する良い方法です.モジュールのパッケージが良好で、無数のテスト例を経験したコードが繰り返し修正されることを望んでいない.
非同期コードでは、いくつかのプロセスを秩序正しく実行する必要があります.例えば、画像をアップロードするとき、アップロードプロセスをバックグラウンドプロセスに置くことを望みながら、UI操作がブロックされない.また、アップロードが終わったらユーザーに伝えたいので、UIを自動的に更新したほうがいいです.このとき,アップロードは非同期コードに格納され,最後にユーザにUIの更新を通知することはコールバックで実行される.この時にコールバックが使われた.
コールバックは非同期ですか?
答えは大きなNOです.コールバック実行中、foo関数の最後のreturn trueはまだそこに待っています.また,呼び出し関数は実際にはまだ終了しておらず,呼び出しスタックには明確な上下呼び出しの関係がある.
コールバックの概念
関数(foo)が特定のタイミングで実行されると、あるパラメータ(callback)によって表される実行プロセスが実行を続行するようにコマンドされます.
明らかに、このcallbackメソッドは外部で予め定義されており、これにより、呼び出し者は関数(foo)定義を変更することなく、後期実行ポリシーを柔軟に作成することができる.これはクラスライブラリ設計で特に役立ちます.
まず例を見てみましょう.
//
function foo(p1, p2, callback){
//do something
callback(someArgs);
return true;
}
//
function someCallBack(args){
//do something
}
// 2
function someCallBack2(){
//do something
}
//
foo(pp1, pp2, someCallBack);
foo(pp1, pp2, someCallBack2);
この例では、コールバックを含む関数fooを定義し、2つのコールバック関数(someCallBack,someCallBack 2)を定義します.最後に呼び出し、それぞれ異なるコールバック関数を使用します.従って、コールバック関数は、最後のプロセスを実行するために使用することができ、パラメータとして主関数に伝達され、主関数の記述をモード化することができる.
コールバックにはどんな特質がありますか.
コールバックの定義方法
コールバックパラメータは、定義関数(foo)でポインタとして使用されます.呼び出し関数は、実パラメータを設定するときに関数またはインスタンスの参照を直接使用するか、匿名関数、匿名クラス、匿名インタフェース、オブジェクトインスタンスを使用します.
JAvaとjavascriptの実装にはどのような違いがありますか?
JAvaのコールバックパラメータは1つのクラス(またはインタフェース)のみです.
理由は2つあります.
JAvaはjavascriptに単純にメソッドを入力することはできません.関数は本質的に関数オブジェクトであり、その参照はjavaのクラスインスタンスへの参照と同じです.しかし、異なるのは、関数がクラス変数とクラスメソッドを格納することも、実行プロセスとして直接パラメータを入力して結果を与えることもできます.
ちなみに,クラスとしては,その内部のクラス変数保持とクラスメソッドが成功するには,閉パッケージ概念に頼らなければならない.JAvaではクラスとクラスメソッドが同じ概念を使用することはできません.両者を区別しなければなりません.また、クラスメソッドの実行はオブジェクト名の制限の下で行う必要があります.
コールバックを使用する理由
モジュール化
前述したように、クラスライブラリの設計に特に役立ちます.確かに、コールバックを定義することは、コードをモジュール化する良い方法です.モジュールのパッケージが良好で、無数のテスト例を経験したコードが繰り返し修正されることを望んでいない.
非同期コードでは、いくつかのプロセスを秩序正しく実行する必要があります.例えば、画像をアップロードするとき、アップロードプロセスをバックグラウンドプロセスに置くことを望みながら、UI操作がブロックされない.また、アップロードが終わったらユーザーに伝えたいので、UIを自動的に更新したほうがいいです.このとき,アップロードは非同期コードに格納され,最後にユーザにUIの更新を通知することはコールバックで実行される.この時にコールバックが使われた.
コールバックは非同期ですか?
答えは大きなNOです.コールバック実行中、foo関数の最後のreturn trueはまだそこに待っています.また,呼び出し関数は実際にはまだ終了しておらず,呼び出しスタックには明確な上下呼び出しの関係がある.