プログラミングと旅と映画の日々

普段はスマホ決済サービスの会社でバッグエンドを担当しているエンジニアです。プログラミングと趣味の映画、株、時々うどんに関してブログを書いていこうと思います。海外ドラマ、クロスバイクも好きです。

コールバック関数は汎用化に最適!<JavaScript勉強中>

配列に対して、

・値を取り出して1ずつ足すという処理

・値を取り出して2乗じるという処理

 

以下の二つの関数を定義したい場合にコールバックを使わずにそれぞれ実装すると以下のように実装できます。

 

var a = [1, 2, 3, 4, 5];

//1ずつ足す関数

function addOne() {

  var resultArray = ;

  for (var i = 0; i< a.length; i++){

    r[i] = a[i] +1;

  }

}

 

//2乗じる関数

function multiTwo() {

  var resultArray = ;

  for (var i = 0; i< a.length; i++){

    r[i] = a[i] * 2;

  }

}

 

for文の中の要素に対して+1するか*2するかの部分しか処理が異なりません。

これはコールバック関数を利用することで以下のように汎用化可能です!

 

var a = [1, 2, 3, 4, 5];

//汎用化部分(コールバック関数fで切り替え)

function _map(f, a) {

  var resultArray = [];

  for (var i = 0; i< a.length; i++){
    resultArray[i] = f(a[i]);
  }
  return resultArray;

}

 

var addOne = function (x){return x +1;};

//1ずつ足す関数

function mapAddOne(a) {
  return _map(addOne, a)
}
b = mapAddOne(a);

 

var multiTwo = function (x){return x *2;};

function mapmultiTwo(a) {
  return _map(addOne, a)
}
b = mapAddOne(a);

console.log(b);