XMLマスターポイントレッスン ~ プロフェッショナル(データベース)編 ~
第2回 XQueryの概要

Column XQueryと関数型プログラミング

プログラミング言語としてのXQueryはほぼ純粋な関数型言語です。関数型言語とは、ラムダ計算という数学理論に基づいて、すべての処理を関数で行なう言語のことを言います。代表的な関数型言語にはLISP、APL、ML(注A)などがあります。

注A:LISPには参照透過性がないため、「広義の関数型言語」と呼ぶこともあるようです。

C++やJavaのような手続き型言語と異なり、関数型言語には代入文がありません。また、変数は宣言の際に初期化した後、プログラムが完了するか、変数が無効になるまで値が変化することはありません。このような性質を「参照透過性」と言います。
参照透過性のある言語には次のような利点があり、メンテナンスしやすいプログラムを作成できると言われています。

(1) 変数が変化しないことから副作用が発生しないため、副作用によるバグが発生することがない(注B)

注B:例えば、以下のような関数はグローバル変数eの値を更新しているため、eを使用するほかの関数で意図しない結果が発生する可能性があります。

 int sample( int a ) {
 e += a ;
 }

このように、ほかの機能からも参照/更新できるような変数の更新(ファイルの更新なども含む)を行なうことを副作用と呼びます。副作用を多用すると、プログラムのどこで何が更新されているのかを把握するのが困難になり、見通しの悪いプログラムとなってしまいます。


(2) 関数に同じ変数を与えれば常に同じ結果が返されるので、制御の流れの管理に気を遣う必要がない。また、制御誤りによるバグが発生しにくい

(3) 変数の値が常に同じで制御の管理も楽なので、プログラムが理解しやすくなる

関数型言語のプログラムは「式」のみから構成され、すべての式は何らかの値を返します。例えば、本文で示したif式も値と型を持っています。
手続き型言語に慣れ親しんだプログラマは、このような関数型言語の特徴に違和感を感じることが多いようです。しかし、XQueryのように使用する場面や用途が限定される言語の場合は、実際に使ってみるとすぐに違和感がなくなります。
「習うより慣れろ」と言いますが、実際に使ってみることがXQuery習得の早道かもしれません。


<掲載> P.189-193 DB Magazine 2007 June

ページトップへ▲

XMLマスターポイントレッスン ~ プロフェッショナル(データベース)編 ~ 記事一覧へ戻る

HOMEへ戻る