حلقه for
به مثال زیر توجه كنيد.
using System;
class ForLoop
{
public static void Main()
{
for (int i=0; i < 20; i++)
{
if (i == 10)
break;
if (i % 2 == 0)
continue;
Console.Write("{0} ", i);
}
Console.WriteLine();
}
}
مثال 3-7-1
مثال 3-7-1 يك حلقه for را نشان ميدهد. استفاده از حلقه for براي زماني مناسب است كه دقيقاً بدانيد كه حلقه چندبار بايد تكرار شود. محتويات درون پرانتزهاي حلقه for از سه قسمت تشكيل شده است :
(<initializer list>; <boolean expression>; <postloopaction list>)
initializer list ليستي از عبارات است كه بوسيله كاما از يكديگر جدا ميشوند. اين عبارات تنها يكبار در طول دوره كاري حلقه for پردازش ميشوند. همانطور كه در مثال 3-7-1 نيز ملاحظه ميكنيد، اين قسمت معمولا براي تعيين متغيري عددي جهت آغاز عمل شمارش مورد استفاده قرار ميگيرد.
پس از اينكه عبارتهاي دورن initializer list پردازش شد، حلقه for به سراغ قسمت بعدي، يعني عبارات منطقي(boolean expression) ميرود. در اين قسمت تنها يك عبارت منطقي ميتوان قرار داد ولي هر اندازه كه بخواهيد ميتوانيد اين عبارت منطقي را پيچيده نماييد، فقط توجه نماييد كه اين عبارت بايد بگونهاي شود كه مقدار true يا false برگرداند. از اين عبارت منطقي معمولا جهت كنترل متغير شمارشي استفاده ميشود.
هنگاميكه عبارت منطقي مقدار true بازگرداند، دستورالعملهاي بلوك for اجرا ميشوند. در مثال 3-7-1 ما از دو دستور if درون حلقه for نيز استفاده كردهايم. اولين دستور if بررسي ميكند كه آيا مقدار متغير i برابر با 10 هست يا نه. در اينجا يك نمونه ديگر از استفاده دستور break را ملاحظه ميكنيد. عملكرد دستور break در اينجا نيز همانند مورد استفاده آن در دستور switch است. در صورت اجراي دستور break اجراي حلقه for خاتمه يافته و اجراي برنامه به اولين دستور بعد از حلقه for منتقل ميشود.
دومين دستور if با اسقتاده از عملگر باقيمانده (%) بررسي ميكند كه آيا متغير i بر 2 بخش پذير هست يا نه. در صورتيكه متغير i بر 2 بخش پذير باشد، دستور continue اجرا ميشود. پس از اجراي دستور continue از ساير دستورات حلقه for كه بعد از continue قرار گرفتهاند صرفهنظر ميشود و اجراي برنامه به اول حلقه for باز ميگردد.
قسمت سوم در حلقه for، قسمت postloopaction list است. پس از اينكه تمامي دستورات درون حلقه for اجرا شد، اجراي حلقه به اين قسمت باز ميگردد. اين قسمت ليستي از عملياتي است كه ميخواهيد پس از اجراي دستورات درون بلوك حلقه for انجام شوند. در مثال 3-7-1 اين عمل، اضافه كردن يك واحد به متغير شمارشي است. پس از افزوده شدن يك واحد به متغير شمارشي، عبارت منطقي مجدداً مورد بررسي قرار ميگيرد و در صورتيكه مقدار اين عبارت برابر با true باشد، حلقه for مجدداً اجرا ميگردد. حلقه for تا زمانيكه عبارت منطقي برابر با true باشد اجرا ميشود.
حلقه foreach
به مثال زیر توجه كنيد.
using System;
class ForEachLoop
{
public static void Main()
{
string[] names = {"ali", "hasan", "Mina", "Minoo"};
foreach (string person in names)
{
Console.WriteLine("{0} ", person);
}
}
}
مثال 4-7-1
حلقه foreach براي پيمايش مجموعهها بسيار مناسب است. يك نمونه از مجموعهها در C#، آرايهها هستند كه در مثال 4-7-1 نيز مورد استفاده قرار گرفته است. اولين كاري كه در متد Main() صورت گرفته، اعلان آرايه names از نوع رشتهاي و مقدار دهي آن است.
درون پرانتزهاي foreach عبارتي متشكل از دو المان قرار دارد كه اين المانها بوسيله كلمه كليدي in از يكديگر جدا شدهاند. المان سمت راست، مجموعهايست كه ميخواهيد اعضاي آنرا مورد پيمايش قرار دهيد. المان سمت چپ، متغيري از نوع مجموعه مورد نظر است كه مقادير پيمايش شده را بر ميگرداند.
در هربار پيمايش، عنصري جديدي از مجموعه درخواست ميشود. اين درخواستها از طريق متغير فقط خواندني تعريف شده درون پرانتزهاي foreach بازگردانده ميشوند. تا زمانيكه عنصري در مجموعه وجود داشته باشد كه مورد پيمايش قرار نگرفته است، حلقه foreach به كار خود ادامه خواهد داد زيرا عبارت منطقي حلقه foreach مقدار true را باز ميگرداند. به محض اينكه تمامي عناصر مجموعه پيمايش شد، عبارت منطقي برابر با false شده و اجراي حلقه foreach خاتمه مييابد. در اين حالت اجراي برنامه به اولين دستور بعد از حلقه foreach منتقل ميگردد.
در مثال 4-7-1 ، متغيري از نوع رشته با نام person براي نگهداري عناصري كه از آرايه names خوانده ميشود، تعريف كردهايم. تا زمانيكه اسمي در آرايه names وجود داشته باشد، در متغير person قرار ميگيرد و درون حلقه foreach بوسيله دستور Console.WriteLine() در خروجي نمايش داده ميشود.
نكته :
يكي از مهمترين ويژگيهاي حلقه foreach در آن است كه فقط ميتواند عناصر يك مجموعه را بخواند و نميتواند تغييري در آنها ايجاد نمايد. مزيت ديگر آن، پيمايش تمامي عناصر مجموعه بدون اطلاع از تعداد عناصر موجود در آن است.