do-while文を使わずに繰り返し処理を記述する方法と、その論理的比較

こんにちは。ゆうせいです。

o-while文を使わずにwhile文やfor文だけでプログラムを記述することは可能です。理論上、すべてのdo-while文はwhile文に書き換えることができます。それでもなお、do-while文という選択肢が存在し、特定の場面で推奨される理由について解説します。

while文で代用する場合の構造的変化

do-while文を使わずに、同じ動作をwhile文で実現しようとすると、主に2つの方法をとることになります。

1. ループの前に一度同じ処理を書く(冗長化)

もっとも単純な書き換えは、ループに入る前に一度だけ処理を実行しておく方法です。

  • do-while文の場合:一度実行し、その後判定。
  • while文で代用する場合:一度実行し、さらにwhile文の中で同じ処理を書く。

これは、レストランで「まず一皿目を出し(初回実行)、食べ終わった後に、もっと食べたいか聞いて(判定)、食べたければ二皿目を出す(ループ内実行)」という流れを、「一皿目を出し、さらにもっと食べたい人向けに、おかわりを出す仕組みを別に用意する」という構成にするようなものです。

2. フラグ変数を使用する

判定用の変数に初期値として必ずループに入るような値を代入しておく方法です。

  • 例:boolean continueFlag = true; としておき、while(continueFlag) で回す。

この方法は、いわば「空の受診券」を一時的に発行して無理やり会場に入るような手順です。論理的には正しいですが、本来不要な変数を定義する必要が生じます。

do-while文をあえて使う論理的な事実

do-while文を使わなくても書けるにもかかわらず、あえて使用する理由は、コードの「意図」を明確にするためです。

処理の重複を避ける(DRY原則)

プログラミングには、同じコードを二度書かないというDRY(Don't Repeat Yourself)という原則があります。while文で代用するために、ループの外と内で同じ処理を記述すると、修正が必要になった際に二箇所を直さなければならず、ミスの原因となります。

変数のスコープ(有効範囲)の最適化

do-while文を使用すると、ループの中で初めて決定される値に基づいて、そのままスムーズに次の判定へ移行できます。while文で無理に代用しようとすると、ループの外側でその変数を不自然な初期値で定義しなければならないことが多く、プログラムの構造が複雑になりがちです。

結論:使い分けの判断基準

「使わなくても書ける」のは事実ですが、「どちらがより簡潔で、読み手に意図が伝わるか」という観点が重要です。

  • while文が適している場合:条件を満たさないなら、一度も実行したくないとき。
  • do-while文が適している場合:何はともあれ一度は実行し、その結果を見てから次を考えたいとき。

学習のステップ

do-while文の必要性をより深く理解するために、以下のステップでコードを比較してみてください。

  1. 先ほど例に挙げた「数値入力のバリデーション」を、while文だけで(doを使わずに)書き直してみる。
  2. 書き直したコードを見て、同じ命令文が二回登場していないか、あるいは判定のためだけに不自然な初期値を設定していないかを確認する。
  3. どちらのコードが、数ヶ月後の自分が見たときに「何をしているか」を直感的に理解できるかを比較する。

このように、複数の書き方を比較検討することで、状況に応じた最適な構文を選択する力が養われます。

グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。