こんにちは、私は東京からのフルスタックWebデベロッパーであるTUANです。
今後の便利で面白い記事を見逃さないように、私のブログをフォローしてください。
「pure function」という言葉をプログラミング界で聞いたことがあるかもしれませんが、それは実際には何を意味するのでしょうか? 簡単に言えば、pure functionとは、副作用を持たず、与えられた入力に対して常に同じ出力を返す関数です。これは大きな問題ではないかもしれませんが、実際にはpure functionはさまざまな場面で非常に有用です。この記事では、pure functionとは何か、なぜ重要であるのか、およびそれを自分のコードでどのように使用できるかをより詳しく見ていきます。
Pure Functionとは
pure functionは、以下の基準を満たす関数です:
- 入力パラメーターだけに依存し、外部の状態に依存しない。
- 外部の状態を変更しない。
- 与えられた入力に対して常に同じ出力を返す。
これらの基準をより詳しく見ていきます。
- Pure functionは、入力パラメーターだけに依存し、外部の状態に依存しません。これは、関数がその仕事をするために、外部の変数やリソースを必要としないことを意味します。単にいくつかの入力を受け取り、その入力に対する操作を実行し、結果を返すだけです。これにより、関数がどのように動作するのかを理解し、予測することができるようになり、関数の振る舞いに外部の要因が影響することがなくなります。
- Pure functionは、外部の状態を変更しません。これは、関数が自身の外部での変数の値を変更しないことや、外部のリソース(データベースやAPIなど)とやり取りしないことを意味します。これはpure functionの重要な側面であり、関数が完全に自己完結しており、プログラム全体に意図しない影響を与えないことを保証します。
- Pure functionは、与えられた入力に対して常に同じ出力を返す。これは、同じ入力を複数回与えると常に同じ出力を得られることを意味します。これは、テストやデバッグにおいて非常に有用であり、関数が正しく動作しているかを簡単に検証できるようにします。
Pure Functionが重要である理由
今、pure functionとは何かを理解したと思いますので、pure functionがどのように重要であるのかを理解するために、いくつかの理由を見ていきましょう。
- テストやデバッグが容易である:pure functionは、与えられた入力に対して常に同じ出力を返すため、それらをテストすることや、それらが正しく動作しているかを検証することが簡単です。これにより、デバッグをするときに時間やストレスを省くことができます。
- 考え方が容易である:pure functionは、自己完結しており、外部の状態に依存しないため、それらがどのように動作するのかを理解し、その行動を予測することが容易です。これにより、コードを長期的に維持しやすく、より扱いやすいものになります。
- 最適化が容易である:pure functionは外部の状態を変更しないため、impure functionではできないように、pure functionを最適化することができます。たとえば、プログラム内で多数の回呼ばれるpure functionを持つ場合、関数の結果をキャッシュして再計算を避けるようにすることができます。これにより、いくつかのケースでは、大幅なパフォーマンス改善が見込めます。
- 並列化が容易である:pure functionは外部の状態に依存しないため、それらを並列化して複数のCPUコアを活用することが容易です。これは、データ処理を伴うタスクで特に有用です。
例
これまでにpure functionの利点を見てきましたので、実際にどのように自分のコードでpure functionを使用するかを見ていきましょう。
データ変換
Pure functionのよくある使用ケースは、データ変換です。たとえば、ユーザーオブジェクトのリストを持っていて、それぞれのオブジェクトからメールアドレスだけを抽出したいとします。次のように、ユーザーオブジェクトのリストを入力として受け取り、メールアドレスのリストを返すpure functionを書くことができます。
function extractEmails(users) {
return users.map(user => user.email);
}
この関数はpure functionであるのは、入力(ユーザーオブジェクトのリスト)だけに依存しており、外部の状態を変更しないためです。また、同じ入力を与えるたびに同じ出力を返すため、常に同じ結果を返すことが保証されます。
状態管理
さらに、pure functionは、状態管理でもよく使われます。たとえば、Reactを使ってWebアプリケーションを構築しているとします。Reactでは、状態を管理するために、useState Hookを使用することができます。useState Hookを使用すると、状態を更新するための関数を受け取り、その関数を呼ぶことで状態を更新することができます。次のように、状態をインクリメントするpure functionを定義できます。
function increment(currentState) {
return currentState + 1;
}
この関数はpure functionであるのは、入力(現在の状態)だけに依存しており、外部の状態を変更しないためです。また、同じ入力を与えるたびに同じ出力を返すため、常に同じ結果を返すことが保証されます。
まとめ
今回は、pure functionとは何か、なぜそれが重要であるのか、そして実際にどのように使用できるかについて見てきました。Pure functionは、テストやデバッグを容易にするだけでなく、考え方が容易であり、最適化が容易であり、並列化が容易であるため、プログラミングで非常に有用です。是非、自分のコードでpure functionを使用してみてください。
いつものように、この記事を楽しんで新しいことを学んでいただけたと思います。
ありがとうございました。次の記事でお会いしましょう!
この記事が気に入ったら、いいねをして購読してサポートしてください。ありがとうございます。