Special Lesson 2 - ループの制御

以下のプログラムの実行結果を予想してみましょう。

#prompt
Dim K As Double
K=0
While K>=0
    K=K+1
    Print K^2
Wend

最初のKの値が0で,K>=0を満たすからループの中へ入ります。そしてKの値を1増やしてから,Kの2乗の値(1)を表示します。そしてK=1だからK>=0を満たしているのでループを繰り返します。・・・あれ?
Kは増える一方ですから,ループから出られませんね??

このような状態を無限ループと言います。無限ループになってしまうとプログラムが終了しなくなってしまいますので,ウィンドウ右上の「×」ボタンで閉じるよりなくなってしまいます(Win9x系のOSならば強制終了するよりなくなってしまうでしょう)。

なお場合によっては,あえて無限ループを作る場合もあります。といっても実際には,無限ループっぽいものを作っておいて,ループの中でループから抜け出す方法を作っておくのです。

Dim V As Long
Do
    Print "1.名前を表示"
    Print "2.URLを表示"
    Print "3.終了"
    Input ">",V
    Select Case V
    Case 1
        Print "Sinryow"
    Case 2
        Print "http://www.sinryow.net/"
    Case 3
        Exit Do
    End Select
Loop

まず,Do 〜 Loopの使い方に注目してみましょう。WhileもUntilもないDo〜Loop文は,無条件にループを繰り返してしまいます。これだけだと無限ループになってしまいますが,ここで注目するのはExit Doです。これは強制的にDoループを抜けるために使用します。

Exit For・・・Forループを強制的に終了する。
Exit While・・・Whileループを強制的に終了する。
Exit Do・・・Doループを強制的に終了する。

注:この他に「Exit Sub」,「Exit Function」もあります(Lesson 12・13を参照。)

問16 Lesson 8で出した以下のプログラムを,上の例のように,条件のないDo 〜 LoopとExit Doを用いて書き換えなさい。

#prompt
Dim password As String
While password<>"sinryow"
    Input "パスワード>";password
Wend
Print "正しいパスワードが入力されました。"

最後にですが,ループを途中で打ち切ってループの始めからやり直す方法を紹介します。(あまり使いませんので,頭の片隅にとどめておく程度でよいです。)

#prompt
Dim i As Integer
For i=1 To 7
    If i=5 Then
        Continue
    End If
    Print i^2
Next

実行結果

1
4
9
16
36
49

For・While・Doループの中のいずれかの中で Continue が実行されると,制御がループの最初に移動します。この場合i=5のときにContinueで制御がループの最初に戻されるので,5^2(=25)は表示されずに終わります。

戻る