Do ~ Loop とギャンブル

先日職場の勉強会で、繰り返し処理を行う場合の方法について説明があった。

  1. Do ~ Loop は、条件が分かっている時に適している
  2. For ~ Next は、範囲が分かっている時に適している

なるほど、これは端的で分かり易い説明だ。
f:id:Infoment:20181025220506p:plain

折角の分かり易い説明を、敢えて分かりにくくパチンコに例えてみる。結婚を機にパチンコを止めて10年余。思い出して書いてみると、こんな感じか。


条件が分かっている場合のループ。条件は、大当たりが出るまで。

Sub パチンコ_1()
    Dim 所持金 As Currency
        所持金 = 10000
    Dim 大当たり As Boolean
        大当たり = False
        
    Do While 大当たり = True
        所持金 = 所持金 - 1000
        大当たり = 勝負(投入金額:=1000)
        If 大当たり = True Then
            Dim 心の声 As VbMsgBoxResult
                心の声 = MsgBox("まだ勝負しますか?", vbOKOnly, "止め時?")
                If 心の声 = vbOK Then
                    大当たり = False
                Else
                    大当たり = True
                End If
                所持金 = 所持金 + ドル箱1個分
        End If
        If 所持金 <= 0 Then Exit Do
    Loop
End Sub


範囲が分かっている場合のループ。今回は、全投入額を10,000円と決めてる場合。

Sub パチンコ_2()
    Dim 所持金 As Currency
        所持金 = 10000
    Dim 投入金額 As Currency
        投入金額 = 1000
    Dim 大当たり As Boolean
        大当たり = False        
    Dim i As Long
    For i = 1 To 所持金額 / 投入金額
        所持金 = 所持金 - 投入金額
        大当たり = 勝負(投入金額)
        If 大当たり = True Then
            所持金 = 所持金 + ドル箱1個分
        End If
    Next
End Sub


殆どの方は恐らく、前者のサブプロシージャに違いない。こう書いてみると、恐ろしい。パチンコを止めて良かったと、改めて思いました。

参考まで。