حلقه‌های Do-While چگونه در برنامه‌نویسی عمل می‌کنند؟
1397/12/16 11:59 , میلاد صاحب نظر

حلقه‌های Do-While چگونه در برنامه‌نویسی عمل می‌کنند؟

وقتی برنامه‌نویسی می‌آموزید، درک قطعه کد‌های ساده و اصلی، کلید دستیابی به موفقیت در ابتدای کار است. بعدا موضوعات مختلف را نیز خواهید آموخت، اما اگر انواع، حلقه‌ها و توابع مختلف را نشناسید، آموختن چیزهای بیشتر مشکل خواهد شد.

اگر برنامه‌نویسان تازه کار عبارات If-else، حلقه‌های while و حلقه‌های for را پیش از آغاز رسمی آموزش آموخته‌اند. اما یکی از انواع حلقه‌هایی که ممکن است بلد نباشید، حلقه do-while است. اجازه دهید راجع به نحوه عملکرد این حلقه صحبت کنیم و چند مثال حل کنیم.

اصول

یک حلقه do-while یک قطعه کد را حداقل یک بار اجرا می‌کند، سپس بررسی می‌کند که اگر شرایط true بود، آنگاه بسته به شرایط، به اجرای کد ادامه می‌دهد. اجازه دهید یک مثال شبه کد ساده حل کنیم:

در این قطعه کد، خطوط کد درون براکت‌های do همیشه حداقل یک بار اجرا می‌شوند. این یعنی اینکه X در اجرا حلقه می‌تواند هر مقداری داشته باشد.

اگر x در آغاز حلقه برابر ۱ باشد، اجرای کد تکرار می‌شود تا اینکه x دیگر در شرایطی که در پرانتزهای while نوشته شده است، صدق نکند. وقتی x دیگر کمتر از ۵ نباشد، حلقه پایان می‌یابد و برنامه به سراغ اجرای کدهای بعد از while می‌رود. خروجی این کد به شکل زیر است:

The variable x equals 1 The variable x equals 2 The variable x equals 3 The variable x equals 4 The variable x equals 5 The loop has ended.

برعکس، اگر در ابتدای حلقه  x برابر با ۲۰ باشد، کد فقط یک بار اجرا می‌شود. بنابراین فقط یک عبارت خروجی را مشاهده خواهید کرد، یعنی x به اضافه ۲۰ شده و نتیجه ۲۱ می‌شود و حلقه پایان می‌یابد، چون ۲۱ کمتر از ۵ نیست. خروجی برنامه در این حالت به شکل زیر است:

تفاوت با حلقه‌های while و For

یک حلقه do-while چه فرقی با حلقه‌های دیگر دارد؟ مهم‌ترین تفاوت این است که حلقه‌های do-while بعد از اینکه یک قطعه کد را اجرا کردند، شرایط را بررسی می‌کنند، در حالی که حلقه‌های دیگر قبل از اینکه کد داخل خود را اجرا کنند، شرایط را بررسی می‌کنند.

برای مقایسه، این شبه کد ساده در حلقه while را در نظر بگیرید:

در اینجا، مقدار x برابر ۱۰ قرار گرفته و حلقه while قبل از اینکه کد داخل را اجرا کند، بررسی می‌کند که آیا x کمتر از ۵ هست یا خیر. به همین دلیل، کد داخل هیچوقت اجرا نمی‌شود. اگر همین منطق را روی یک حلقه do-while پیاده سازی کنیم، کد به این شکل خواهد بود:

این حلقه، یک بار متن را در خروجی نمایش می‌دهد، یک عدد به x اضافه می‌کند و سپس ادامه می‌دهد.

توجه کنید که با اضافه کردن یک عبارت اضافه در جلوی حلقه while می‌توانید نحوه عملکرد حلقه do-while را ، بازسازی کنید. به این شکل:

به هر حال، وقتی حلقه do-while هست، لازم نیست این کد در هم و بر هم را بنویسیم!!!

حلقه‌های For

تفاوت حلقه‌های do-while با حلقه‌های For نیز دقیقا مانند تفاوت با حلقه‌های while است. حلقه For یک متغیر را تعریف می‌کند، مشخص می‌کند که حلقه چه مدت باید اجرا شود و برای پایان هر دور اجرا، یک رفتار را بروز می‌دهد.

