Angularのチュートリアルで、このようなコードがあります:
getHero(id: number): Promise<Hero> { return this.getHeroes().then( heroes => heroes.find( hero => hero.id === id )); }
find
に指定しているコールバック関数は、書き直すとこうなります:
(hero) => { return hero.id === id }
これを普通の関数に書き直すとこうなります:
findHero(id: number, hero: Hero, index: number, array: Hero[]): boolean { if(hero.id === id){ return true; }else{ return false; } } getHero(id: number): Promise<Hero> { return this.getHeroes().then( this.findHero.bind(this, id) ); // bindの1つ目の引数はnullでもOK }
ここで疑問に思ったのが、通常の関数は引数が4つあるのにアロー形式の場合は1つで済む点です。
findはコールバック関数にelement
,index
,そしてarray
の3つを渡すのに、
アロー形式の場合はなぜ引数が1つで済むのか?
こたえは簡単でした。findが渡す3つのうちelement
は必須ですがindex
とarray
はオプションなんですね:
JavaScript Array find() Method
よって、普通の関数の場合もこう書けます:
findHero(id: number, hero: Hero): boolean { if(hero.id === id){ return true; }else{ return false; } }