This article has been localized into Japanese by the community.
ループ
ループは非常に有用なプログラミングのテクニックであり、Razorコードにおいても有用なものです。ループを用いることで、動作や出力を特定の回数だけ繰り返すことができます。たとえばリスト上のアイテムを出力したりする場合です。この記事で見ていきましょう。
C#ではいくつかのループ構造が用意されており、Razorでもすべて利用可能です。氏名のリストというシンプルなデータを用いて、それらをすべて、一つ一つ確認してきましょう。リストはHTMLの順序なしリストに変換されます。
データソース
ビューファイルの先頭で以下のように氏名のリストを定義しましょう。
@{
List<string> names = new List<string>()
{
"John Doe",
"Jane Doe",
"Joe Doe",
"Jenna Doe",
"Doggy Doe"
};
}
ではさまざまなタイプのループをテストしてみましょう。
forループ
forループは、何回繰り返したかを常にトラッキングしたい場合に特に有用です。カウンタ変数(この例では i )に常にアクセスできるからです。
<ul>
@for (int i = 0; i < names.Count; i++)
{
<li>@names[i]</li>
}
</ul>
foreachループ
foreachループは、以下のようなタスクを実行したいときに最も使いやすいループです。
<ul>
@foreach (string name in names)
{
<li>@name</li>
}
</ul>
whileループ
以下のケースよりもwhileがもっと適しているユースケースはありますが、使えないことはありません。
<ul>
@{
int counter = 0;
}
@while(counter < names.Count)
{
<li>@names[counter++]</li>
}
</ul>
do...whileループ
whileループと同様、もっと適したタスクはありますが。whileループとdo...whileループの違いは条件文が評価されるタイミングです。whileループでは最初の繰り返しに入る前に条件文が評価されますので、ループはまったく実行されないこともあります。do...whileループでは最初の繰り返し後に条件文が評価されますので、最低でも1回はループが実行されます。
<ul>
@{
counter = 0;
}
@do
{
<li>@names[counter++]</li>
} while (counter < names.Count);
</ul>
breakとcontinue
これらのループに共通するのは、もちろん、break(ループから完全に脱出する)とcontinue(現在の繰り返しを中断して次の繰り返しに入る)ができることです。以下に示すforループでは、最大3名の氏名を出力したら if 文によりループを中断するように修正しています。
<ul>
@for (int i = 0; i < names.Count; i++)
{
<li>@names[i]</li>
@if(i >= 2)
{
<li>...and so on</li>
break;
}
}
</ul>
まとめ
C#と同じような方法で、Razorコードでもデータに対してループを行うことができます。また、上記の例で示したようにマークアップに飛び込んだり抜け出すこともできます。この記事では、Razor上でデータに対してどれほど簡単にループが実行できるかを解説しています。それぞれのループについてより詳しく理論を知りたい方は、別シリーズのC#チュートリアルをご覧ください。