宣言型と命令型と手続き型
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/14 14:18 UTC 版)
「命令型プログラミング」の記事における「宣言型と命令型と手続き型」の解説
宣言型・命令型・手続き型の違いを、商品代金計算に例えると以下のようになる。ここでは + がオペレータ(演算子・関数・手続き・ルーチン)である。特典ポイント5%と消費税10%のルールは計算式外部の状態(state)に記憶されている。 宣言型は、100円+200円の問いに、300円の答えを出す。状態は見ない。 命令型は、100円+200円の問いに、300円の答えを出して5%特典による15ポイントを状態に記憶させる。 手続き型は、100円+200円の問いに、状態からの消費税10%を加算して場合によっては以前の15ポイントを割り引いた315円の答えを出す。 宣言型は、+をただ数を足す計算にしており、当たり前に聞こえるがこれが数学的と言われる。declarative(宣言的)とは計算の平叙性を意味しており、オペレータの計算をその定義のままに把握できる。 命令型は、100+200の答えの、5%特典を計算式外部の状態に記憶させている。この計算式枠外の状態を変化させるという計算は、従来の数学には無いものなのでこれがimperative(命令的)と言われた。状態変化のコマンドを用いるだけの計算式も書ける。 手続き型は、100+200の答えを、状態内の消費税と照らし合わせて解釈して330にする。計算式枠外の状態を吟味しつつオペレータの計算を進めるのがprocedural(手続き的)と言われる[要検証 – ノート]。更にそれがその時の状態内のポイントの多さで315や305にもなる。状態遷移がオペレータの結果にも反映されるのが副作用である。計算式が状態を変化させることと、計算式が状態の影響を受けることは通常セットになるので、命令型と手続き型は後に融合的に扱われるようになった。[要検証 – ノート] 手続き型がしばしば、命令文を順次実行していくや記憶領域に代入して状態を変化させていくなどと説明されるのはこのためである。副作用の活用は、より小さなメモリ容量でのより効率的なプロセス拡充をもたらせたので、命令型パラダイムはノイマン型コンピュータプログラムの基本になった。 なお、プログラミング視点での手続き型は、命令型プログラムに手続きの定義と呼び出しの機能を加えて、構造性とモジュール性を備えさせたパラダイムを意味している。高水準言語の普及後はこの意味の方が一般的になった。 命令型に対する宣言型というプログラミング理論構図が重視され始めたのは1970年代からであり、副作用によるオペレータのブラックボックス化偏重への見直しがその動機になっている。副作用を前提にした命令型に対して、参照透過性を前提にしてオペレータのホワイトボックス化を重視しているのが宣言型である。 なお、冒頭の状態を見ないという宣言型の説明ではまともなプログラムも作れないように思えるが、宣言型では問いと答えに状態も含めてしまうという方法で、命令型と同等の表現を可能にしている。そこで用いられるのが部分構造論理由来の部分構造型システム(英語版)や圏論由来のモナドであり、詳細は割愛するが参照透過性もそれで維持される。従って補正するとこうなる。 宣言型は、(100円&状態)+200円の問いに、引数状態からの消費税10%を加算して、返り値状態に特典15ポイントを収めた、(330円&状態)の答えを出す。
※この「宣言型と命令型と手続き型」の解説は、「命令型プログラミング」の解説の一部です。
「宣言型と命令型と手続き型」を含む「命令型プログラミング」の記事については、「命令型プログラミング」の概要を参照ください。
- 宣言型と命令型と手続き型のページへのリンク