はじめに
私は関数型プログラミングがオブジェクト指向と比べられるほど可能性のあるコーディング手法だと知り勉強を始めました。しかし、Pythonメインに関数型プログラミングを説明する情報が少なく、LISPやJavaScriptから学びました。
一通り学び終えて関数型プログラミングがどのようなものかイメージがつきましたが、言語仕様が所々違うため、すぐにPythonに活かすことができませんでした。
そこで私なりにPythonで関数型プログラミングの便利なテクニックを使えるようになるために記事にまとめました。
詳細な説明は避けて端的に書いています。詳細を知りたい方や、読んでわからない点は公式ドキュメントや関連書籍などを読むことをお薦めします。
関数型プログラミングに関する記事でコーディング技術の向上に役立てば幸いです。
プログラミング手法
- 手続き型プログラミング
- FORTLAN, C, Pascal, Unix
- オブジェクト指向
- C++, Java
- 関数型プログラミング
- LISP, Haskell
- 宣言型
- SQL
まず始めに代表的なプログラミング手法と、その言語をまとめました。
昨今のプログラミング言語は複数のプログラミング手法に対応しています。例えば、C++やJavaはオブジェクト指向として有名な言語ですが、関数型プログラミングの特徴であるラムダ式をサポートするようになりました。
Pythonは元々手続き型言語として意図されていましたが、オブジェクト指向や関数型プログラミングの機能をサポートしています。
関数型プログラミングとは?
関数型プログラミングとは
”複数の式を関数の適用によって組み合わせていくスタイル”
です。例えば以下のようなスタイルがあります。
- 一時変数やループを使わないで、関数の再帰呼び出しを使う。
- 関数を第一級オブジェクトとして扱う。(プログラミング言語に依存する)
- グローバル変数は使わない
- 一時変数への代入はしない
関数型プログラミングの明確な定義はなく、あくまでスタイルです。
そのため便利なスタイルを取り入れる一方で、一時変数やループを使うこともあります。状況に応じて使い分けます。
関数型プログラミングには次のような特徴があります。
- モジュール性が高い
- 結合性
- コードの正しさを数学的に証明できる
- テストしやすい
関数型プログラミングは制御を小さい関数に分けて、つなぎ合わせるようなイメージです。制御を小さい関数に分けることで、モジュール性が高くなります。
小さい関数に分けることでテストがしやすくなります。
純粋関数はコードの正しさを数学的に証明できるため安全です。
学ぶメリット、デメリット
個人的な見解ですが、学ぶメリットとデメリットは以下の通りです。
メリット
- 純粋関数や副作用について理解できると、テストしやすいコードの理解も深まる。
- map, filter, reduceなどの高階関数を使って短いコードで簡潔に書けるようになる。
- データと処理を分けて考えられるようになる。
- for文が減る(インデントが減り可読性が高くなる)
デメリット
- モナドの認知度は低く使える人は少ないため、チーム開発では避けた方が良い。
- for文より再帰関数の方が簡潔に書けるが、実行速度が遅かったり、慣れていないと読むのに時間がかかる。
コメントを残す