宣言型と手続き型プログラミングのパラダイムの違いは何ですか?


回答:


108

命令的

手続き型プログラミングパラダイムやオブジェクト指向プログラミングパラダイムなど、命令型プログラミングパラダイムにはいくつかのサブパラダイムがあります。

命令型プログラミングパラダイムでは、さまざまな程度の抽象化でアルゴリズムを段階的に説明します。

手続き型パラダイムをサポートするプログラミング言語の例:

  • C(および他のほとんどのレガシー言語)
  • PHP、ほとんど
  • ある意味で、すべての主要言語

オブジェクト指向

通常、タイプの階層を示す言語を指します、メソッドと状態の両方を基本型から派生型に継承するは異なるプロトタイプベースのJavaScriptも含まれます。

OOパラダイムをサポートするプログラミング言語の例:

  • ジャワ

宣言的

関数型や論理型のプログラミングパラダイムなど、宣言型プログラミングパラダイムにはいくつかのサブパラダイムがあります。

宣言型プログラミングパラダイムでは、結果または目標を記述し、「ブラックボックス」を介してそれを取得します命令の反対

宣言型プログラミングパラダイムをサポートするプログラミング言語の例:

  • ヤック
  • ツリートップ
  • SQL
  • 正規表現
  • lex
  • XSLT
  • マークアップ、troff、CSS、VHDL

機能的

関数型プログラミングは、副作用のない、変更可能な状態のない関数の適用を強調しています。上記の宣言型システムは、関数型プログラミングの特定の側面を示しています。

宣言的関数パラダイムをサポートするプログラミング言語の例:

  • ハスケル
  • OCaml
  • スキーム
  • アーラン
  • F#
  • Scala

61

宣言型プログラミングは、それを行う方法を言う必要なしに、あなたが望むものを言うところです。手続き型プログラミングでは、結果を得るために正確な手順を指定する必要があります。

たとえば、クエリは結果を生成する手順を指定しないため、SQLは手続き型よりも宣言型です。


2
+1はSQLの良い例です。もっと例を挙げてもらえますか?
モーリス2009年

5
モーリス:おそらくプログラミング言語ではないかもしれませんが、HTMLは宣言的です。なぜなら、「ドロー文字列、メジャー文字列、事前位置など」と書くのではなく、必要なもの(このビットが太字の段落)を記述するためです。別の例はプロローグであり、「プログラム」は宣言的なファクトと関係/控除のセット、およびクエリです。Prologエンジンは、クエリを評価する方法を見つけ出します。その方法を教える必要はありません。最後に、正規表現:一致をテストする手順を詳しく説明するのではなく、パターンを説明します。
itowlson

MXML(Flexフレームワークの一部)は宣言型です。オブジェクト/コンテナを表示する順序を指示し、水平または垂直にレイアウトするように指示したかどうかに応じてレイアウトを処理します。ActionScript 3は、OOPパラダイムをサポートする手続き型です。
Hoorayイム、

メイクファイルは、別の非常に有名な宣言型言語である
ステファノBorini

25

実例を挙げましょう。お茶が必要です。

手続き:

  1. キッチンに行く
  2. 砂糖、牛乳、お茶を手に入れ、
  3. それらを混ぜて、沸騰するまで火にかけます
  4. カップに入れて持ってきて

宣言:

  1. お茶を一杯ください。

手続き型言語では、プロセス全体を定義し、その手順を提供します。注文を提供し、プロセスの提供方法を​​定義するだけです。

宣言型言語では、コマンドまたは順序を設定し、その順序を完了する方法をシステムに設定します。あなたはそれがどのように行われるべきかを掘り下げることなくあなたの結果を必要とするだけです。


2
この非常に単純化された例は、実際に私に要点を示しました(少し)。しかし、違いを理解しようとすることで、まだ1つ問題があります。「お茶を1杯」コマンドがない場合はどうでしょうか。次に、自分で作成する必要がありますか?もしそうなら、手続き型の例のような関数を作成しませんか?私が混乱しているのは、手続き型宣言型のように見えることですは特定の言語の固定プロパティではなく、その言語の使用方法のことです。それが利用可能な方法であれば、Javaで「お茶を1杯飲みなさい」と言うことができます...
Magnus W

3
「1. Tea、Earl Grey、Hot」が良い例でしょうか。実行する必要があるアクションではなく、配信する必要があるものを宣言します(「Get me ...」)
JeffUK

マグナス、あなたの質問は完全に正しいです。私の意見では、宣言型言語はより高級な言語であり、手続き型言語から派生しています。開発者がコマンドラインを使用して2つの数値を追加する必要がある時期を覚えていますか?単純な関数で2つ以上の数値のSUMを取得できるようになりました。したがって、私の見方では、「Get me a cup of tea」コマンドがない場合は、作成する必要があります。次の人が使おうとしたらそこにいます。それは私の知識不足によるものです。ありがとう
Muhammad Zeeshan Tahir

5

手続き型プログラミング:

手続き型プログラミングでは、プログラムが開始すると、一連の命令に従います。指示は一部のファイルまたはメモリの内容に基づいて変更される可能性がありますが、全体的には大きく異なりません。プログラムへの入力は、通常、リアルタイムのユーザー入力からではなく、事前に収集されたデータのセットからのものです。

宣言型プログラミング:

宣言型イベント駆動型プログラミングでは、プログラムがデータに対して実行できるオプションのアクションを使用して、データの本体を集中管理します。たとえば、ワードプロセッサの各「イベント」は、データやドキュメントに影響を与えるマウスまたはキーボード(またはファイル)の変更です。それらは任意の順序で実行する必要はありません。イベントドリブンプログラミングは、すべてが共通のデータセットで機能する小さなプログラム(イベントハンドラー)の形式をとるので、各小さなプログラムは同じデータ(この例ではドキュメント)を使用できます。


1

2つのプログラミング言語の主な違いは、私たちがコンピュータを教え、手続き型プログラミングでは、ある方法の問題を解決し、宣言型プログラミングでは、我々はコンピュータ伝えるためにどのような私たちが解決したい問題を。


0

ansibleコメントに対処し、おそらく2つの違いの例を提供します。Ansibleは手続き型であり、人形やテラフォームのようなものが宣言型です。たとえば、次のように10のec2インスタンスをデプロイするansible yamlファイルを作成します。
ます。-ec2:count:10 image:ami-058c6e5b73b074cd2 instance_type:t2.micro

そのファイルを2回実行すると、20個のt2.micro ec2インスタンスが作成されます。terraformなどの宣言型言語で同等のものを記述して2回実行した場合、何回実行しても10個のt2.microインスタンスしか実行されません。宣言型言語は最終状態を指定します。手続き型言語は、現在または過去の状態に関係なく、あなたが言うことを実行するだけです。


-1

YAMLは宣言型プログラミング言語ですか?実際のロジックを記述する代わりに、必要なものを定義するためです。

誰かが構成管理ツールであるAnsibleを知っている場合は、YAMLを使用しますが、それでも手続き型言語のカテゴリに分類されるため、これを求めています。



-2

手続き型アプローチでは、結果を達成するための命令をエンコードします。宣言型アプローチでは、問題を解決するための知識として、何を解決する必要があるかを定義します。両方のアプローチで実装した手続き型または宣言型のアプローチの例をご覧ください。

この例でわかるように、宣言型アプローチでは、問題を解決するようにHOWに指示する必要はありません。


オフサイトの例は、ここに記述されているかのように参照しています。答えの一部として例を取り入れてください。
ChronoFish 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.