Functional-programming-introduction
提供:Dev Guides
関数型プログラミング-はじめに
関数型プログラミング言語は、記号計算およびリスト処理アプリケーションを処理するために特別に設計されています。 関数型プログラミングは数学関数に基づいています。 人気のある関数型プログラミング言語には、Lisp、Python、Erlang、Haskell、Clojureなどが含まれます。
関数型プログラミング言語は、2つのグループに分類されます。 −
- 純粋な関数型言語-これらのタイプの関数型言語は、関数型パラダイムのみをサポートしています。 たとえば-ハスケル。
- Impure Functional Languages -これらのタイプの関数型言語は、関数型パラダイムと命令型プログラミングをサポートしています。 たとえば-LISP。
関数型プログラミング-特性
関数型プログラミングの最も顕著な特徴は次のとおりです-
- 関数型プログラミング言語は、条件式と再帰を使用して計算を実行する数学関数の概念に基づいて設計されています。
- 関数型プログラミングは、*高階関数*と*遅延評価*機能をサポートしています。
- 関数型プログラミング言語は、ループステートメントなどのフロー制御と、If-ElseやSwitchステートメントなどの条件ステートメントをサポートしていません。 関数と関数呼び出しを直接使用します。
- OOPと同様に、関数型プログラミング言語は、抽象化、カプセル化、継承、多態性などの一般的な概念をサポートしています。
関数型プログラミング–利点
関数型プログラミングには次の利点があります-
- バグのないコード-関数型プログラミングは*状態*をサポートしていないため、副作用の結果はなく、エラーのないコードを書くことができます。
- 効率的な並列プログラミング-関数型プログラミング言語にはミュータブル状態がないため、状態変更の問題はありません。 「命令」として並行して動作するように「機能」をプログラムできます。 このようなコードは、簡単な再利用性とテスト容易性をサポートします。
- 効率-機能プログラムは、同時に実行できる独立したユニットで構成されます。 結果として、そのようなプログラムはより効率的です。
- ネスト関数をサポート-関数型プログラミングはネスト関数をサポートします。
- 遅延評価-関数型プログラミングは、遅延リスト、遅延マップなどの遅延関数構造をサポートします。
欠点として、関数型プログラミングには大きなメモリ空間が必要です。 状態がないため、アクションを実行するたびに新しいオブジェクトを作成する必要があります。
関数型プログラミングは、同じデータセットに対して多くの異なる操作を実行する必要がある状況で使用されます。
- Lispは、機械学習、言語処理、音声と視覚のモデリングなどの人工知能アプリケーションに使用されます。
- 組み込みLispインタープリターは、Emacsなどの一部のシステムにプログラマビリティを追加します。
関数型プログラミングと オブジェクト指向プログラミング
次の表は、関数型プログラミングとオブジェクト指向プログラミングの主な違いを強調しています-
Functional Programming | OOP |
---|---|
Uses Immutable data. | Uses Mutable data. |
Follows Declarative Programming Model. | Follows Imperative Programming Model. |
Focus is on: “What you are doing” | Focus is on “How you are doing” |
Supports Parallel Programming | Not suitable for Parallel Programming |
Its functions have no-side effects | Its methods can produce serious side effects. |
Flow Control is done using function calls & function calls with recursion | Flow control is done using loops and conditional statements. |
It uses "Recursion" concept to iterate Collection Data. | It uses "Loop" concept to iterate Collection Data. For example: For-each loop in Java |
Execution order of statements is not so important. | Execution order of statements is very important. |
Supports both "Abstraction over Data" and "Abstraction over Behavior". | Supports only "Abstraction over Data". |
プログラムコードの効率
プログラミングコードの効率は、アルゴリズムの効率と実行速度に正比例します。 効率が良いと、パフォーマンスが向上します。
プログラムの効率に影響を与える要因が含まれます-
- 機械の速度
- コンパイラー速度
- オペレーティング・システム
- 適切なプログラミング言語の選択
- プログラム内のデータの方法が整理されている
- 問題を解決するために使用されるアルゴリズム
プログラミング言語の効率は、次のタスクを実行することにより改善することができます-
- 不要なコードまたは冗長処理に使用されるコードを削除します。
- 最適なメモリと不揮発性ストレージを利用することにより
- 必要に応じて再利用可能なコンポーネントを使用することにより。
- プログラムのすべての層でエラーと例外処理を使用することにより。
- データの整合性と一貫性を保証するプログラミングコードを作成する。
- 設計ロジックとフローに準拠したプログラムコードを開発する。
効率的なプログラミングコードは、リソースの消費と完了時間を可能な限り削減し、オペレーティング環境へのリスクを最小限に抑えます。