研究開発

はじめてのVectorScript

第2章 変数とデータタイプ

VectorworksにはExcelに勝るとも劣らないワークシートというオブジェクトがありますが、プログラム上でもあらゆる計算ができます。
手っ取り早くは、手続きMessageに直接計算式を書くことで計算をすることができます。

PROCEDURE Sample04;
BEGIN
	Message( '1 + 2 * 3 / 4 = ', 1 + 2 * 3 / 4 );
END;
Run( Sample04 );
      

,(カンマ)で区切られている前は文字列がそのまま表示され、後ろは計算した答えが表示されます。算術関数も数多く用意されています。また、

ただし、このように計算の答えはえられますが、計算結果を再利用できません。そこで、プログラム実行中にデータを保持しておくために、変数というものをとっておきたい数だけ用意します。
PROCEDURE Sample05;
VAR
	aa, bb, cc : REAL;
BEGIN
	aa := 2 * 3;
	bb := aa / 4;
	cc := 1 + bb;
	Message( 'aa = ', aa, ' bb = ', bb, ' cc = ', cc );
END;
Run( Sample05 );
      
VAR(バリアブル)はここから変数を定義します。と宣言する予約語です。変数は予め宣言しておかないとエラーを起こしてしまいます。BASICのように宣言なしに使えるものと違い、
aa, bb, cc : REAL;とは実数を扱える(記憶できる)箱をaa,bb,ccという変数名で用意するを意味します。
aa := 2 * 3;は2に3を掛けたの計算結果をaa入れるを意味します。
bb := aa / 4;は上の行で求めた結果aaを4で割った計算結果をbbに入れるを意味します。
cc := 1 + bb;は1と上の行で求めた結果bbを足した計算結果をccに入れるを意味します。
手続きMessageは各途中計算の結果を表示しています。

変数は一つの箱ですので、代入(:=)されないかぎり中の内容は変化しません。が、一つのことしか記憶もできません。例えば、
aa := 1;
aa := 2;
のように代入されると、あとに代入したものに上書きされてしまいます。ただし、
aa := aa + 1;
のようにした場合、aaの内容に1を足したものをaaに入れるということはできます。
変数についてもう少し詳しく説明します。保存しておけるのは数字だけではなく、文字列や理論値、数字も実数や整数などいくつかのデータ型を保存できます。

PROCEDURE Sample06;
VAR
	aa : INTEGER;
	bb : LONGINT;
	cc : REAL;
	dd : BOOLEAN;
	ee : CHAR;
	ff : STRING;
	gg : HANDLE;
	hh : ARRAY[1..26] OF CHAR;
	pp : VECTOR;
	qq : POINT;
	rr : POINT3D;
	ss : RGBCOLOR;
BEGIN
	aa := 7;
	bb := 40000;
	cc := 1.2345;
	dd := TRUE;
	ee := 'e';
	ff := 'Hello World!!';
	gg := FLayer;
	hh[1] := 'a';
	hh[2] := 'b';
	hh[25] := 'y';
	hh[26] := 'z';
	pp.x := 1.00;
	pp.y := 2.00;
	pp.z := 3.00;
	qq.x := 1.23;
	qq.y := 4.56;
	rr.x := 7.77;
	rr.y := 8.88;
	rr.z := 9.99;
	ss.red := 16384;
	ss.green := 32768;
	ss.blue := 65535;
END;
Run( Sample06 );
      

INTEGER型:整数を格納します。-32768から+32767までの数値が扱えます。
LONGINT型:整数を格納します。-2147483648から+2147483647までの数値を扱えます。
REAL型:実数を格納します。1.7 x 10e-307 から 1.7 x 10e307 まで数値を扱えます。
BOOLEAN型:TRUEかFALSEのいずれかを格納します。
CHAR型:文字を格納します。
STRING型:文字列を格納します。255文字までの文字列を扱えます。
HANDLE型:図形の固有識別情報を格納します。
ARRAY型:INTEGER型、LONGINT型、REAL型、BOOLEAN型、CHAR型、STRING型に配列の構造を持たせることができます。同一変数名でいくつかの変数を添え字を使って参照することを可能にします。
VECTOR型:X、Y、Zの方向に対する距離を表わす3つのREAL型の値を格納します。Vector演算をサポートします。
POINT型:X、Yの座標位置の表わす3つのREAL型の値を格納します。
POINT3D型:X、Y、Zの座標位置の表わす3つのREAL型の値を格納します。
RGBCOLOR型:赤、緑、青の3原色を表わす3つのLONGINT型の値を格納します。
また、変数宣言するVARには自作サブルーチン(手続き、関数)を書く所でもありますが、それはまたの機会に説明します。

さらに、変数に対して定数というものもあります。

PROCEDURE Sample07;
CONST
	SYOHIZEI = 1.05;

VAR
	aa, bb, cc : REAL;
BEGIN
	aa := 100.0 * SYOHIZEI;
	bb := 200.0 * SYOHIZEI;
	cc := 300.0 * SYOHIZEI;
END;
Run( Sample07 );
      
CONST(コンスタント)はここから変数を定義します。と宣言する予約語です。プログラムの中で間違って代入されて数値が変更されることを防ぎ、また同じ定数表記がいくつも使われている場合に定数表記の値を変えなければならなくなった時、すべての定数表記を見つけるのは大変です。しかしこの定数宣言を使うと値を変更する場合には1か所変えるだけでOKです。定数はプログラムの実行中には内容を変えることはできません。
仮に、消費税が10%になった場合、1.05を1.1に変えることで、簡単に消費税率の変更ができたことになります。
定数にも型がありますが、代入されるデータによって決まります。
kLayerName = "sample-1";
とすればkLayerNameは文字列型(STRING)となります。

そのほかにも予め宣言しておかなければならないのが、LABEL(ラベル)です。

PROCEDURE Sample08;
LABEL
	1, 9999;
BEGIN
1:
	GOTO 9999;
	Message( 'Hi' );
9999:
END;
Run( Sample08 );
      
このようなプログラムは普通書きませんが、ラベルとは、GOTO文の飛び先として必要とします。
GOTO xxxx;と書く飛び先番号として、xxxx:とプログラム中の目的の場所に書くことで、プログラムの流れがそこへ飛びます。
その番号をLABELのところで予め宣言しておく必要があります。

あとTYPEというのがありますがここでは省略します。宣言の順番は、LABEL、CONST、TYPE、VARの順ですが、宣言が無い場合は書いてはいけません。書いてもプログラム内で使わないのは問題ありません。