手続き変数を使う

Spinelでは、手続き変数という機能があります。
この手続き変数は、使い方によってはかなり強力な機能となります。

手続き変数とは?

まず手続きについて説明しようと思います。
Spinelでは、手続きは関数とほぼ同じ意味です。
厳密には関数は戻り値を返しますが、手続きは戻り値を返さない(返せない)ものです。
「手続き」という言葉を使うのはこの手続き変数のみです。

手続き変数とは、手続きを変数に代入できる機能です。
手続き変数
1
2
3
4
5
Proc = {
  Mes("手続き変数です。");
}

Proc.Call;
このように、代入する文を「{}」で囲んで変数に代入します。
呼び出すときは、「変数名.Call」と書きます。

いままで勉強してきた知識から言うと、はっきり言ってムダな構文です。
なぜなら...
書き換え
1
2
3
4
5
function Proc(){
  Mes("関数");
}

Proc;
↑とまったく同じだからです。
ですから、上の例のように「Proc.Call」のように直接呼び出して使うものではありません。
もちろん、そのように使ってもいいのですが。

手続き変数の利用法

では、手続き変数の便利な使い方をお教えします。
Spinelでは、イベントというものがあります。
イベントとは、ボタンをクリックした、マウスが動いた、などの動作の際に行われる処理を言います。
このイベントは、すでにイベントを使おうで使っています。
イベントの設定
1
2
3
4
5
6
Event = {
  Mes("ボタンが押されました。");
}

Btn = CButton.Create;
Btn.OnClick = Event;
こんな感じですね。イベントを使おうで使用したのは。
ですが、プロパティは変数と同じように使えるので
イベントの直接設定
1
2
3
4
Btn = CButton.Create;
Btn.OnClick = {
  Mes("ボタンが押されました。");
}
このように、直接代入することも出来ます。

さらに高度な使い方

この手続き変数は、イベント以上に便利な使い方があります。
それは、関数の引数に文を渡すことが出来るという点です。
これが可能になることで、forやifのような制御構文のような関数を作ることも可能です。

では、早速関数を作ってみましょう。
今回作るのは、指定された回数だけ単純にループする関数です。
つまり、関数内でforを使い、指定回数だけCallするだけです。
ループ命令
 1
2
3
4
5
6
7
8
9
10
11
function Loop(n,Proc){
  for(var i = 1;i <= n;Inc(i))
    Proc.Call; //呼び出し
}

//使う
s = {
  Mes("ループ");
}

Loop(3,s);
こんなに簡単に出来ちゃいました。
こうやって引数に文を渡せるのは、使い方によっては非常に便利で効率の良い
プログラムを作ることが出来るのです。
前へ / index / 次へ
プログラム言語「Spinel
Copyright © 2005 - Giemsa All Rights Reserved.
NOTES Software.