3章 JavaScriptにおける関数型プログラミング
3.1 関数型とは?
3.2 命令型vs.宣言型
code:関数型 vs 命令型
//Imperative Programming
// URLフレンドリーな文字列に変換する処理を命令型プログラミングで記載する
var string = "Restraunts in Hanalei";
var urlFriendly = "";
for (var i = 0; i < string; i++) {
urlFriendly += "-";
}
else {
}
}
console.log(urlFriendly) //"Restraunts-in-Hanalei";
//宣言型プログラミング
var string = "Restraunts in Hanalei";
var urlFriendly = string.replace(/ /g, "-");
console.log(urlFriendly) //"Restraunts-in-Hanalei";
命令型
従来のプログラミング言語は、結果を得るための手順(how)を記述する。どのように結果を得るか。に着目して
宣言型
宣言型プログラミングでは、「何をするのか(what)」が重要で「どのようにするのか(how)」は重要ではない。つまり、ひたすらwhatを記述することで、アプリケーションを構築していくスタイルが宣言型になる。
3.3 関数型プログラミングの基本概念
3.3.1 イミュータブルなデータ
3.3.2 純粋関数
1. 関数は少なくとも1つは引数を受け取らなければならい
2. 関数は値もしくは関数を戻り値として返却しなければならない
3. 関数は引数や関数外で定義された変数に直接変更を加えてはならない
グローバルステートや非同期処理で取得するような外部データが状態になるでいいんだろうか。
純粋関数にならないようなコンポーネントが持つ引数以外のデータが状態になるみたいな感じだろうか。
3.3.3 データの変換
3.3.4 高階関数
高階関数もまた、関数型プログラミングには不可欠な概念です。本性では、すでに高階関数の定義について触れました。サンプルコードの中にも高階関数がすでに何度か登場していますが、ここで改めて取り上げます。高階関数とは他の関数を引数に取るか、戻り値として関数を返すか、もしくはそれら両方を満たす関数です。
まず、関数を引数に取る高階関数の例を見ていきましょう。Array.map、Array.filter、そして、Array.reduceは関数を引数に取るため、これらは全て高階関数です。
3.3.5 再帰
3.3.6 関数の合成
3.3.7 アプリケーションの構築