宣言型プログラミング 単語

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

1.5千文字の記事

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

概要

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

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

社訓

  • 業務終了後、動物園内の全ての虎は満になっていなければならない。
  • 虎を死亡させてはならない。
  • 当園には虎A, B, Cがいる。
  • 虎は空腹か満かのいずれかである。
  • 虎に餌を与えると満になる。
  • の虎に餌を与えると死亡する。

以下の3点に着したい。

  • オブジェクト指向では、「虎A, B, Cに餌をやる。」という飼育員への作業文であったのに対し、宣言型プログラミングでは「全ての虎は満になっていなければならない。」という「的」の「宣言」が文となっている。
  • 他の文も定義を「宣言」しているだけで、飼育員に「何をしろ」とは言っていない
  • 宣言の順番が変わっても意味は変わらない。

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

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

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

賛否

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

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

参照透過性

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

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

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

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

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

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

関連項目

この記事を編集する

掲示板

掲示板に書き込みがありません。

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
もっと見る

急上昇ワード改

最終更新:2025/12/05(金) 21:00

ほめられた記事

最終更新:2025/12/05(金) 21:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP