C#

PythonのFor文の言語仕様を、ほかの言語と比べてみた

今回は、PythonのFor文の仕様について解説していきます。
For文はお馴染みの繰り返し処理の記法なのですが、PythonのFor文は他の言語とは使い方が少し違います。
そのあたりも踏まえつつ、PythonのFor文の仕様について解説していきたいと思います。

もくじ

  1. PythonのFor文について
  2. 他の言語との比較
  3. まとめ

PythonのFor文について

PythonのFor文は、公式ドキュメントである言語リファレンスに下記のように記載されています。

シーケンス (文字列、タプルまたはリスト) や、その他の反復可能なオブジェクト (iterable object) 内の要素に渡って反復処理を行うために使われます。

PythonのFor文は下記のような記法で書かれます。
このFor文を実行すると、1,2,3,4が順に出力されます。

list = [1,2,3,4]
for l in list:
    print(l)

Python 言語リファレンス 3.8.1

PythonのFor文では、式リスト、上のコードでいうところの「list」は一度だけ評価され、イテラブルオブジェクトとなり、イテレータが生成されます。

イテラブルなオブジェクトとは、反復可能オブジェクトとも呼ばれ、各要素を1つずつ返してくれるオブジェクトを意味します。
イテレータというのは、データの流れを表すオブジェクトで、このイテレータの要素が尽きるとループが終了します。

イテラブルなオブジェクトとイテレータ

上のコードの例では、配列listがイテラブルなオブジェクトとなり、イテレータとして要素を1つずつlに渡していくことによってループが成立しています。

他の言語との比較

例えば、C++のFor構文は下記のようになっています。
C++のFor文でループが実行される際には、cond_expression(条件式) が評価され、その結果がFalseであれば、ループ文は直終了します。

# C++のFor構文
for ( init_clause ; cond_expression ; iteration_expression ) loop_statement

for ループ

また、C#のFor文についても、C++とほぼ同様の動きをします。

# C#のFor文
for (initializer; condition; iterator){
}

for (C# リファレンス)

C#の場合であっても、conditionセクション(条件式)の結果がTrueの場合に処理が継続されます。

なお、PythonのFor文の仕様は、他の言語に置けるForearch文と非常に近いと言えるでしょう。
Foreach文の例は下記のとおりです。

public class IterateSpanExample
{
    public static void Main()
    {
        Span<int>numbers = new int[] { 3, 14, 15, 92, 6 };
        foreach (int number in numbers)
        {
            Console.Write($"{number} ");
        }
        Console.WriteLine();
    }
}

foreach、in (C# リファレンス)

C#のForeach文は、条件式の部分で評価したインスタンス内の要素ごとに、繰り返しのブロック内のプログラムを実行します。

まとめ

そんなわけで、簡単ではありますが、PythonのFor文の仕様を他の言語のFor文の仕様と比較してみました。

最近、プログラミングを学び始めた友人にアドバイスを求められる機会があり、早いうちからドキュメントを読む癖をつけよう、なんて偉そうなアドバイスをしました。
とはいえ、僕もドキュメントを読み込んでるかというとそうでもないので、もう一度初心に返ってドキュメントを読み込むべく、こんな記事を書いてます笑

実際改めてドキュメントを読み込んでみると、これまでにない発見も多く、非常に勉強になるなぁと感じている次第です。

言語仕様の解説は今後も定期的に記事にしていきたいなと思っているのでよろしくお願いします。

COMMENT

メールアドレスが公開されることはありません。