برای مقایسه، به این حلقه for‌ساده توجه کنید:

این کد، تفاوت بین حلقه‌های do-while و for را به خوبی نشان می‌دهد – شما دقیقا می‌دانید که یک حلقه for چند بار اجرا می‌شود، چون شرایطی را در همان ابتدای کار مشخص کرده‌اید. اگر کد بالا را به صورت حلقه do-while اصلاح کنید به این شکل خواهد شد:

وقتی حلقه اجرا می‌شود، ممکن است به مشکل بر بخورید. اگر در ابتدا مقدار i را در جای دیگری مشخص نکرده باشید، وقتی کد درون براکت‌های do‌ اجرا می‌شود نمی‌دانید که مقدار i چه خواهد بود – و کد حداقل یک بار اجرا می‌شود. اگر مقدار i در هنگام اجرای حلقه ۵۰۰ باشد، خروجی دقیق نخواهد بود.

به طور خلاصه:

  • یک حلقه do-while زمانی مفید است که بخواهید یک دستور حداقل یک بار اجرا شود، و تا زمانی که شرایط True‌باشد ادامه یابد.
  • یک حلقه while به شما اجازه می‌دهد یک قطعه کد را تا زمانی که شرایط true باشد اجرا کنید و به محض اینکه شرایط دیگر true نباشد، اجرا متوقف خواهد شد.
  • یک حلقه for به شما اجازه می‌دهد با مشخص کردن پارامترهای مد نظر خودتان، مشخص کنید که دقیقا حلقه چند بار باید اجرا شود.

خارج شدن از حلقه do-while

مسلما همانند هر حلقه دیگری، برای خروج از حلقه do-while نیز باید یک شرط خروج داشته باشید. اگر اینطور نباشد، با حلقه بی پایان رو به رو خواهید شد. قطعه کد زیر را در نظر بگیرید:

اگر x را در هیچ جای دیگری از کد افزایش ندهید، آنگاه این حلقه تا ابد اجرا خواهد شد. گاهی حلقه‌های بی‌پایان مفید هستند، چون برنامه‌نویس در جای دیگری از کد، شرایطی برای خروج از حلقه تدارک دیده است. اما اکثر مواقع، کد‌ نویسان تازه کار به صورت تصادفی در دام حلقه‌های بی‌پایان گرفتار می‌شوند.

در زیر مثالی از یک حلقه بی‌پایان مناسب را مشاهده می‌کنید. فرض کنید در حال طراحی یک بازی هستید که در آن، کاربر یک تاس را می‌اندازد و باید ۶ بیاورد تا بتواند از محل خانه خارج شود. شما قصد دارید انداختن حلقه ادامه یابد تا اینکه بالاخره تاس مقدار ۶ بیاید و مسلما باید حداقل یک بار تاس انداخته شود. بنابراین، می‌توانید از این کد استفاده کنید:

