宣言型プログラミングって何?
宣言型プログラミングを一言でいうと、「状態に依存せず、どうやってではなく何なのかを記述していくプログラミング」です。状態に依存するとは何でしょうか?それは、命令型プログラミングでは当たり前にやっていたことです。しかし、命令型プログラミングに慣れている人にとって意識するのが難しいと思います。これから噛み砕いて説明します。
状態の簡単な例を挙げると、「変数値の変化」です。命令型プログラミングでは、変数の値を変えていきます。合計値を計算する過程を思い浮かべると分かりやすいと思います。合計値を命令型プログラミングで求める場合、総合計を格納する変数を宣言し、ループ構文を使って繰り返し値を加算していきます。この時、総合計を表わす変数に値を加算していくのが命令型プログラミングのやり方です。一方、宣言型プログラミングでは、個々の値を関数に渡して総合計を得ると考えます。つまり、計算過程に注目せず、繰り返して加算するという「どうやって」ではなく、総合計とは「何か」と考えるのです。
普通の人は「どうやって」と「何か」のどちらに注目するのかは、些細な差だと思えるでしょう。結局はプログラミングであり、細かく機械に指示する必要があります。「何か」に注目していても、いつかは「どうやって」に行き着きます。しかし、この些細な考え方の差は意外と大きなものです。
一番差を感じやすいのは、並列処理プログラミングです。並列処理を「どうやって」と考えると、状態の変化を制御するのが難しくなります。何故ならば、複数のCPUがあっても、メモリは一つであり、一つの目盛を複数のプログラムが読み書きするのですから、どうしても不都合が生じます。「どうやって」を考えると、この不都合で頭がいっぱいになります。一方、「何か」に注目すると、計算過程を無視できるので、状態変化と整合性に注目しなくてもよいようになります。これはあくまでも一例です。並列処理に限らず、「どうやって」ではなく「何か」を記述すると、プログラムの主体が明確になり読みやすくなります。また、状態を無視出来るのでテストも行いやすくなります。そういったことから近年、宣言型プログラミングの需要が高まっています。
もしかしたら、昔からプログラミングをしている人は、命令型プログラミングの考え方に染まって、宣言型プログラミングの考えに違和感や抵抗感を覚えるかもしれません。しかしながら、これからのソフトウェアやシステムを考えたとき、宣言型プログラミングは避けて通れません。考え方そのものは簡単なので、まずは覚えるとよいと思います。宣言型と命令型の思想について判断を下すのは、覚えた後からでも遅くはないはずです。それに、私たちはプロであり、お客様が求める物を作ることを第一のはずです。求められているものは素早く習得し、好みの問題は後でじっくりと考えるのが最善だと思います。