連載
プロフェッショナルVB.NETプログラミング
第6回 論理演算と制御構造
(株)ピーデー
川俣 晶
2002/05/21
|
|
古い制御構造On…GoToとOn…GoSub
筆者が最も使い込んだBASICは、1979年に発売されたパソコン、PC-8001に搭載されたN-BASICと、Visual Basicの1.0〜2.0なので、もしかしたらVB 6からVB.NETへの移行を解説するのに適任ではないかもしれない、と思うこともある。しかし、こういうトピックを解説するには、古いBASICを知っている者でなければならないので、やはり筆者が書く意味もあるのだろうか、とも思う。
さて、On…GoToとOn…GoSubは、大昔のBASICに存在していた制御構造の構文である。Visual Basicが生まれる前にすでに使われなくなっていた非常に古いもので、ある意味で、これがVB 6でもまだサポートされていたのは驚きである。しかし、とうとうVB.NETではサポートが行われないことになった。恐らく、Visual BasicになってからBASICを学んだプログラマーなら、存在すら知らないのが普通だと思う。しかし、まれに古いソース資産を継承しながら使われてきたプログラムの中に、この構文が使われている可能性がないともいえないので、説明しておこう。
まずは、この構文を使用したVB 6サンプルから見ていただきたい。
1: Private Sub DemonstrateOnGoto(ByVal n As Integer)
2: On n + 1 GoTo a, b, c
3: a: Debug.Print "goto-a"
4: Exit Sub
5: b: Debug.Print "goto-b"
6: Exit Sub
7: c: Debug.Print "goto-c"
8: End Sub
9:
10: Private Sub DemonstrateOnGoSub(ByVal n As Integer)
11: On n + 1 GoSub d, e, f
12: Debug.Print "On..GoSub終わり"
13: Exit Sub
14: d: Debug.Print "gosub-d"
15: Return
16: e: Debug.Print "gosub-e"
17: Return
18: f: Debug.Print "gosub-f"
19: Return
20: End Sub
21:
22: Private Sub Form_Load()
23: Dim n As Integer
24: n = 0
25: While n < 3
26: DemonstrateOnGoto n
27: DemonstrateOnGoSub n
28: n = n + 1
29: Wend
30: End Sub
|
|
On…GoToとOn…GoSubを使用したVB 6のサンプル・プログラム5 |
これを実行すると以下のようになる。
1: goto-a
2: gosub-d
3: On..GoSub終わり
4: goto-b
5: gosub-e
6: On..GoSub終わり
7: goto-c
8: gosub-f
9: On..GoSub終わり
|
|
サンプル・プログラム5の実行結果 |
ソース2行目がOn…GoTo文である。これはOnの次の数式を計算し、GoToの後に列挙されたラベルから1つを選んでジャンプする(GoToを実行する)という機能を持つ。もし数式が1なら列挙されたラベルの1番目を、2なら2番目を、3なら3番目を呼ぶ。列挙されているリストに目的の番号に対応するものがなければ、次のステートメントを実行する。
同様に、11行目がOn…GoSub文である。これは、GoToではなくGoSubを行う。GoSubはサブルーチン呼び出しを行う機能で、Return文で呼び出し元に戻る。引数や戻り値のない関数呼び出しのようなもの、と理解すればよいだろう。
では、VB.NETではどう書くことになるのか、一応書いてみたのが以下のソースである。
1: Private Sub DemonstrateSelectCase(ByVal n As Integer)
2: Select Case n
3: Case 0
4: Trace.WriteLine("case 0")
5: Case 1
6: Trace.WriteLine("case 1")
7: Case 2
8: Trace.WriteLine("case 2")
9: End Select
10: End Sub
11:
12: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
13: Dim n As Integer
14: n = 0
15: While n < 3
16: DemonstrateSelectCase(n)
17: n = n + 1
18: End While
19: End Sub
|
|
On…GoToの代わりに“Select Case”を使用したVB.NETのサンプル・プログラム6 |
これを実行すると以下のようになる。
1: case 0
2: case 1
3: case 2
|
|
サンプル・プログラム6の実行結果 |
On…GoToにせよ、On…GoSubにせよ構造化構文ですらない構文なので、これに直接対応する機能は存在しない。強いて対応するものを挙げれば“Select Case”文だろう。しかし、目的に応じて、いろいろな構文を使って置き換えることもできる。つまり、かなり大幅な書き換えが要求されると思って間違いないだろう。とはいえ、いまどき古いソースを掘り返しても、めったにお目にかかる構文ではないので、対策は目に入ってから考えても遅くないだろう。
なおもう1つ、このサンプル・ソースには注意点がある。ソース18行目のEnd Whileを見ていただきたい。これはVB 6のサンプル・プログラム5の29行目のWendの綴りが変更されたものである。ほかの構造はすべてEnd XXXであるのに、While文の終わりだけはEnd WhileではなくWendであった妙な不整合が解消された。IDEが勝手にWendをEnd Whileに直してくれるので、意識しなくても使えるかもしれないが、一応頭の片隅に入れておくとよいだろう。
次回予告
次回は、さまざまなファイルの扱いを中心に解説したいと考えている。
では次回もまた会おう。
INDEX |
|
連載 プロフェッショナルVB.NETプログラミング |
|
第6回 論理演算と制御構造 |
|
1.Eqv演算子とImp演算子 |
|
2.古い制御構造On…GoToとOn…GoSub |
|
Insider.NET 記事ランキング
本日
月間