LoginSignup
7
5

More than 5 years have passed since last update.

5分でわかる、プログラミングの潮流

Last updated at Posted at 2018-04-25

目的

書籍「リーダブルコード」など、構文・関数レベルでの具体的な方法論はあるものの、ソフトウェアのアーキテクチャ・実装方針レベルで、「運用しやすい(=複数人で理解しやすい)」ソフトウェアってなんなのと思い、整理してみました。
ツッコミ・参考資料の共有など、コメント大歓迎です。

要約

  • 「オブジェクト指向」「関数型プログラミング」の思想をまとめ、各文脈(サーバー,フロントエンド,アプリ)における現時点での動向までまとめた。
  • いずれにしても重要な要素を知ることが大切で、1つの言語に絞ってその思想を体現することが大切だと感じた。アーキテクチャ設計思想についてももっと知りたい。

オブジェクト指向

キーワード

  • カプセル化
    • オブジェクトのフィールドにはアクセスせず、メソッドだけを通してオブジェクトを操作する手法
  • 継承

    • 似たクラス間の共通機能を、スーパークラスとして実装できる機能
  • ポリモーフィズム

    • スーパークラスには汎用的な名前をつけておき、実際にはそのオブジェクトの型に応じたメソッドが実行される

メリット

  • 変更に対して柔軟に対応できる

  • 直観的で、なじみやすい=チームに浸透させやすい

    • ここは、人によって感覚が分かれそうなところですが

デメリット

  • 「変更されない箇所」を見分けるのは人間

    • 上記(モデル設計)が根本的に変更されるとつらい
  • 参照透過性が低い

    • 「手続き型」で、オブジェクトに状態を保持させるため、関数の入力が同じでも、状態によって異なる結果が得られる場合がある

関数型プログラミング

キーワード

  • 暗黙的状態

    • 明示的状態:プログラム中で動的に変化する状態をオブジェクトや構造体、変数の粒度で管理される状態
    • 暗黙的状態:プログラム中で変数間の関係性が宣言的に記述され、イミュータブル性(変更できない状態)が維持される状態。(または「宣言的状態」とも)
  • 参照透過性の担保

    • Curry化
    • 関数合成
  • 「関数型」言語はあるが、「関数型」の思想はどの言語でも使える

メリット

  • 関数型プログラミングの良さ  * コードのモジュール性  * 読みやすくなって、運用が楽になる
  • 参照透過性の担保
    • バグが減る。理論的にはUnitTestだけでバグがつぶせる

デメリット

  • 学習コスト。慣れるまで書くのが大変
    • 特に、暗黙的状態の扱い方は、慣れていないと理解が難しい印象
    • ゆえに、チームとしての導入は、現時点でハードルが高かったり

各文脈において

  • フロントエンド(Javascriptなど)や、アプリ(iOS)界隈では、関数型プログラミングへの移行が高まっているようにみえる

  • 一方、サーバーサイドでは、Haskell推奨な方は多々見受けられますが、最近だと
    「go言語」の利用が高まっている(docker、merucari・・)

    • 「go言語」は手続き型で、関数型プログラミングの思想とは別のところを目指していそう
    • 具体的には、「go言語」は静的型付け言語であったり、インターフェースの考え方、不要な変数が残っていたら実行時にエラーにするなど
  • 「go言語」のインターフェースの考え方は、Go言語における埋め込みによるインタフェースの部分実装パターンが分かりやすい

まとめ

いずれにしても重要な要素を知ることが大切で、1つの言語に絞ってその思想を体現することが大切だと感じた。アーキテクチャ設計思想の文脈でも考察を深めたい。

文献

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5