Pythonにdo...whileループが存在しない理由を徹底解説
Pythonにはなぜdo...whileループがないのか?
C言語やJavaなど多くのプログラミング言語に標準搭載されている「do...while」ループですが、Pythonにはこの構文が存在しません。実はこれは単なる見落としではなく、言語設計上の意図的な判断によるものです。
PEP 315の提案と却下の経緯
過去に、Pythonへdo...while文を追加する提案「PEP 315(Python Enhancement Proposal)」が提出されました。しかしこの提案は却下されています。その最大の理由は、Pythonのすべての複合文で共通して採用されている「ステートメント: インデントされたブロック」という統一フォーマットに、do...while構文がうまく適合しなかったためです。
Guido van Rossum氏のコメント
Pythonの生みの親であるGuido van Rossum氏は、当時この件について次のように述べています。
「このPEPは却下してください。このような方向のバリエーションを増やしても、言語がよりエレガントになったり、習得しやすくなったりすることはありません。性急な一部の人々のタイピングの手間が少しだけ省けるだけで、そのコードを読む・保守する立場の人々を、意味を理解するのに悩ませる結果になるでしょう」
Pythonの設計思想から見るこの判断
この決定は、「シンプルであること」「可読性を最優先する」というPythonの設計哲学(Zen of Python)に基づいています。便利そうな機能でも、言語全体の一貫性や学習の容易さを損なう場合は採用しない——それがPythonらしい選択だと言えます。
代替手段:「while True」と「break」の組み合わせ
Pythonで「最低1回は必ず実行されるループ」を実現したい場合は、次のような慣用的な書き方が一般的です。
while True:
# 実行したい処理
if 終了条件:
break
このパターンを使えば、do...whileと同等の挙動を簡潔かつ読みやすく記述できます。
まとめ
Pythonにdo...whileループがないのは、PEP 315が却下された歴史的経緯によるものです。統一された構文フォーマットを守り、コードの可読性と保守性を優先した判断であり、実際の開発では「while True + break」で十分に対応できるため、大きな不便はないと言えるでしょう。
-
【Python】グラフ内の2つのノードに共通して到達可能なノードが存在するかを判定するプログラム
問題概要 有向グラフのエッジリストが与えられます。グラフは n 個のノードから構成され、ノード名は 0 から n-1 までです。さらに、2つの整数値 a と b が与えられます。ここで、「あるノード c から a への経路と、c から b への経路がどちらも存在する」という条件を満たすノード c が存在するかどうかを判定するのが課題です。 例として、下図のようなグラフを考えてみましょう。 a = 2、b = 3 の場合、出力は True になります。これは c = 0 とおくと、0 から 2 への経路と 0 から 3 への経路がどちらも存在するためです。 解法の考え方:逆グラフとDFSの組
-
Pythonのwhileループ入門:基本から実践的な使い方まで徹底解説
プログラミングは、他の人を助けるためのものを作ることですが、それ以上に、反復的で複雑なタスクを自動化することに大きな意味があります。Pythonのwhileループを使えば、コードのまとまりを繰り返し実行でき、多くの処理を一度に自動化することが可能です。この記事では、Pythonのwhileループの使い方を詳しく解説します。まず、whileループが何をするもので、どのような場面で最適なのかを見ていきましょう。Pythonのwhileコマンドとはwhileループの作成方法に入る前に、まず基本的な概念を整理しましょう。簡単に言えば、whileコマンドは、定義されたコードブロック(「ステートメント」)