「命令型プログラミング」の版間の差分
削除された内容 追加された内容
見出し |
|||
(同じ利用者による、間の3版が非表示) | |||
2行目:
{{No footnotes|date=2021年3月}}{{プログラミング・パラダイム}}
'''命令型プログラミング'''({{lang-en-short|Imperative Programming}})は、[[プロセス|プログラム]]の{{仮リンク|状態(計算機科学)|en|State (computer science)|label=状態}}を変化させる[[文 (プログラミング)|ステートメント]]を基本文に用いる総称的な[[プログラミングパラダイム]]であ
[[文 (プログラミング)|ステートメント]]上の[[コマンド (コンピュータ)|コマンド]]で状態は変化され、変化した状態の参照でステートメントの動作も変化することは[[副作用 (プログラム)|副作用]]と呼ばれる。コマンドと副作用の存在によって命令型プログラミングは、各[[サブルーチン|オペレータ]]を状態の遷移と照らし合わせて解釈することになる。このことから命令型はhow a program operates(どう処理するか)と形容される。
==宣言型と命令型と手続き型==▼
[[宣言型プログラミング]]の基本文の[[式 (プログラミング)|式]]の方針は、コマンドと副作用を持たないことなので、そこでの[[参照透過性|参照透過]]な各オペレータは、その定義のままに把握できる。このことから宣言型はwhat a program accomplishes(なにを果たすか)と形容される。
宣言型、命令型、手続き型の違いを、商品代金計算に例えると以下のようになる。ここでは + がオペレータである。円は型(type)である。特典ポイント5%と消費税10%のルールは計算式外部の状態(state)に記憶されている。▼
▲==宣言型と命令型と手続き型==
▲宣言型
* 宣言型は、100円+200円の問いに、300円の答えを出す。状態は見ない。
13 ⟶ 15行目:
* 手続き型は、100円+200円の問いに、状態からの消費税10%を加算して場合によっては以前の15ポイントを割り引いた315円の答えを出す。
命令型は、100
▲命令型は、100円+200円の5%特典を計算式外部の状態に記憶させている。この計算式枠外の状態を変更させるという計算は、従来の数学には当然無いものなので、これが命令的と言われた。答えを出さずに状態を変更させるだけの計算式も書けた。状態の関与でオペレータの働きが左右されることから、これが「どう処理するか」になる。この特徴による命令型の基本文は[[ステートメント]]とされて、数学的には[[式 (プログラミング)|式]]の[[直積集合|直積]]と解釈される。
なお、
▲元々の[[手続き型プログラミング|手続き型]]は、計算式の答えが状態の影響で変化するという仕組みを意味しており、計算の実行に合わせて計算枠外の状態も鑑みられることから、これも「どう処理するか」になる。変動する状態の答えへの影響波及は[[副作用 (プログラム)|プログラム副作用]]と言われる。それに対しての宣言型は、状態に影響されずに同じ問いへの答えが不変であるという仕組みを意味しており、これは[[参照透過性]]と言われる。計算式が状態を変えることと計算式が状態の影響を受けることはコンピュータ運用上はセットになるので、命令型と手続き型は後に同じ意味で扱われるようになった。手続き型がしばしば、命令文を逐次実行していくや記憶領域に値を代入して状態を変えていくなどと説明されるのはこのためである。状態による計算式の処理内容および答えの変遷は、プログラムの[[複雑系]]的拡充をもたらしたので、命令型プロセスは[[ノイマン型コンピュータ]]の基本になった。
命令型に対する[[宣言型プログラミング|宣言型]]というプログラミング理論構図が重視され始めたのは1970年代からであり、[[副作用 (プログラム)|副作用]]によるオペレータのブラックボックス化偏重への見直しがその動機になっている。[[副作用 (プログラム)|副作用]]を前提にした命令型に対して、[[参照透過性]]を前提にしてオペレータのホワイトボックス化を重視しているのが[[宣言型プログラミング|宣言型]]である。
▲なお、一般的なプログラミング視点での[[手続き型プログラミング|手続き型]]は、命令型プログラムに[[手続き]]の定義と呼び出しの機能を加えて、構造性とモジュール性を備えさせた[[プログラミングパラダイム|パラダイム]]を意味している。[[高水準言語]]の普及後はこの意味の方が一般的になった。
* 宣言型は、(100円&状態)+200円の問いに、引数状態からの消費税10%を加算して、返り値状態に特典15ポイントを収めた、(330円&状態)の答えを出す。
== 命令型プログラムの概要 ==
31 ⟶ 35行目:
==命令型言語の歴史==
最初の命令型言語はコンピュータ本来の[[機械語]]であった。1949年に機械コードを[[ニーモニック]]に置き換えた[[低水準言語]]の[[アセンブリ言語|アセンブラ]]が登場した。機械語とアセンブラの命令は非常に単純であり、ハードウェアの実装は容易になっていたが、複雑なプログラムの作成は困難だった。1954年から[[IBM]]の[[ジョン・バッカス]]が、初の[[高水準言語]]「[[FORTRAN]]」を開発した。FORTRANは機械語やアセンブラでの複雑なプログラム作成の困難さを克服
1980年代になると[[オブジェクト指向プログラミング|オブジェクト指向]]が急成長を遂げた。オブジェクト指向言語の多くは命令型のスタイルであるが、[[オブジェクト (プログラミング)|オブジェクト]]を扱う機能が追加されている。1967年から開発されていた初のオブジェクト指向言語「[[Simula]]」や、Simulaを参考にして[[ビャーネ・ストロヴストルップ]]が1979年から[[C言語]]を拡張設計した「[[C++]]」がある。[[C++]]の登場は1983年で最初の実装は1985年である。1980年代後半から1990年代にかけてはオブジェクト指向のコンセプトを導入した命令型言語が次々と登場した。
41 ⟶ 45行目:
==関連項目==
*[[ノイマン型コンピュータ]]
*[[コマンド (コンピュータ)|コマンド]]
*[[副作用 (プログラム)|副作用]]
*[[操作的意味論]]
*[[機械語]]
*[[アセンブリ言語]]
|