関数をreturnする
前回の続きにもなります。タイトルだけでは理解しづらい部分でもあるので、早速サンプルを見てみましょう。
実用的ではないですが、ランダムは数字を作成し、その数字によって条件分岐するものを書いてみます。
function makeRandomFunc() {
const rand = Math.random();
if (rand > 0.5) {
// 関数を関数から返します
return function () {
console.log('おめでとう!!!!');
}
} else {
return function() {
alert('ハズレ〜');
}
}
}
コンソールで確認してみます。
makeRandomFunc() の中身は関数になっています。値によってどの関数を返すかは条件分岐で決まっています。
const randomFunc = makeRandomFunc();
randomFunc();
変数にいれ、実行することも可能です。
次は引数を使ってサンプルを書いてみます。
数字2つを渡して、別のある数字がその数字2つの範囲内に含まれるかどうかチェックできる関数について確認してみましょう。
例えば、ある数字が50〜100の間に含まれるかどうか確認したいとします。
function isBetween(num) {
return num >= 50 && num <= 100;
}
isBetween(60); //true
isBetween(38); //false
このように記述できますが、今後も別の数字で同じように確認していく関数を作成するのは手間で非効率です。
このような時に役立つのが関数を作ってくれる関数:高階関数 があります。
function makeBetweenFunc(min, max) {
return function(num) {
return num >= min && num <= max;
}
}
上記のように記述ができます。
const isChild = makeBetweenFunc(0,18);
isChild(15); //true
isChild(46); //false
// 高階関数は再利用できるので、
const isAdult = makeBetweenFunc(19, 64);
isAdult(31); //true
isAdult(70); //false
変数に入れて世代別に分けて活用もできます。
自分もまだまだ勉強中ではあるので説明不足なところがあるかもしれません。
いきなりこのようなコードを頻繁に書くことは少ないと思います。ただJavaScriptを学んでいく上では使うことになると思うので、少しずつ理解してもらえればと思います。