July1stとのプログラミング, 2019

JavaScript開発者は最近、関数型プログラミングを非常に多く採用しており、純粋な関数を書くための巨大な擁護があります。 さて、純粋な関数とは何ですか? 少し前まで、私は純粋な関数の概念を学びましたが、驚いたことに、私はすでに多くの純粋な関数を書いていましたが、それには用語があることに気づ

純粋な関数

純粋な関数としての資格は何ですか?

関数は、以下の規則に従っている場合、純粋であるとみなされます:

  1. 同じ引数が渡された場合、関数は常に同じ出力を返します。
  2. この関数は副作用を発生させません。

私たちはすべて、過去に故意または無意識のうちに純粋な関数を書いています。
二つの入力引数を与えられた二つの数値の合計を返す、以下の純粋な関数を見てみましょう。

function sumOfNumbers(a, b) { return a + b;}

同じ入力引数が渡された場合、この関数の出力は常に同じままになります。 十分に簡単。 純粋な関数は、常に予測可能な動作を持つ単純な構成要素です。 したがって、外部の影響を受けることなく、常に同じ予測可能な出力を返します。

ここでは、不純な関数がどのように見えるかについての簡単な例です。

var value = 5;function impure(arg) { return value + 2 + 3;}

ここでは、関数に渡された引数を使用していないため、関数は不純であると見なされます。 代わりに、変更される可能性のある外部値を使用します。 従って、機能を外的な干渉/副作用が不純な原因でさせます。

さて、副作用に関する要件二つについて話しましょう。

副作用は何ですか?

あなたの関数が外界と相互作用するときはいつでも副作用が発生します。

一般的な副作用の例としては、次のものがあります:

  • API呼び出しを行う
  • データを変更する
  • コンソールは画面にログを記録します
  • DOM
  • 日付を操作します。now()現在の日付/時刻を取得するには
  • 非同期呼び出しを待つ/約束が
  • 数学を解決するのを待っています。乱数を生成するrandom()

まあ、あなたは私たちが副作用なしで常に関数を書くことができる方法を疑問に思うかもしれません。 副作用を完全に避けることはかなり挑戦的です。 私が言っているのは、名前が示すように、関数が純粋であると認定するためには、副作用がないはずです。

純粋な関数を書くことによって何を得るのですか?

Picpedia.Org

さて、私たちは道の定義を得ました。 あなたは今、それが何であるかを尋ねることができます利点です。

テストは簡単です

想像してみてください、あなたは純粋な関数の束を持っています、それは一つだけのことをします。 彼らは外部の副作用を持たず、常に予測可能な出力を返します。 これらの関数は、たくさんの依存関係や予測不可能な動作を持つ関数よりも、テストがはるかに簡単になります。 クリーンでテスト可能なコードを書くことで、コード品質を大幅に向上させることができます。

デバッグコードは痛みではありません

純粋な関数では、デバッグコードは不純な関数のデバッグに比べて大きな痛みではありません。 問題やバグに遭遇し、それを純粋な関数に絞り込んだ場合は、問題を見つけるためにその関数の範囲外を見る必要がないことを安心できます。 そのため、開発者のデバッグ体験を大幅に向上させます。

パフォーマンスを向上させるためのメモ化

純粋な関数では、与えられた入力に対して同じ出力を返すことが保証されています。 これは、メモ化の可能性を作成します。 同じ入力が関数に渡されると、キャッシュから結果を引き出すことができ、アプリの実行が高速になります。 キャッシュは大量のリソースを節約し、パフォーマンスを向上させることができます。 そして、純粋な関数をキャッシュすることは、副作用なしで予測可能であるため、心配することなく行うことができます。

保守可能なコード、リファクタリングが簡単

これは明らかなものです。 コードを使用すると、それはとてもきれいで、テストとデバッグが簡単で、非常に保守可能なコードにもなります。 これは未来を念頭に置いた重要な側面です。 数年/数ヶ月後、ソフトウェアに追加の機能とリファクタリングが必要な場合、純粋な関数の束で構成されるコードは、再ファクタリングするのが非常に直感的になります。 彼らは、開発者が心配する必要がある外部の副作用を持っていません。 チームの新しい開発者でさえ、この作業を簡単に引き受けることができます。

純粋な関数を使用する実際の例

Reduxはとても人気があり、私たちのほとんどはいくつかのプロジェクトでそれを使用しているか、それを聞いたこと ReducerはReduxパターンの一部であり、重要な役割を果たす関数です。 Redux reducersの最も重要な機能は、それらが純粋な関数であることです。

レデューサーは、状態とアクションを取り、新しい状態を返す純粋な関数です。

function(state, action) => newState

レデューサーはRedux統合の主要な部分であり、多くのビジネスロジックを保持しています。 Reduxは、reduxが副作用のない純粋な関数でなければならないことを強制するので、簡単に保守可能な非常にエレガントでシンプルな関数になります

Reduxは、純粋な関数を書く古典的な例です。 これは関数型プログラミングからインスピレーションを得ており、ここ数年で絶大な人気を得ています。 これは、状態管理のための近代的なwebアプリケーションで頻繁に使用されています。 今、あなたはその成功の背後にある理由を知っています、tはそれが純粋な関数を書くための要件です。 これにより、コードはテスト可能でクリーンで、デバッグが容易で保守が容易になります。

結論

純粋な関数を書くことがどのようにあなたに利益をもたらし、コードをシンプルでエレガントに保つことができるかを調べました。 純粋な関数はJavaScriptに限定されないことに注意してください。 この概念は、お好みの任意のプログラミング言語で採用することができます。 これは、JavaScriptと任意の関数型プログラミング言語でうまく動作します。

JavaScriptのスキルを向上させたい場合は、MoshのJavaScriptコースを強くお勧めします。

すべてのJavaScriptコースをチェックアウトするここで: https://codewithmosh.com/p/full-stack-javascript-developer-bundle

あなたはこの記事を楽しんだ場合,言葉を広め、それを共有してください. より多くの記事を前面に再び戻ってチェックしてくださ

Adhithi Ravichandranはカンザスシティに拠点を置くソフトウェアコンサルタントです。 彼女は現在、React、React Native、GraphQLを使ったアプリの構築に取り組んでいます。 彼女は会議のスピーカー、Pluralsightの著者、Bloggerおよびソフトウェアコンサルタントである。 彼女は教えることに情熱を持っており、彼女のコース、ブログ記事、スピーキング契約で技術コミュニティに貢献するために繁栄しています。

タグ:javascript,純粋な関数

コメントを残す

メールアドレスが公開されることはありません。