شرط (while(true یعنی اینکه این حلقه تا ابد ادامه می‌یابد، که دقیقا همان چیزی است که ما می‌خواهیم، چون کاربر باید ۶ بیاورد. بدون عبارت break، کد کرش می‌کند. اما وقتی کاربر بالاخره ۶ بیاورد، شرط عبارت if، true می‌شود و توالی اجرای حلقه متوقف شده و برنامه به سراغ کدهای بعد از while می‌رود.

اگر نمی‌خواهید،‌ لازم نیست حتما از یک عبارت break استفاده کنید. در واقع، تا جای ممکن بهتر است از عبارات break استفاده نکنید. چون این عبارات، نگهداری از کد را سخت‌‌تر می‌کنند. اگر از یک شرایط پایانی استفاده کنید، Trace کردن کد خیلی ساده‌تر می‌شود. بنابراین، کد اصلاح‌شده زیر این هدف ما را برآورده می‌کند:

یک حلقه بی‌پایان بد

استفاده از حلقه بی‌پایانی که برای پایان دادن به آن نقشه و برنامه دارید هیچ ایرادی ندارد. اما گاهی شما تصادفا یک حلقه بی‌پایان ایجاد می‌کنید، مثل مثال زیر:

به نظر می‌رسد که این کد، در هر بار اجرای حلقه x را به اضافه ۲ می‌کند و حلقه تا زمانی که x کمتر از نباشد ادامه می‌یابد. اما کمی دقت کنید. درون حلقه، هر بار که حلقه اجرا می‌شود مقدار X‌ برابر با ۱ قرار می‌گیرد. در نتیجه این کد تبدیل به یک حلقه بی‌پایان می‌شود. توجه کنید که x=1 و x=x+2 یعنی اینکه در پایان قطعه کد مقدار x همیشه برابر ۳ خواهد بود، مهم نیست حلقه چند بار تکرار شود، به هر حال مقدار x هیچوقت کمتر از ۱۰ نمی‌شود.

برای پرهیز از چنین وضعیت‌هایی، همیشه به کدهای درون حلقه‌ها دقت کنید تا مبادا به صورت غیر عمد، هر دفعه که کد اجرا می‌شود مقدار متغیر تغییر نکند.

مثال‌های واقعی

در بالا در مورد مثال‌های فرضی صحبت کردیم، اما اجازه دهید نگاهی به چند نمونه واقعی مفید از حلقه‌های Do-while داشته باشیم.

اگر قصد دارید حلقه‌ای ایجاد کنید که داده‌ها را از یک فایل بخواهند تا زمانی که به انتهای فایل برسید، بهتر است از حلقه do-while استفاده کنید. اگر قصد دارید اطلاعات درون یک فایل را بخوانید، مسلما لازم است که حداقل یک حرف خوانده شود. بنابراین می‌توانید از یک حلقه do-while مانند زیر استفاده کنید:

اگر حلقه do-while وجود نداشت، مجبور می‌شدید از یک راه حل نه چندان جالب مانند کد زیر کمک بگیرید:

یک مثال دیگر: گرفتن ورودی از یک کاربر. فرض کنید می‌خواهید برنامه‌ای بنویسید که از کاربر بخواهد یک عدد مثبت وارد کند. با استفاده از یک حلقه do-while، می‌توانید اطمینان حاصل کنید که ورودی آن‌ها درست باشد:

با این حلقه، کاربر محلی برای ورود عدد می‌بیند و یک بار یک مقدار را وارد می‌کند. اگر یک عدد منفی وارد کند، حلقه دوباره اجرا می‌شود و از آن‌ها خواسته می‌شود یک عدد مثبت وارد کنند تا اینکه بالاخره از خواسته شما اطاعت کنند. حلقه‌های دیگر نمی‌توانند به این آسانی این عمل را انجام دهند.

آماده هستید تا از حلقه‌های do-while استفاده کنید؟

ما یک مقاله تقریبا کامل در مورد حلقه‌های do-while ارائه دادیم که شامل اصول اولیه، چگونگی استفاده بهتر از آن‌ها و مقایسه آن‌ها با حلقه‌های دیگر بود. اگر اصلا این مقاله را نخواندید و مستقیما به سراغ نتیجه آمده‌اید، بدانید که حلقه‌های do-while برای زمانی مناسب هستند که شما می‌خواهید چیزی را حداقل یک بار اجرا کنید، اما نمی‌دانید قبل از پایان حلقه، دقیقا چند بار لازم است کد اجرا شود.

در هنگام برنامه‌نویسی، به شرایطی مانند آن‌هایی که گفته شدند فکر کنید. در این صورت مسلما جاهایی که بتوانید به بهترین نحو از حلقه‌های do-while استفاده کنید را خواهید یافت. تقریبا همه زبان‌های دست اول برنامه‌نویسی از حلقه‌های do-while پشتیبانی می‌کنند و حالا دیگر شما نباید هیچ مشکلی در استفاده و اجرای آن‌ها داشته باشید.

منبع: makeuseof

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
 مقدمه ای بر NLog در هسته ASP.NET
 طبقه بندی زبان های برنامه نویسی
به دست آوردن Exceptionها در #C و یافتن همه خطاها
 LINQ(زبان جستجوی یکپارچه)

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات