آموزش کامل کار با حلقه for در سی شارپ - For in C sharp


دات وایت | DotWhite.ir
آموزش کامل کار با حلقه for در سی شارپ - For in C sharp

بررسي دقيق حلقه while در پست قبلی ،الگوي دستورات تكراري را آشكار ميكند. يك متغير را مقداردهي اوليه ميكند (counterVariable). متغير را تست ميكند ( 10 <counterVariable). حلقه for اجازه ميدهد همه اين مراحل را در يك دستور واحد تركيب كنيم. يك حلقه for با كلمه كليدي for نوشته ميشود كه گرامر آن بصورت زير است :

for([initializes];[BooleanExpression];[iterates];)
Statement 
بخش اول سرآيند، مقداردهنده اوليه است كه يك متغير را مقداردهي اوليه ميكند. بخش دوم عبارت بولين است و شرط پايان را مشخص ميكند. بخش سوم تكرار كننده است كه مقدار متغير شمارنده را بروز ميكند. همه اينها در داخل پرانتزهاي باز و بسته قرار گرفته اند. يك نمونه از حلقه for در مثال (1) نشان داده ميشود. دات وایت

مثال (1)

using System;

public class Tester

{

    public static void Main()

    {

        for (int counter = 0; counter < 10; counter++)

        {

            Console.WriteLine("counter: {0} ", counter);

        }

    }

}

خروجي بصورت زير است :

 counter: 0
 counter: 1
 counter: 2
 counter: 3
 counter: 4
 counter: 5
 counter: 6
 counter: 7
 counter: 8
 counter: 9 
در قسمت اول سرآيند متغير counter با صفر مقداردهي اوليه ميشود. مقدار counter در بخش عبارت بولين سرآيند تست ميگردد. در نهايت در بخش تكراركنندهي سرآيند، مقدار counter افزايش داده ميشود. 
بخش مقداردهي اوليه فقط يكبار در شروع حلقه اجرا ميگردد. شمارنده صحيح ايجاد شده و با صفر مقداردهي ميشود و سپس عمل تست اجرا ميشود. چون counter از 10 كوچكتر است. بدنه حلقه for اجرا شده و مقداري نمايش داده ميشود. بعد از تكميل حلقه بخش تكرار كننده سرآيند اجرا ميگردد و counter افزايش داده ميشود. مقدار counter تست ميشود. اگر شرط به true ارزيابي گردد، بدنه حلقه for مجدداً اجرا ميشود.
 در قسمت تكراركننده، لازم نيست حتماً عملگر ++ استفاده شود. ميتوان از هر عبارتي استفاده كرد. در حلقه for دستورات counter ++و ++ counter نتيجه يكساني خواهند داشت. 
منطق دستور for بدين صورت است "براي هر مقداري از counter كه با صفر شروع ميشود، اگر تست به true ارزيابي گردد، عملي را انجام بده و مقدار counter را بروز كن " 

خارج شدن از حلقه for دستور break 
با وجود درست بودن شرط، ممكن است بخواهيم از حلقه for خارج شويم. براي اينكه حلقهfor را بصورت دائمي خاتمه دهيد، دستور انشعاب غيرشرطي break را بكار بريد. دستور break حلقهfor را متوقف ميكند و اجراي برنامه به دستور بعد از حلقه for منشعب ميشود. مثال (2) را ملاحظه كنيد. 

using System;

public class Tester

{

    public static void Main()

    {

        for (int counter = 0; counter < 10; counter++)

        {

            Console.WriteLine("counter: {0} ", counter);

            // if condition is met, break out.

            if (counter == 5)

            {

                {

                    Console.WriteLine("Breaking out of the loop");

                    break;

                }

            }

            Console.WriteLine("for loop ended");

        }

    }

}

 : خروجي بصورت زير است 

 counter: 0
 counter: 1
 counter: 2
 counter: 3 
 counter: 4
 counter: 5
 Breaking out of the loop
 for loop ended 
