آموزش جامع برنامه نویسی جاوا به زبان ساده — بخش دهم: حلقهها
علاوه بر اینکه برنامه به گزارههای شرطی و مشاهده خروجیهای مختلف بر اساس سناریوهای مختلف نیاز دارد گاهی اوقات نیاز هست که کار مشخصی را برای دفعات معینی تکرار کنیم. در این بخش در مورد سازههایی بحث میکنیم که برای تکرار کد یا انجام بیش از یکبار آن استفاده میشوند.
بخش نهم آموزش جامع برنامهنویسی جاوا: عملگرها
بخش هشتم آموزش جامع برنامهنویسی جاوا: رشتهها
بخش پنجم آموزش جامع برنامهنویسی جاوا: اعلان کلاس
حلقه چیست؟
حلقه در برنامهنویسی، سازهای است که تا زمانی که شرط (یا شرایط) معینی برقرار باشد تکرار میشود. برای نمونه ممکن است بخواهیم برنامه تمام رکوردهای یک فایل را تا انتها بخواند، یا هر جزء از یک آرایه را به ترتیب پردازش کند. (در مورد آرایهها در ادامه بیشتر توضیح خواهیم داد.)
سازههای حلقه امکان تکرار اجرای کد را بیش از یکبار فراهم میکنند:
- حلقه 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 زمانی که در حال پردازش رکوردها هستیم و با رکوردی مواجه میشویم که نمیخواهیم پردازش کنیم به درد میخورد. می توان از این رکورد پرش کرد و در رکورد بعدی، حلقه را تداوم بخشید.
در بخش یازدهم با کلکسیون و انواع آن در زبان برنامهنویسی جاوا آشنا خواهیم شد.