\r\n\r\n
関数型プログラミングと命令型プログラミングの大きな違いは、関数型プログラミングでは計算を数学的な関数として扱い、状態やデータの変化を避けるのに対し、命令型プログラミングではプログラムの状態を変化させるステートメントを用いることです。
プログラミングパラダイムは、コンピュータプログラムの構造や要素を構築するためのスタイルを提供します。プログラミングパラダイムは、プログラミング言語をその特性によって分類するのに役立つ。プログラミング言語は、複数のパラダイムに影響を与える可能性があります。オブジェクト指向のパラダイムでは、プログラムはオブジェクトを使って構築され、オブジェクトはメソッドを使ってメッセージを渡すために使われる。論理プログラミングは、計算を数学的論理で表現するしかない。他の2つのプログラミングパラダイムは、関数型プログラミングと命令型プログラミングである。関数型プログラミングは、計算を数学的な関数の評価として表現することができる。命令型プログラミングは、メモリの状態を明示的に変更するステートメントを提供します。この記事では、関数型プログラミングと命令型プログラミングの違いについて説明します。
1. 概要と主な相違点 2. 機能的プログラミングとは 3. 命令的プログラミングとは 4. 機能的プログラミングと命令的プログラミングの類似点 5. 横並び比較 - 表形式での機能的プログラミングと命令的プログラミング 6. まとめ
関数型プログラミングは、数学がベースになっています。関数型プログラミングの主要な原理は、すべての計算を独立した数学的関数の組み合わせとしてとらえることです。数学的な関数は、入力と出力を対応させます。f(x) = x*x という関数があり、xの値1が出力1、xの値2が出力4、xの値3が出力9、...と対応づけられているとする。
図01:関数型プログラミング言語-Haskellの例
関数型プログラミングでは、パターンを考える。関数型プログラミング言語Haskellでは、数の和を求めるために次のような方法を用いている。
sum関数は整数値を持ち,結果も整数である.sum:[int]->intと書くことができ,以下のパターンに従って和をとることができる.
sum[n]=n, 数値の和は数値そのものである。
数字の羅列がある場合、次のように書くことができる。最初の数字をn、他の数字をns
であり、(n、ns)=n+、nsである。
上記のパターンで、3、4、5の和を求めることができる。
3+合計 [4,5]
3+ (4+と[5])
3+4+5=12
関数や式がそのスコープ外の状態を変更したり、戻り値だけでなく呼び出し側の関数と観測的に相互作用する場合、副作用があると言われます。関数型プログラミングは、そのような副作用を最小限に抑えることができます。状態変化は、機能入力に依存しない。プログラムの挙動を理解するのに有効です。関数型プログラミングの欠点は、命令型プログラミングに比べて習得が難しいことです。
コマンドプログラミングは、プログラムの状態を変更するステートメントを使用するプログラミングパラダイムです。プログラムがどのように実行されるかを記述することに重点を置いています。Java、C、C言語などのプログラミング言語は、命令型プログラミング言語です。ステップ・バイ・ステップのアプローチを提供します。命令型プログラミング言語には、if, else, while, forループ、クラス、オブジェクト、関数などの構造があります。
図02:命令型プログラミング言語Javaの例
10個の数の和は、Javaで以下のように求めることができます。各反復において、i の値は sum に加算され、sum 変数に代入される。各反復において、総和の値は以前に計算された総和に追加され続ける。
整数の和=0。
for (int i=0; i<=10; i++){.
sum = sum + i.
}
コマンドベースのプログラミングは、学習、理解、デバッグが容易です。状態変数を使用するため、プログラムの状態を容易に見つけることができます。デメリットとしては、コードが長くなることや、スケーラビリティが低くなることが挙げられます。
命令型プログラミングと関数型プログラミング | |
関数型プログラミングは、計算を数学的関数の評価として扱い、状態や変数データの変更を避けるプログラミングパラダイムである。 | 命令型プログラミングは、ステートメントを使ってプログラムの状態を変化させるプログラミングパラダイムです。 |
構造 | |
関数型プログラミングは、関数呼び出しと高階関数で構成されています。 | コマンドプログラミングには、if, else, while, forループ、関数、クラス、オブジェクトが含まれます。 |
プログラミング言語 | |
Scala、Haskell、Lispは関数型プログラミング言語です。 | C、C++、javaは必須のプログラミング言語です。 |
献辞 | |
関数型プログラミングは、最終的な結果にこだわります。 | コマンドベースのプログラミングは、プログラムがどのように実行されるかを記述することに重点を置いています。 |
シンプル | |
関数型プログラミングは難しい。 | コマンドベースのプログラミングをより簡単に。 |
プログラミングパラダイムは、コンピュータプログラムの構造や要素を構築するためのスタイルを提供します。関数型プログラミングと命令型プログラミングはそのうちの2つです。関数型プログラミングと命令型プログラミングの違いは、関数型プログラミングでは計算を数学的な関数として扱い、状態や変数データの変更を避けるのに対し、命令型プログラミングではプログラムの状態を変更するステートメントを使用することです。
1. "命令型プログラミング", ウィキペディア, ウィキメディア財団, 2018年3月28日.ここで提供される 2. "関数型プログラミング"、ウィキペディア、ウィキメディア財団、2018年3月28日。ここで入手可能 3. computerphile.youtube, YouTube, 30 August 2013.ここで入手可能 2. "関数型プログラミング", Wikipedia, Wikimedia Foundation, 2018年3月28日 3. Computerphile. YouTube, YouTube, 2013年8月30日