در اين مثال حلقه for تست ميكند آيا شمارنده از 5 كوچكتر است؟ اگر مقداري كوچكتر از 5 پيدا شود از حلقه خارج ميگردد. 

دستور continue

در بعضي از مواقع ممكن است به جاي خارج شدن از حلقه، مفهومي بصورت زير را پياده كنيد " بقيه دستورات را تا آخر حلقه اجرا نكرده و از بالاي حلقه مجدداً شروع كنيد. براي پيادهسازي اين مفهوم دستور انشعاب غيرشرطي continue را بكار بريد.

 كاربرد break و continue چندين نقطه خروج براي حلقه ايجاد ميكنند، كه فهم و نگهداري كد را مشكلتر ميسازند و بهتر است با دقت استفاده شوند. 

مثال (3) مكانيزم كار هر دو دستور break و continue را ارائه ميكند. اين كد يك سيستم پردازش ترافيك سيگنالي ايجاد ميكند.  

مثال (3)

using System;

public class Tester

{

    public static int Main()

    {

        string signal = "0"// initialize to neutral

        while (signal != "X"// X indicates stop

        {

            Console.Write("Enter a signal. X = stop. A = Abort: ");

            signal = Console.ReadLine();

            // do some work here, no matter what signal you

            // receive

            Console.WriteLine("Received: {0}", signal);

            if (signal == "A")

            {

                // faulty - abort signal processing

                // Log the problem and abort.

                Console.WriteLine("Fault! Abortn");

                break;

            }

            if (signal == "0")

            {

                // normal traffic condition

                // log and continue on

                Console.WriteLine("All is well.n");

                continue;

            }

            // Problem. Take action and then log the problem

            // and then continue on

            Console.WriteLine("{0} -- raise alarm!n", signal);

        }

        return 0;

    }

}

سيگنالها بوسيله واردكردن كاركترهاي حرف بزرگ و اعداد از صفحه كليد شبيه سازي ميشوند. بوسيله متد ()ReadLine.Console يك خط متني خوانده و در متغير رشتهاي قرار ميدهد. با فشار دادن A رشته پايان مييابد. الگوريتم ساده است، دريافت يك " 0" (صفر) به معني شرايط عادي است و فقط يك عمل ثبت رويداد لازم است. با دريافت سيگنال Abort (با حرف بزرگ " A "شبيه سازي شده) مشكلي ثبت شده و پروسه خاتمه مييابد. در نهايت براي هر رويداد ديگر، يك هشدار داده ميشود. اگر سيگنال "X "باشد، هشدار داده ميشود، اما حلقه while نيز خاتمه مييابد. اين نمونه اي از خروجي مثال است:

Enter a signal. X = stop. A = Abort: 0
 Received: 0
 All is well.
 Enter a signal. X = stop. A = Abort: 1
 Received: 1
 1 -- raise alarm!
 Enter a signal. X = stop. A = Abort: X
 Received: X
 X -- raise alarm! 
اين دومين نمونه از خروجي است :
 Enter a signal. X = stop. A = Abort: A
 Received: A
 Fault! Abort 

نكتهي اين تمرين مربوط به زمان دريافت سيگنال A است. دستور if اجرا شده و بدون دادن هشداري به برنامه از حلقه خارج ميشود. زماني كه سيگنال 0 است. يك هشدار نامطلوب داده شده و برنامه از بالاي حلقه ادامه مييابد. مطمئن باشيد كه حروف بزرگ X و A را استفاده ميكنيد. 


عناصر اختياري سرآيند حلقه for

به خاطر داريد كه سرآيند حلقه for سه بخش مقداردهي اوليه، عبارت بولين و تكراركننده را دارد و گرامر آن بصورت زير است:
for([Initializes];[BooleanExpression]; [Aerators])
Statement 
همه بخشهاي سرآيند حلقه for اختياري هستند. همانطور كه در مثال (4) ميبينيد، ميتوانيد خارج از سرآيند حلقه for ،مقدارها را مشخص كنيد. 

مثال (4)

using System;

public class Tester

{

