条件PやQを書くには副作用のない関数(のようなメソッド)が必要です。条件の評価のときに副作用があると、話がとんでもなくややこしくなります。また、条件評価で例外が生じたりするのも望ましくないので、副作用がなくエラーしない関数的メソッドが欲しいわけで、そういうメソッドはアクセッサ、オブザーバー、クエリーなどと呼んだりします。
一方、実行部のところには、メソッド呼び出しか単純代入文(var = method();)を並べるだけにします。これも話をややこしくしないためです。実行部に並べるメソッドのほうは、アクション、コマンド、ミューテータなどと呼びます。(ここまでの話は、何度かしたことがあります。)
さて、最近、実行部のところをもう少し抽象化したいと思っています。メソッド呼び出しだけでなくて、たとえば、HTTP GET/POSTでやってきたリクエスト+パラメータとかも同じ枠組みで考えたいのですね。そこで、実行部のところには、外部からやって来たメッセージ(あるいはシグナル)の列を書くのだ、と考えます。メソッド呼び出しもメッセージだと思えばいいので、言葉使いとそれに伴う雰囲気が変わるだけ、とも言えます(が、その効果は無視できないものがあります。)
メッセージとメッセージが引き起こす内部効果は別物なので、MESSAGE causes EFFECTのような書き方をしましょう。さらに、EFFECTは状態遷移と外部へのメッセージ(イベントと言ったほうがお馴染み?)発信に分けて、例えば、次のように書きます(別に記述構文はどうでもいいのですが)。
on (value() >= 0) receiving {inc();}
results (value() > 0)
emits {valueChanged();}
これは、「(value() >= 0)の状態で、{inc();}というメッセージを受け取ると、(value() > 0)の状態になり、{valueChanged();}というメッセージ(イベント)が発行される」ということです。
(続く)