ニコニコ大百科モバイル

7/2(月)よりスマホまたはPCでアクセスした場合、各デバイス向けのサイトへ自動で転送致します


宣言型プログラミング


ヨミ: センゲンガタプログラミング

宣言型プログラミングとは、定義を宣言する形でプログラミングしようとするプログラミングパラダイムである。


概要


関数型言語では、宣言型プログラミングと言って物事の関係性を「宣言」する形でプログラミングするスタイルが奨励されている。発想としては論理型言語と似ている。

オブジェクト指向で挙げた例にあわせて、動物園の飼育員(コンピューター)へのマニュアル(プログラム)に例えて書くと以下のような雰囲気になる。


社訓


以下の3点に着したい。

さて、このマニュアルを受け取った飼育員はどのように行動するのか。

  1. 全ての虎は満になっていなければならない。 → 「全ての虎」って何?
  2. 当園には虎A, B, Cがいる。 → ああ「虎A, B, C」のことね。
  3. 虎に餌を与えると満になる。 → 満にするには「虎A, B, C」に餌をあげればいいのね。
  4. の虎に餌を与えると死亡する。虎を死亡させてはならない。 → おっと、満の時には餌をあげないようにしないと。
  5. 虎は空腹か満かのいずれかである。 → なるほど。満でない虎、つまり空腹の虎にだけ餌をあげればいいのか。

ということで、この飼育員は虎A, B, Cのうち空腹な虎にのみ餌をやるという行動を取る。実際のプログラミング言語理系はここまでは忖度してくれない。


賛否


的」と「定義」だけ順不同で「宣言」さえすれば、作業内容を示しなくても自動的に動作が組み上がる優れたプログラミングパラダイムであるというがある。そのような文脈では、命を記述しない宣言型プログラミングに対し、コンピューターに対するを記述する従来のスタイルを命プログラミングと呼んで区別する。

一方で、宣言型プログラミングでは定義から実際の動作を予想するのが難しく、動作内容やアルゴリズムを細かく制御することが困難になるという批判もある。


参照透過性


宣言の順番は関係ないと書いたが、再代入により宣言に使われている変数の中身が変わってしまうと、その宣言が使用されるタイミングによって宣言が正しくなくなる場合が出てくる。

いつ実行されても結果が変わらないことを保するには、変数イミュータブルである参照透過性が必要になる。


リアクティブプログラミング


変数参照透過でなければならず、再代入で変化してはいけないと書いたが、これでは状態変化を扱うことが難しくなる。そこで出てきた方法論の一つが、リアティプログラミングである。

リアティプログラミングでは、「常にaはbの2倍である」のような変数が変化しても成り立つ「関係」を宣言するという方法で変化するものを取り扱う。

代表的なものにWebフレームワークReactMicrosoft社が提唱したRectiveXがある。


関連項目



最終更新日: 21/05/04 18:20
タグ検索 パソコン版を見る


[0]TOP
ニコニコ動画モバイル
運営元:ドワンゴ