大域変数
数値にわかりやすい名前をつけることは、名前付き入力引数や局所変数のところで見たように、便利な簡約法です。 ところが、同じくそこで見たように、それらの変数の種類はどちらも局所的なものであって、 プログラム内の非常に限られた領域、つまり一つの定義の範囲内でしか適用できません。 しかし、Mopsは、数値に容易に特定できる名前を付けてプログラム全体で利用できるようにするために、VALUEと呼ばれる機構も持っています。
あなたのプログラムは、たくさんの異なる値を保有することができます。というのは、各値に特有の名前をつけて数値をそこに格納することができるからです。 valueは次のように定義します。:
25 value Jane
言い換えると、JANEという名前のvalue(値)は数値25を保有します。 あるvalueの数値を呼び出すには、そのvalueの名前をタイプするだけでよいのです。 その数値のコピーがパラメタースタックに置かれます。次のように打ち込めば:
Jane
25がスタックに置かれます。
注意:あなたが既に他の(かなり古い)Forthをご存知であれば、VALUEは「自己-取り出し(self-fetch)変数」と呼ばれたりするものに当たります。
valueは本質的には局所変数の大域版(プログラム内の全ての定義からアクセスできます)であって、操作も似通っています。 valueに現在と異なる数値を格納するには、次のようにgazinta(格納の矢印)を用いることができます。:
37 -> Jane
これは、もとの数値(25)の上に37を上書きします。 この他に、++>ないし-->演算を次のように使って、valueに格納されている数値を増やしたり減らしたりすることができます。:
17 ++> Jane
4 --> Jane
このコードは、JANEに既に格納されている数値(37)にまず17を加算し、 その後で4を減算します。 もちろん、負の数を加算することによって引き算をすることもできます。:
-10 ++> Jane
プログラムの始めに、特定の値を格納しておくことなくvalueを定義したい場合は、単に全部ゼロを入れておくことができます。
0 value Joe
0 value Nancy
そして、後で必要になったときに数値を格納(->)すればよいのです。
注意:VALUEのために特定した初期値はプログラムがMopsによってロードされたときに設定されます。 あなたのアプリケーションをリロードすることなく再スタートする場合、VALUEは、何であれあなたがそこに最後に格納した値を保有しています。 初期値ではありません。
*
理論はここまでにしましょう。 ここまでのレッスンにあった全ての議論と実例を集めて、実際のMopsアプリケーションの中に飛び込むべきときがやってきました。
最終更新:2018年12月09日 14:29