    public static void Main()

    {

        int counter = 0;

        // some work here

        counter = 3;

        // more work here

        for (; counter < 10; counter++)

        {

            Console.WriteLine("counter: {0} ", counter);

        }

    }

}

خروجي شبيه زير است : 

 counter: 3
 counter: 4
 counter: 5
 counter: 6
 counter: 7
 counter: 8
 counter: 9
در اين مثال متغير counter قبل از شروع حلقه for مقداردهي اوليه شده و تغيير داده شده است. توجه كنيد كه يك ; براي نگه داشتن محل مربوط به دستور مقداردهي اوليه گذاشته شده است. اگر دليلي براي افزايش مقدار counter در داخل حلقه for نداريد، ميتوانيد بخش تكرار كننده را خالي بگذاريد. مثال (5) را ببينيد.

مثال (5)

using System;

public class Tester

{

    public static void Main()

    {

        for (int counter = 0; counter < 10;) // no increment

        {

            Console.WriteLine("counter: {0} ", counter);

            // do more work here

            counter++; // increment counter

        }

    }

}

در صورتي كه حلقه for را بدون مقدار اوليه و تكرار كننده، بصورت زير ايجاد كنيم:

for ( ; counter< 10 ; ) 
شما يك حلقه while بوسيله for ايجاد كردهايد و البته اغلب استفاده نميشود. ننوشتن تمام بخشهاي سرآيند for امكانپذير است، كه يك حلقه بينهايت ايجاد ميگردد:
for ( ; ; ) 
ميتوانيد حلقه بينهايت را با حلقه (while(true ايجاد كنيد. از يك حلقه بي نهايت با دستور break خارج ميشوند. يك حلقه بينهايت در مثال (6) نشان داده شده است.

مثال (6)

using System;

public class Tester

{

    public static void Main()

    {

        int counterVariable = 0; // initialization

        for (;;) // forever

        {

            Console.WriteLine("counter: {0} ", counterVariable++); // increment

            if (counterVariable > 10) // test

        break;

        }

    }

}

خروجي شبيه زير است : 

 counter: 0
 counter: 1
 counter: 2
 counter: 3
 counter: 4
 counter: 5
 counter: 6
 counter: 7
 counter: 8
 counter: 9 

براي مشخصكردن حالتي كه يك حلقه بيشمار مرحله ادامه يابد، يك حلقه بينهايت را بكار بريد. براي مثال، اگر برنامه شما در انتظار يك رويداد از سيستم است، شرايط خارج شدن از حلقه ميتواند استثناء بوده و در داخل بدنه حلقه مديريت شود.


 خلاصه

حلقه for براي اجراي دستور به تعداد معيني استفاده ميشود. سرآيند حلقه for ميتواند يك يا چند متغير را مقداردهي اوليه كرده، يك شرط منطقي را تست كند و متغيرها را تغيير دهد. كاربرد معمول حلقهfor مقداردهي اوليه يك شمارنده است. شرط حلقه قبل از شروع هر تكرار تست ميشود و بعد از هر تكراري شمارنده را تغيير ميدهد.



تاریخ انتشار : یکشنبه 12 دي 1395 ساعت: 10:3 | نظرات()
برچسب ها : , , , , , , , , , , , ,

نویسنده :

بازديد : 531

موضوع: سی شارپ , کد های مفید ,

بخش نظرات این مطلب
نام
ایمیل (منتشر نمی‌شود) (لازم)
وبسایت
:) :( ;) :D ;)) :X :? :P :* =(( :O @};- :B /:) :S
نظر خصوصی
مشخصات شما ذخیره شود ؟ [حذف مشخصات] [شکلک ها]
کد امنیتیرفرش کد امنیتی