ProgrammingVB.NET開発者

Visual BasicにおけるDo...Loopの実装はどのようになっており、どのような構文のバリエーションが存在し、ForやWhileではなくこのループを使用すべき場合はどんな場合ですか?

Hintsage AIアシスタントで面接を突破

回答。

Do...Loopループは、For(カウンタ指向)やWhile(常に入口で条件がチェックされる)よりも、より柔軟な終了条件でコードブロックの繰り返しを編成できます。Visual Basicには、4つの基本的な記述バリエーションがあります:

' 入口でのチェック Do While condition ' ループの本体 Loop ' 出口でのチェック Do ' ループの本体 Loop While condition ' Untilを使用した同様の形式: Do Until condition ' ループの本体 Loop Do ' ループの本体 Loop Until condition

Do...Loopを使用するべき場合:

  • 繰り返しの正確な回数が不明な場合
  • ループの内部動作に依存する出口条件がある場合(例えば、ファイルまたはコンソールからの読み込み)

トリック質問。

質問: Do While condition内で、条件conditionが最初から偽であった場合、ループの本体は1回でも実行されるでしょうか?

回答: いいえ、ループの本体はまったく実行されません。なぜなら、チェックは最初の実行前に行われるからです。

例:

Dim i As Integer = 10 Do While i < 5 Console.WriteLine(i) i += 1 Loop ' 一行も出力されません。

テーマに対する詳細な理解が不足しているための現実のエラーの例。


物語

データをパースする時点で、開発者はDo Until reader.EndOfStreamループを使用し、その中でファイルの行を読み込んでいました。しかし、EndOfStreamはファイルの外で読み込もうとするまで真にならないため、最後の行は処理されませんでした。正しい方法は、Do While Not reader.EndOfStreamを使用するか、条件EOFでループを終了させるために行ごとに読み込むことです。


物語

ForからDo...Loopにコードを移行する際、ループ内部にカウンタ変数の明示的なインクリメントを実装しないループが作成されました。その結果、終了条件が決して満たされず、プログラムは無限ループに陥りました。常にDo...Loopの本体内で主要な変数の変更を監視することが必要です。


物語

ある報告システムのサブシステムで、プログラマーはネストされたDo...Loopループを用いて、Exit Doの条件のネストについて考慮していませんでした:内部のExit Doは内部ループからのみ抜け出し、両方からは抜け出しませんでした。大規模なデータでのみ、短期間のブロッキングバグが発見されました。