Topic 2: N88BASICを抜け出してActiveBasicらしいプログラムを組むには

ActiveBasicは,N88BASICに近い形式であるため,N88BASICのノリだけでプログラムを組んでいくことも可能なのですが,やはりActiveBasicらしいプログラムを組んでみたいと思いませんか
・・・え?思わない?それならあなたはN88BASICのプログラムよりも見やすいプログラムを書いてみたいと思いませんか
ActiveBasicらしいプログラムを書くことで,N88BASICで書くよりももっと見やすくわかりやすいプログラムを書くことができるのです!

ということで,いくつかポイントをお教えします。

1.ブロックIf文が使用できる。

ブロックIf文とは,以下のようなものです。

If a > 10 Then
    v = a
    w = Sqr(a)
    x = v - w
End If

これは,N88BASICの以下の形に相当します。

If a > 10 Then v = a: w = Sqr(a): x = v - w

この形式が使える利点は,If文の中に入る命令が多量・複雑な場合です。
N88BASICでは,If文の中に入る命令が多量になると,Goto 文や Gosub 文で行を移動しないと見づらくなります。(しかもN88BASICについて言えば,1行に入りうるプログラムが255文字までなので,これを超える場合は必然的に Goto や Gosub を使うことになります。)
それに対し,ブロックIf文があれば無理に行移動命令を使う必要がなく,しかも命令同士の相関も分かりやすいです。
例えば,N88BASICで作った次のプログラムを見て下さい。A が100以上か否か,及び B が50以上か否かで場合分けしています。

100 Input A, B
110 If A >= 100 Then Goto 140
120 If B >= 50 Then Print -A + B Else Print -A - B
130 Goto 150
140 If B >= 50 Then Print A + B Else Print A - B
150 End

これをブロックIf文を用いて書くと,

Input A, B
If A >= 100 Then
    If B >= 50 Then
        Print A + B
    Else
        Print A - B
    End If
Else
    If B >= 50 Then
        Print -A + B
    Else
        Print -A - B
    End If
End If
End

となります(変数の宣言は省略)。プログラムは長くなりましたが,条件と命令文の相関がわかりやすくなったかと思います。

ここでは例が短いですが,長いプログラムになるとこの有用性がわかるかと思います。

2.Sub, Function という命令語がある。

Sub 及び Function は,一定の処理をまとめて行わせるためにあります。N88BASICでなら Gosub でサブルーチンを作るところですが,ActiveBasic ではなるべくこちらを使うべきです。というのも Sub や Function は If と同様ブロック化できるからです。
例えば,N88BASICで以下のような処理を行っている場合(Gosub サブルーチンでは,与えられた数の2乗を計算し表示する。)

・
・
・
' Z の2乗を表示
220 AA = Z
230 Gosub 950
・
・
・
' Y の2乗を表示
360 AA = Y
370 Gosub 950
・
・
・
940 End
950 Print AA ^ 2
960 Return
・
・
・

ActiveBasicでは以下のように書けます。

・
・
・
' Z の2乗を表示
ShowSquare(Z)
・
・
・
' Y の2乗を表示
ShowSquare(Y)
・
・
・
End

Sub ShowSquare(s As Double)
    Print s ^ 2
End Sub
・
・
・

と,本筋のプログラムの方がすっきりしています。(例が抽象的過ぎてすみません。)

また Function はその名の通り(‘Function’は「関数」の意味)返り値を設定できます。関数を設定すると言う点では Def Fn...文 に似ています。例えば,

<N88BASIC (Def Fn...文を使う場合)>

Def FnCubic(U) = U ^ 3

Print FnCubic(3) ' 「27」と表示

<ActiveBasic(Functionを使う場合)>

Function Cubic(U As Double) As Double
    Cubic = U ^ 3
End Function

Print Cubic(3) ' 「27」と表示

となります。

「U As Double」は引数がDouble型であることを,最後の「As Double」は返り値がDouble型であることを表します。

また,次のような関数は Def Fn...文では定義できないはずです。
整数を与えて,その階乗(1からその数までの積。例:「3の階乗」= 3! = 1×2×3)を求める。
これはFunctionならではの機能です。以下のようにできます。

Function Factorial(n As Integer) As Long
    Dim i As Integer, x As Long
    x = 1
    For i = 1 To n
        x = x * i
    Next
    Factorial = x
End Function

N88BASICしかやってこなかった方には少々驚いたかもしれませんが,Sub や Function の中でも別個に変数を宣言できます。このようにして宣言された変数はそのプロシージャ(Sub や Function で定義した一つの区間)の中でのみ有効です。

2つともN88BASICにはない機能ですが,ActiveBasicに挑戦するからには使ってみていただきたいものです。

1つ前へ ActiveBasic Hall トップへ ActiveBasic Center トップへ Sinryow Game トップへ