第3章 パラダイムの概要
3つのプログラミングパラダイム
- 構造化プログラミング
- 直接的な制御に規律を加える
- オブジェクト指向プログラミング
- 関数型プログラミング
私は Unity エンジニアである以上、C#(オブジェクト指向プログラミング) から離れることのできない体になっている。
これら3つのパラダイムは1960年代から見つかっているが、それ以降は新しいパラダイムは追加されていないとのこと。
ただし、マルチスレッドプログラミングはパラダイムに含まれそうな気はしている。
第4章 構造化プログラミング
- goto 文を使ってしまうと、モジュールを小さな単位に分割できなくなることを発見
- 1968年に「goto文は有害と考えられる」という論文でプログラミング世界が炎上したらしい
- 今もいろんなことで炎上しているけど、こんな時代から炎上しているってやはり歴史は繰り返す・・・
- モジュールを証明可能な単位に分割することを可能にする
- これは Unity+C# でも同じことが言える
- Update 4000行とか書かれた瞬間もう・・・ってなるよね・・・(たくさん経験してきた)
- これは Unity+C# でも同じことが言える
- 構造化プログラミングの価値を高めるのは、反証可能なプログラミングの単位を作成する能力。構造化プログラミングの歴史上から、機能分割をしていくことがベストプラクティスになる。
第5章 オブジェクト指向プログラミング
- オブジェクト指向が結構曖昧な表現されることが多い
- まぁ入門書にありがちな話でもある
オブジェクト指向の3つの概念、カプセル化、継承、ポリモーフィズム
第6章 関数型プログラミング
私自身一番馴染みのないプログラミングパラダイム
- 代表例の Lisp
- いつ見ても()地獄で、もうちょっとどうにかならなかったの感がすごいある
- 関数型言語の変数は変化しない
- 変数とは?
- 並列処理中に同じ変数にアクセスしても競合状態にならないメリットがある
感想
構造体プログラミングとオブジェクト指向型プログラミングに関しては慣れているので、概念として理解しやすい。(むしろ構造体プログラミングの延長線がオブジェクト指向型プログラミングなのかなと思ったり)
関数型プログラミングに関して、ネイティブアプリで使用する場面ってあるのかな・・・サーバが利用しているイメージだけど、クライアント側で使用することがあるのか若干気になった。(少なくともゲーム業界は C# or C++ だし)