私はプログラミングの2つの主要なパラダイム、宣言型パラダイムと命令型パラダイムを研究しています。教科書やウィキペディアで行われた次のようなあいまいな発言を理解するのに苦労しています。
宣言型:-コンピュータが行うことの「何」に焦点を当てます。-「副作用」がない-制御フローなし
必須:-コンピュータがそれを行う「方法」に焦点を当てます。-一連のアクションの観点からそれを行う方法
2つのプログラミングパラダイムをどのように区別しますか?上記のステートメントを拡張できれば、非常に役立ちます。
私はプログラミングの2つの主要なパラダイム、宣言型パラダイムと命令型パラダイムを研究しています。教科書やウィキペディアで行われた次のようなあいまいな発言を理解するのに苦労しています。
宣言型:-コンピュータが行うことの「何」に焦点を当てます。-「副作用」がない-制御フローなし
必須:-コンピュータがそれを行う「方法」に焦点を当てます。-一連のアクションの観点からそれを行う方法
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
ここで注意すべき重要な点の1つは、明示的な制御フローです。while、for、およびif。これらは宣言型言語では表示されません。
命令型プログラミングは、基礎となる状態を操作する可能性のあるステートメントを順番に実行します。
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ブラウザーは、通常、必須の方法で作成されます。これらの宣言型マークアップ定義を使用して、実際にこれらの要素を画面に描画する方法をコンピューターに指示します。