進めてる(進めていく)教材とか
HypertextCandy React入門チュートリアル完了- りあクト! TypeScriptで始めるつらくないReact開発 3/14 完了
Udemy フロントエンドエンジニアのための React ・ Redux アプリケーション開発入門完了Udemy React Hooks 入門 - Hooksと Redux を組み合わせて最新のフロントエンド状態管理手法を習得しよう!完了React 公式チュートリアル完了
今日やったこと
- りあクト! TypeScriptで始めるつらくないReact開発 第3章 関数型プログラミングでいこう
りあクト! TypeScriptで始めるつらくないReact開発 第3章 関数型プログラミングでいこう
ざっくりサマリー
関数型プログラミングは何がうれしい?
-
参照透過性
- 同じ入力に対して同じ作用・出力が保証されていること
-
関数型プログラミング
- 参照透過的な関数を組み合わせて,問題を対処する宣言型のプログラミングスタイルのこと
-
命令型プログラミングと宣言型プログラミング
- 命令型
-
最終的な出力を得るために状態を変化させる連続した文によって記述されるプログラミングスタイ ルのこと
- 手続き型プログラミングとかオブジェクト指向プログラミングとか
- 宣言型
-
出力の性質・あるべき状態を文字通り宣言することでプログラムを構成する
-
手続き型と関数型の違い
-
『可変性(Mutablity)』と『不変性(Immutablity)』
-
関数型
- 再代入,破壊的変更がない
- イミュータブル(不変)な変数しか使わない
- 代入自体もできるだけ控える傾向にある
- 関数もその場限りなら無名関数のまま使う
-
手続き型
- 再代入,破壊的変更がある
-
不変性を守ることで副作用が排除される
- 副作用とはリソースの変更がアウトプットに影響を与えてしまう
- 文と式
- 手続き型 → 文をよく使う
- 関数型 → 式をよく使う
- ボトムアップと絞り込み
- 手続き型 → ボドムアップで積み上げられて最終成果物が完成
-
関数型 → 完成形を見据えた上で絞り込んでいく
コレクションの反復処理
-
-
関数型プログラミングへの最初の入り口はコレクションの 反復処理
- map() → 加工
- filter() → 抽出
- find() → 検索
- findIndex() → index検索
- every() → AND演算子みたいな
- some() → OR演算子みたいな
- reduce(n, m) → nに前回の関数の実行結果が入る,mにコレクションの各要素が順に入る
- sort(n, m) → 並び替え
- includes() → 含まれているかどうか
-
配列の反復処理には値を返さない構文
- forEach()とfor…of文
-
これらを使う場合,関数型プログラミングにおいてロジックの組み方を間違えているケースが多いのでなるべく使わないようにする
JavaScript で本格関数型プログラミング
-
関数型プログラミングとは
- 名前を持たないその場限りの関数(無名関数)を定義できる
- 変数に関数を代入できる
- 関数の引数として関数を渡したり、戻り値として関数を返すことができる(高階関数)
- 関数に特定の引数を固定した新しい関数を作ることができる(部分適用)
- 複数の高階関数を合成してひとつの関数にできる
-
高階関数
- 引数に関数をとったり,戻り値として関数を返したりする関数のこと
- コールバック → 引数として渡される関数のこと
-
カリー化
-
複数の引数を取る関数を、引数が『元の関数の最初の引数』で戻り値が『引数として元 の関数の残りの引数を取り、それを使って結果を返す関数』である高階関数にすること
- 表現難しい。。。
- 複数の引数をとる関数を入れ子にしてるってことかな?
-
-
関数の部分適用
- カリー化された関数の一部の引数を固定して新しい関数を作ること
-
クロージャ
- 関数閉包 → 関数を関数で閉じて包む
-
関数と『その関数が作られた環境』という 2 つのものが一体となった 特殊なオブジェクトのこと
-
ガベージコレクタ(Garbage Collector)
- 不要になったメモリ領域を自動判別して開放する機能
- 生き残り判断基準
- カレントスコープにいること
- 他の生者から参照されていること
-
メモリリーク
- GCが開放せずにメモリがずっと存在し続けてしまうこと
まとめ
なんとなく関数型プログラミングというものがわかったような気がする。
手続き型と考え方が違うからなれるまでは脳みそ使いそう。
でもなれたら関数型プログラミングのほうが安全で可読性も高そう。
マスターするぞー!
それではまた明日。