質問
私はプログラミング、宣言型と命令的パラダイムの二つの主要なパラダイムを勉強しています。
:私のような私の教科書やウィキペディア上で作られたあいまいな文、次苦労しています、宣言: - コンピュータがやっている「何か」に焦点を当てています。 - 「副作用」の自由です - 制御フローなし
が不可欠: - コンピュータはそれを行う必要があり、「どのように」に焦点を当てています。 - アクションのシーケンスの面でそれを行う方法を
あなたはどのように2つのプログラミングパラダイムを区別するのでしょうか?あなたが上記の発言に拡張することができれば、それは非常に参考になります。
解決
SQLは、古典的な宣言型言語である:あなたは「この表を見て、私にこれらの基準を満たすすべての行を与える」と言う(および使用実生活に参加し、選択リスト、何でも、それは同じ基本的な声明です) 。あなたは上で述べたように、この文は、コンピュータが何をしたい、それをしない方法について説明します。
内部的には、データベースシステムは、Cなどの言語で実装されており、あなたのSQLクエリは、次の不可欠のステップに変換されます。
while (another row to process)
read row from disk
for (every test)
if (test fails)
continue to next row
add row to result-set
ここで注意すべき重要なことの一つは、明示的に制御フローは次のとおりです。の中にの、のためのの、およびの場合の。これらは、宣言型言語で表示されません。
他のヒント
命令型プログラミング順次下層の状態を操作することができるステートメントを実行します。
Javaでいくつかの命令型プログラミングます:
Customer customer = null;
// first create a customer and have the variable reference it
customer = new Customer();
// the state of the customer variable has changed
// set the id on whatever object is *currently* being referenced by the variable
customer.setId(1);
// the state of the Customer object has changed
customer.setFirstName("Bob");
customer.setLastName("McBob");
ご注文のうち、上記をすれば、それはnullポインタ例外につながることに注意します:
Customer customer = null;
customer.setFirstName("Foo"); // the customer variable is still null at this point
customer = new Customer(); // too late!
宣言型プログラミングは、単に宣言を状態や順序を持っていません。
ここでは簡単な例である - このXMLスニペットは、宣言と考えることができます:
<NewCustomers>
<Customer>
<Id>1</Id>
<FirstName>Bob</FirstName>
<LastName>McBob</LastName>
</Customer>
</NewCustomers>
それはちょうど部品を宣言し、顧客オブジェクトが構築されますかについて話しません。どのように上記の解釈と実行されますと、プログラミング環境次第です。
HTMLとWebブラウザは、それぞれ、各パラダイムのかなり良い例です。 HTML(およびCSS)は、の宣言型のの言語です - あなたは、の方法のそれを行うには、のものをのマークアップするWebブラウザを教えてくれますが、ありません。テキスト「マイタイトル」との見出しタグを - - 言い換えれば、<h1>My title</h1>
ようなコードの行は、のものをの表示するには、Webブラウザに指示します。しかし、今どのように実際に画面上に描画します
Webブラウザが、しかし、一般的にの急務の形で書かれています。これは、の方法の画面上にそれらの要素を描画するために、これらの宣言型マークアップの定義を取り、実際にコンピュータに指示します。