JavaScript入門 コールバックとは
JavaScriptでつまづくであろうコールバックについてご紹介します。
コールバックが何か分からない、なんのために使うか分からないという方に、少しでも役に立てればいいなと思います。
コールバックは関数の引数に渡す関数
この時点でよく分からないですね。
まず、普通の関数をみてみます。
const greet = (name) => {
return "Hello " + name;
}
console.log(greet('tamibouz'));
hello関数はnameを引数に受け取り、「Hello + <名前>」という文字列を返します。
コールバックの場合は、以下のようになります。
const hello = () => {
console.log('Hello');
}
const greet = (callback) => {
callback();
}
greet(hello);
greet という関数は、引数を一つ(callback)受け取っています。
このcallbackという引数は関数であることを想定しています。
そのため、callback() で実行することができます。
このコードでは、greet(hello); としているので、hello関数を実行しています。
もう一度確認
以下のコードだけに注目します。
const greet = (callback) => {
callback();
}
引数のcallbackは関数です。
そして、callback(); はその関数を実行する、という意味です。
()をつけると実行する、という処理になります。
つまり、以下のようなコードの場合
greet(hello);
greet関数の引数のcallbackは、hello関数になるので、callback(); の部分は hello(); となり、hello関数が実行されます。
コールバックを使うと何が嬉しいのか
関数を使う目的は再利用を可能にすることです。
はじめのgreet関数は、引数でnameという文字列を受け取って、Helloを頭に付与した文字列を返しています。
Helloを付与した文字列を返す、というのが再利用したい部分で、nameが変更したい部分です。
コールバックの場合も同じで、引数で渡す関数が変更したい部分です。
動的に変えたい部分を引数で渡すのです。
前述のgreet関数では、中でcallbackしか実行していませんが、以下のようなケースの場合はどうでしょう。
const greet = (callback) => {
// 共通化したい処理
// 例えば、何かの計算をする、文字列を加工する など
callback(); // ここが変更したい部分
}
greet の中では、共通の処理をまず行い、最後に引数で渡された関数を実行します。
例えば、共通の処理では何かしらの文字列を作成し、callback()でどこに出力するかを変えられる、ということができるようになります。
このように考えると、関数では引数で渡した部分が振る舞いを変えたい部分になります。
文字列を渡した場合は、その文字列の値を動的に変えられます。
関数を渡した場合は、その関数の振る舞いを動的に変えられます。
このように考えると、コールバックはかなり柔軟性を持たせることができると思いませんか!?
コールバックに慣れるとかなりのメリットがあるので、トライしてはいかがでしょうか。
ディスカッション
コメント一覧
まだ、コメントがありません