- vừa được xem lúc

Blog#89: Pure functionとは何ですか?そして、なぜそれを気にするべきですか?

0 0 25

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

こんにちは、私は東京からのフルスタック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を使用してみてください。

いつものように、この記事を楽しんで新しいことを学んでいただけたと思います。

ありがとうございました。次の記事でお会いしましょう!

この記事が気に入ったら、いいねをして購読してサポートしてください。ありがとうございます。

Ref

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 528

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 436

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 158

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 149

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 113

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 249