【従来での手続き型言語の場合】
従来での手続き型言語におけるプログラミングでは、書いたプログラムの命令の順番に従って、
処理が行われました。例えば、次のような処理を行うとします。
この処理は、Aの値をBに代入し、そのBの値をCに代入し、そのCの値をDに代入して、EにA,B,Cの合計を代入するものです。
この場合、プログラマは順序に注意を払う必要があります。すなわち、もし、
E=A+B+Cを最初に記述したならば、まだB,Cに値が代入されないままでEを計算することになってしまいます。 この方式は、現在使うことができる手続き言語ならば、たとえどのような言語であっても同じです。つまり
代入の順序は書いた命令の順序となります。 なぜなら、現在実行している命令が終わったらその命令の次の命令が実行されるという遂次型での処理がなされているからです。
【R3Dでのプログラミングの場合】
一方、R3Dでは、データの代入順序はR3Dが自動的に判断してくれますので、プログラマは、もっぱらそのデータがどのデータから導かれるのかという因果関係だけに着目して定義するだけでよくなります。さらに、プログラムという意味では各フィールドごとにプログラムが独立していますので、プログラマはその中で閉じて考えるだけでよくなります。そして、R3Dが記述されたデータの因果関係に基づいて順番にデータの代入処理を実行してくれるのです。
次にR3Dでのプログラム例を示します。前述の手続き型で記述されたプログラムは以下のようにフィールド単位での定義記述だけでよくなります。
つまり、このフィールドはどのデータから導かれるのかということだけを定義することになります。
この定義文のことを「導出定義文」といい、これが言わばR3Dでのプログラミングとなります。
フィールド:A= |
|
フィールド:B= |
f.A |
フィールド:C= |
f.B |
フィールド:D= |
f.C |
フィールド:E= |
f.A+f.B+f.C |
R3Dでは、定義された各データの因果関係情報が内部的に保持され、データの更新は、その情報に基づき、自動的に、かつ連鎖的に更新されていきます。
いわば玉突きのような動きでデータ更新がなされます。
つまり、各フィールドの導出定義文を書いていくうちにそれらが自動的につなげられていくということでもあります。
実は、これがデータ駆動型と呼ばれる理由でもあります。