変数宣言・定義


■ 宣言・定義

 変数は使用する前に必ず宣言しなくてはいけません。宣言は、キーワード "var" に続けて変数名をカンマで区切って列挙します。

    a = 1;              //  a は宣言されていないのでエラーになる
    var b, c, d;
    b = 1;              //  b は宣言済みなので大丈夫
 変数名に続けて代入文を書くことで初期値を設定することも可能です。 (ViViScript では初期値を指定すると変数オブジェクトの内容を定義したことになるので、これを定義文と呼びます。) 変数定義の場合もカンマで区切って複数の変数を1行で定義することが可能です。
    var x = "えっくす";                 //  変数 x を定義
    console.writeln("x = " + x);
    var a = 1, b = a + 1;               //  変数 a, b をまとめて定義
    console.writeln("a = " + a);
    console.writeln("b = " + b);
 関数の仮引数の宣言は、関数名、カッコの後に仮引数名をカンマで区切って列挙します。 型を宣言する必要はありません(データタイプ参照)。
    function foo(arg1, arg2)                //  仮引数 arg1, arg2 を宣言
    {
        console.writeln("arg1 = " + arg1);  //  仮引数を参照
        console.writeln("arg2 = " + arg2);  //  仮引数を参照
    }

    function main()
    {
        foo(1, 2);
        foo("なおちゃん", "じゅんちゃん");
    }

■ ポインタ

 ViViScript にはポインタはありません。したがってアドレス演算子も、-> 演算子も ->* も無いです。

 メソッド、関数への引数もポインタではなく常に実体のコピーが渡されます (このあたりの事情は Java, JavaScript とは異なります。それらはポインタは無いといいながら、 メソッド、関数コールでは常にポインタを使用しています。知ってました?)。 したがって ViViScript では、関数、メソッドが複数の値を返す場合は、配列やオブジェクトで値を返すようにします。 (splitPath() を参照してください)

■ 記憶クラス

 変数にはグローバル、ローカルの2種類の記憶クラスがあります。関数の外で宣言・定義されたものはグローバル、 関数内はローカルです。当然ながら変数の参照はローカルが優先されます。

    var a = 1, b = 2;
    function main()
    {
        var a = "local a";
        console.writeln("a = " + a);        //  ローカル変数を参照
        console.writeln("b = " + b);        //  グローバル変数を参照
    }
 ブロック内変数はサポートされていません。下記のプログラムは二重宣言エラーになります。
    function main()
    {
        var local;
        {
            var local;
        }
    }