« C.O.F.F.E.E.での配列変数のテスト-1 | トップページ | C.O.F.F.E.E.でポリゴンオブジェクトのポイント »

C.O.F.F.E.E.での配列変数のテスト-2

前回の続き。
配列変数を他の変数に代入。
関数に配列変数を渡す。
関数に渡された配列変数を関数内で要素を変更。
を試してみます。

前回最後のスクリプトに追加。

/*
配列変数テスト
配列変数を代入して配列の1つの要素の値を変更2
2008.12.19
*/


var data_1 = new(array , 5);
var data_2 = new(array , 5);//配列として宣言
var i;

println("data_1 " , data_1);//配列変数の宣言直後に
println("data_2 " , data_2);//確認のため表示


//データの格納
data_1[0] = 15;
data_1[1] = vector(20.0 , 21.0 , 30.0);
data_1[2] = "abc";
data_1[3] = 23.5;

data_2 = data_1;

//data_1のデータの表示
println("--- data_1 ---");
for(i = 0 ; i < 5 ; i++){
  println(data_1[i]);
}

//data_2のデータの表示
println("--- data_2 ---");
for(i = 0 ; i < 5 ; i++){
  println(data_2[i]);
}


//data_2[3]の値のみを変更
data_2[3] = "xyz";


//data_1のデータの表示
println("=== data_1 ===");
for(i = 0 ; i < 5 ; i++){
  println(data_1[i]);
}

//data_2のデータの表示
println("=== data_2 ===");
for(i = 0 ; i < 5 ; i++){
  println(data_2[i]);
}

println("data_1 " , data_1);
println("data_2 " , data_2);

認識を深めるための確認。C.O.F.F.E.E.SDKに記載されていれば良いんだけどね…もしかしたら記載されているかもしれないが、英語なので微妙なところはよくわかりませんね。
前回のスクリプトはdata_1のみ配列変数の宣言をしたのですが、今回はdata_2も配列変数宣言。すぐ後にdata_1,data_2そのものをコンソールに表示してみる。data_1,data_2それぞれ違う値を表示しているが、代入後は同じ値を示している。

更にテスト
配列変数を関数に渡して変更したら?

/*
配列変数テスト
配列変数を関数に渡してみる
2008.12.19
*/


hairetu(data)
{
  var i;

  //dataのデータの表示
 
println("*** data ***" , data);
  for(i = 0 ; i < 5 ; i++){
    println(data[i]);
  }
}

main(doc , op)
{
  var data_1 = new(array , 5);
  var i;

  //データの格納
 
data_1[0] = 15;
  data_1[1] = vector(20.0 , 21.0 , 30.0);
  data_1[2] = "abc";
  data_1[3] = 23.5;

  //data_1のデータの表示
 
println("--- data_1 ---" , data_1);
  for(i = 0 ; i < 5 ; i++){
    println(data_1[i]);
  }

  hairetu(data_1);//関数に配列を渡す
}

このスクリプトは、配列を宣言して値を格納して内容を表示し、関数に配列を渡して表示する。単純でシンプルなスクリプトだ。
関数を作るから勿論、実行する最初のコードのmain(doc , op)関数が必要となる。
渡された配列をプリントする関数をhairetu()関数にした。
さて、これを実行すると、コンソールに結果が表示される。hairetu()関数に渡す前の配列内の値とhairetu()関数内の配列内の値が同じだね。無事に渡されている。更によく見てみると[array-の後の数値も渡す前と渡されたものが、同じ値になっている。と言う事は関数に渡した配列内の値を変更すると言う事は、渡される前の配列内の値を変更すると言う事になる。では早速実験。

/*
配列変数テスト
配列変数を関数に渡して変更してみる
2008.12.19
*/


hairetu(data)
{
  var i;

  data[0] = "a";//渡された配列の要素を変更

  //dataのデータの表示
 
println("*** data ***" , data);
  for(i = 0 ; i < 5 ; i++){
    println(data[i]);
  }
}

main(doc , op)
{
  var data_1 = new(array , 5);
  var i;

  //データの格納
 
data_1[0] = 15;
  data_1[1] = vector(20.0 , 21.0 , 30.0);
  data_1[2] = "abc";
  data_1[3] = 23.5;

  //data_1のデータの表示
 
println("--- data_1 ---" , data_1);
  for(i = 0 ; i < 5 ; i++){
    println(data_1[i]);
  }

  hairetu(data_1);//関数に配列を渡す

  //data_1のデータの表示
 
println("--- data_1 ---" , data_1);
  for(i = 0 ; i < 5 ; i++){
    println(data_1[i]);
  }

}

配列要素の1個目をhairetu()関数で変更し内容を表示。関数のdata配列変数を戻り値としてmain()関数に渡さないでそのまま配列要素を表示。実行結果は予想通りですね。
配列は関数に渡して要素の値を変更すると言う事は渡す前の配列の要素を変更すると言う事。じゃあ次のスクリプトは無駄という事になるね。

/*
配列変数テスト
配列変数を関数に渡して変更して戻す
2008.12.19
*/


hairetu(data)
{
  data[0] = "a";//渡された配列の要素を変更
  return data;
}


main(doc , op)
{
  var data_1 = new(array , 5);

  //データの格納
 
data_1[0] = 15;
  data_1[1] = vector(20.0 , 21.0 , 30.0);
  data_1[2] = "abc";
  data_1[3] = 23.5;

  data_1 = hairetu(data_1);//関数に配列を渡して戻って来た配列を格納する
}

このスクリプトは配列変数にデータを格納して関数に渡し、関数で処理して配列変数を戻す。
ただの整数や実数などの変数を関数に渡して処理してreturnで戻して、それを代入するのは基本だけど、配列変数は関数に渡して処理するのみで完了できると言うわけだ。returnで戻す必要も受け取る必要もないと…ただ配列変数を丸ごと渡す時だけね。配列の要素を渡した場合は必要ならば戻して受け取らなければならない。

|

« C.O.F.F.E.E.での配列変数のテスト-1 | トップページ | C.O.F.F.E.E.でポリゴンオブジェクトのポイント »

コメント

この記事へのコメントは終了しました。