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

センゲンガタプログラミング
1.5千文字の記事
  • 0
  • 0pt
掲示板へ

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

概要

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

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

社訓

  • 業務終了後、動物園内の全ての虎は満になっていなければならない。
  • 虎を死亡させてはならない。
  • 当園には虎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がある。

関連項目

【スポンサーリンク】

  • 0
  • 0pt
記事編集 編集履歴を閲覧

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

奥野田美宵 (単) 記事と一緒に動画もおすすめ!
提供: エモ・パチーノ
もっと見る

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

宣言型プログラミング

まだ掲示板に書き込みがありません…以下のようなことを書き込んでもらえると嬉しいでーす!

  • 記事を編集した人の応援(応援されると喜びます)
  • 記事に追加して欲しい動画・商品・記述についての情報提供(具体的だと嬉しいです)
  • 宣言型プログラミングについての雑談(ダラダラとゆるい感じで)

書き込みを行うには、ニコニコのアカウントが必要です!


ニコニコニューストピックス