برنامه نویسی ۵۲۷ بازدید

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

بخش نهم آموزش جامع برنامه‌نویسی جاوا: عملگرها

بخش هشتم آموزش جامع برنامه‌نویسی جاوا: رشته‌ها

بخش پنجم آموزش جامع برنامه‌نویسی جاوا: اعلان کلاس

حلقه چیست؟

حلقه در برنامه‌نویسی، سازه‌ای است که تا زمانی که شرط (یا شرایط) معینی برقرار باشد تکرار می‌شود. برای نمونه ممکن است بخواهیم برنامه تمام رکوردهای یک فایل را تا انتها بخواند، یا هر جزء از یک آرایه را به ترتیب پردازش کند. (در مورد آرایه‌ها در ادامه بیشتر توضیح خواهیم داد.)

سازه‌های حلقه امکان تکرار اجرای کد را بیش از یک‌بار فراهم می‌کنند:

  • حلقه for
  • حلقه while
  • حلقه do…while

حلقه‌های for

سازه‌ی ابتدایی حلقه در زبان جاوا گزاره for است. می‌توان از گزاره for برای تکرار بررسی چند مقدار برای تعیین تعداد دفعات تکرار حلقه استفاده کرد. دستورزبان مجرد برای حلقه for چنین است:

for (initialization; loopWhileTrue; executeAtBottomOfEachLoop) {
statementsToExecute
}

در آغاز حلقه for، گزاره راه‌اندازی اجرا می‌شود (می‌توان چند گزاره راه‌اندازی را با کاما از هم جدا کرد). تا زمانی که شرط loopWhileTrue (یک عبارت شرطی جاوا که باید بررسی شود درست است یا نادرست) درست باشد، حلقه اجرا می‌شود. در انتهای حلقه، executeAtBottomOfEachLoop اجرا می‌شود.

برای نمونه اگر بخواهیم کد درون متد ()main در قطعه کد 8 سه بار اجرا شود می‌توان یک حلقه for برای آن ایجاد کرد.

قطعه کد 8

public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
for (int aa = 0; aa < 3; aa++)
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
}
}

متغیر محلی aa با مقدار اولیه 0 در آغاز قطعه کد اعلان می‌شود. این گزاره تنها یک‌بار در زمان راه‌اندازی حلقه اجرا می‌شود. سپس حلقه سه بار اجرا می‌شود و هر بار aa یک واحد افزایش می‌یابد.

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

حلقه‌های while

دستورزبان حلقه while چنین است:

while (condition) {
statementsToExecute
}

همان‌طور که احتمالاً انتظار دارید اگر شرط درست باشد حلقه اجرا می‌شود. در بالای هر تکرار (یعنی پیش از اجرای گزاره‌ها) شرط مجدد بررسی می‌شود. اگر شرط درست باشد حلقه اجرا می‌شود. بنابراین، این امکان وجود آرد که حلقه loop در صورتی که شرط آن نادرست باشد حتی یک‌بار هم اجرا نشود.

دوباره نگاهی به حلقه for در قطعه کد 8 می‌کنیم. برای مقایسه، در قطعه کد 9 حلقه loop همان نتیجه را ارائه می‌کند.

قطعه کد 9- حلقه while

public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
int aa = 0;
while (aa < 3) {
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
aa++;
}
}

همچنان که مشاهده می‌شود حلقه loop به کدنویسی بیشتری نسبت به حلقه for نیاز دارد. باید نخست متغیر aa مقداردهی اولیه شود و باید توجه کرد که افزایش مقدار این متغیر در انتهای حلقه صورت می‌گیرد.

حلقه‌های do…while

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

قطعه کد 10- حلقه do…while

int aa = 0;
do {
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
aa++;
} while (aa < 3);

عبارت شرطی (aa<3) تا زمانی که حلقه به انتها نرسد بررسی نمی‌شود.

خروج از حلقه

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

قطعه کد 11- گزاره break

public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
int aa = 0;
while (aa < 3) {
if (aa == 1)
break;
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" + p.getGender());
aa++;
}
}

گزاره break اجرای کد را به نخستین عبارت خارج از حلقه می‌برد.

تداوم حلقه

در نمونه ساده قطعه کد 11 حلقه را تنها یک‌بار اجرا کردیم و سپس خارج شدیم. می‌توان از تکرار یک‌باره حلقه جلوگیری کرده و به چرخش آن تداوم بخشید. به این منظور باید یک گزاره continue استفاده شود که در قطعه کد 12 مشاهده می‌شود.

قطعه کد 12- گزاره continue

public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
int aa = 0;
while (aa < 3) {
aa++;
if (aa == 2)
continue;
Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
l.info("Loop executing iteration# " + aa);
l.info("Name: " + p.getName());
l.info("Age:" + p.getAge());
l.info("Height (cm):" + p.getHeight());
l.info("Weight (kg):" + p.getWeight());
l.info("Eye Color:" + p.getEyeColor());
l.info("Gender:" +
p.getGender());
}

در قطعه کد 12 از تکرار دوم حلقه ممانعت می‌شود ولی به تکرار سوم ادامه می‌دهیم. Continue زمانی که در حال پردازش رکوردها هستیم و با رکوردی مواجه می‌شویم که نمی‌خواهیم پردازش کنیم به درد می‌خورد. می توان از این رکورد پرش کرد و در رکورد بعدی، حلقه را تداوم بخشید.

در بخش یازدهم با کلکسیون و انواع آن در زبان برنامه‌نویسی جاوا آشنا خواهیم شد.

 

منبع

بر اساس رای ۴ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

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

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر