カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

コールバック関数

今までコールバック関数をちゃんと把握してなかったので、メモ。 今回はnode.jsを使います。加算を2段階で行う処理。

function add(a,b,callback) {
    console.log(a+b)
    callback(a+b)
}

function add10(base) {
    console.log(base + 10)
}

add(1,2,add10)

実行結果:

3
13

1つ目の引数と2つ目の引数を加算するaddという関数があり、さらにその値に10を加算するadd10という関数がある。 1つ目と2つ目の引数を処理し、3つ目の引数であるadd10関数に渡してる。このadd10はコールバック関数を使って処理されている。

もちろん、コールバック関数を使わず以下のようにもできる。

function add(a,b) {
    console.log(a+b)
    add10(a+b)
}

function add10(base) {
    console.log(base + 10)
}

add(1,2)

実行結果:

3
13

ただ、こうするとadd10関数とadd関数が密になってしまい、汎用的ではなくなるので、こっちは使わない。

ちなみに、以下のように、add10という変数にすることも可能だけど、引数使いたくなった場合に応用が効かないので、これも使わない。

var add10 = function (base) {
    console.log(base + 10)
}

では、次にもう一つ関数を繋げてみたいとする。add10で加算された値を「さらに2倍する」関数を繋げてみる。

function add(a,b,callback) {
    console.log(a+b)
    callback(a+b)
}

function add10(base,callback) {
    console.log(base + 10)
    callback(base+10)
}

function multiply(base) {
        console.log(base * 2)
}

add(1,2, function(base) {add10(base,multiply)})

結果:

3
13
26

add10関数にコールバック関数を追加し、そのコールバック関数としてmultiply関数を追加する。

add(1,2,add10(multiply))

のような感じでやってみたくなっても、この場合はadd10ではなくadd10()となり関数の実行結果を引数で使おうとしてしまい、エラーになってしまう。

ということで、書いてみた。

既存の処理に具体的な関数を追加せず、コールバック関数として実行することで密にもならないし、関数が実行された後にその値を使ってコールバック関数を実行できるようになるため、今回のような加算・乗算だけでなく、エラー処理などにも確かに使えるという感じでした。

お休み中ご教授頂いたT先輩本当にありがとうございます><