命令型プログラミング
宣言型・命令型・手続き型の違いを、商品代金計算に例えると以下のようになる。ここでは + がオペレータ(演算子・関数・手続き・ルーチン)である。特典ポイント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にもなる。状態遷移がオペレータの結果にも反映されるのが副作用である。