- Call文
- 関数を呼びます。
VB風の括弧を用いない関数呼び出しは利用できません。
返り値の有る関数を呼び出した場合、返り値は捨てられます。
引数の無い関数でも括弧が必要です。
Call 関数名 (引数リスト)
(例)
Call AddInt(3,4)
Call test()
- Redim文
- 動的配列を生成します。
VBと異なり、後ろに「As 型名」をつける必要はありません。
変数の宣言時と次元数が一致する必要があります。
配列はVBスタイルとC言語スタイルの両方が利用できます。
Redim 変数名(要素数リスト)
Redim 変数名[要素数][要素数]・・・
(例)
Dim a[][] , b(,,,) As Float //それぞれ2次元、4次元の動的配列
Redim a(5,4) //別にどちらのスタイルを用いてもよい
Redim b[-1][4][5][6] //実際は要素数が-1は不正なので実行時エラー
- Exit文・Return文・Continue文
- Exit ForおよびExit DoはVBと同じで一番内側のFor文、Do文を抜けます。
Continue文はC言語と同じで、一番内側のループの先頭位置に移動します。(例えば、For文なら変数にStep分を足すところに移動)
Return文はExit Sub及びExit Functionと同様に関数を抜けるのに利用します。
VBと異なり、値を返す関数ではReturn文と同時に返り値を使用します。
(例)
For i = 0 to 5
if i = 3 then continue
Call test() //ここが呼ばれるのはi=0,1,2,4のとき。
//i=3の時はcontinue文で飛ばされる。
if i = 4 then exit for //i=4ならここでForを抜けるので、i=5にならない。
Next
return (j+3) //関数を抜け、返り値としてj+3を返す
- 代入文
- 変数に代入します。
普通の代入だけでなく、C言語風の+=や-=等の代入も行えます。
配列に配列を代入することもできますが、これは参照を代入しているだけでコピーは行いません。
変数 = 代入値
変数[要素][要素]… = 代入値 //配列への代入
変数(要素,要素,…) = 代入値 //配列への代入
変数 += 代入値 //実際は 変数 = 変数 + 代入値
他に-=、*=、/=、%=、|=、&=、^=、<<=、>>=が利用可能。
(例)
a = 3
a[3] = 5
s += "あいうえお"
a <<= 5
Dim b[3][5] , c[3] As Int
b[1] = c //b[0]、b[2]はそれぞれb[0][4]、b[2][4]と5個ずつ要素があるが、
//この代入の結果、b[1]だけはb[1][2]までと4つだけ利用可能
c[1] = 3 //b[1]とcは同じ配列をさすので、b[1][1]も3になる
- IF文
- VBのIF文とほぼ同様。
1行のIF文と複数行のIF文がある。
1行のIF文はELSE節を持てません。
1行スタイル
IF 条件式 THEN 式
複数行スタイル、ELSEIF節やELSE節はあってもなくてもよい。ELSE文は1つまで可能。
IF 条件式 THEN
文のリスト
[ELSEIF 条件式 THEN
文のリスト]
[ELSE
文のリスト]
ENDIF
(注)
後のFORやDOにも関わりますが、条件文は基本的にint型として判断します。
VBではSingle型の変数fに対してIF f THEN 〜〜 とある時、実際はIF f <> 0 THEN 〜〜と判断します。
これはVBがBoolean型とInteger型を別物と考えているからです。
ここではBoolean方は無いため、IF f THEN 〜〜はIF (int)f <> 0 THEN 〜〜と判断します。
つまり、0≦f<1の値の時はint型にキャストした時0となるため、IF文の中身を実行しません。
DO WHILEの判断でも同じような動作をします。
「fが0でない時」を判定する場合は比較演算子を使う必要があります。
(そもそも、浮動小数の場合は精度の問題もあり、等号ではなく不等号を使うことが望ましいです。)
- FOR文
- VBのFOR文とほぼ同様。
FOR 変数 = 初期値 TO 終了値 [STEP 増加値]
文のリスト
NEXT
変数はint型かfloat型の変数しか使えません。
配列も利用することはできません。
終了値や増加値はFOR文に中身に入る時に1度しか評価しません。
例えば、以下の場合を考えます。
a = 10
b = 50
c = 1
For i = a To b Step c
b = b - 1
c = c + 1
Next
この文では終了値や増加値がFor文の中で変化していますが、iはFor文に入った段階の終了値や増加値に則って変化します。
増加値cが増加していってもFor文に入る時c=1なので、iは10、11、12、・・・、50と変化します。
ただし、対象となる変数i自体はFor内部で変化した場合、例えばi=60と範囲外の値を指定するとすぐループを抜けます。
これは変な仕様かと思うかもしれませんが、VBのFor文はそう言う仕様になっています。
(CやJavaでは普通毎回その時点の増加値や終了値と比較しますね。)
- Do文
- VBのDo文とほぼ同様。
Do [While 条件式 | Until 条件式]
式のリスト
Loop [While 条件式 | Until 条件式]
WhileやUntil節はDoとLoopの両方の隣につけても構いません。
Doの横につけるとループ突入時もチェックを行います。