私は現在、.Net Framework 2.0 の C# で古い VB6 プログラムを書き直しています (私の選択ではなく、会社によって決定されました)。ほとんどの場合、物事はかなりうまくいっています。このプログラムは、精密研削盤から受信したデータを測定し、グラフとダイヤルを表示して精度を表示します。
元のプログラマーは機械エンジニアでしたが、ソフトウェア エンジニアではありませんでした。プログラムは動作しますが、あちこちにずさんなコードがあります。最も注目すべきは、いくつかの GoTo ステートメントに出くわしたことです。必要に応じてループに入れ、そこから同じ機能を取得するのは非常に簡単です。
ただし、元のコードで、GoTo がループをシミュレートする以上のことを行っているように見えるケースに遭遇しました。いくつかの異なる終了条件があります。これは次のようになります (実際のコードではなく、デモ用に作成した短いコードです):
VB6 コード
Public Sub Tick()
Dim condition1 As Boolean
Dim condition2 As Boolean
Dim testNumber As Integer
beginning: 'The GoTo label'
' (... Some Other Code Here ...)'
If condition1 = True Then
goto beginning
Else
' (... Do some calculation ...)'
End If
If condition2 = True Then
' (... Do some calculation ...)'
goto beginning
End If
Select Case testNumber
Case 1: '(... Some code ...)'
Case 2: '(... Some code ...)'
Case 3: '(... Some code ...)'
Case 4: goto beginning
End Select
End Sub
実際のコードにはそれよりも条件が少ないかもしれませんが、基本的な考え方は、それ自体にループバックする原因となるいくつかの異なるものがあるということです。そのような状況でループを記述する良い方法はありますか、それとも goto ステートメントが受け入れられるケースですか? (確かに、非 goto ソリューションが望ましいでしょう)。
お時間をいただきありがとうございます。
注: ブレーク付きの while(true) ループを使用してみました。ステートメントを実行しましたが、プログラムが無限ループに陥り、ロックアップしました。複数の条件 (and/or など) を含む長い while ループを作成することをお勧めしますか?