آموزش جامع برنامه نویسی جاوا به زبان ساده – بخش نهم: عملگرها
در این بخش در مورد گزارهها و عملگرهای شرطی توضیح میدهیم که به این منظور استفاده میشوند که برنامههای جاوا بدانند باید بر اساس ورودیهای مختلف چگونه پاسخ بدهند.
عملگرهای رابطهای و شرطی
زبان جاوا عملگرها و گزارههای کنترلی ارائه میکند که میتواند برای تصمیمگیری در مورد کد استفاده شوند. یک تصمیم در کد معمولاً با یک عبارت بولی آغاز میشود. عبارت بولی عبارتی است که نتیجه آن یا درست است یا نادرست. چنین عبارتهایی عملگرهای رابطهای هستند که دو عملوند را با همدیگر و با عملگرهای شرطی مقایسه میکنند.
در جدول زیر عملگرهای رابطهای و شرطی زبان جاوا فهرست شدهاند.
عملگر | استفاده | در صورتی درست است که... |
> | a > b | a بزرگتر از b باشد. |
>= | a >= b | a بزرگتر یا برابر با b باشد. |
< | a < b | a کمتر از b باشد. |
<= | a <= b | a کمتر یا برابر با b باشد. |
== | a == b | a برابر با b باشد. |
!= | a!= b | a و b نابرابر باشند |
&& | a && b | a و b هر دو درست باشند؛ مقدار شرطی b بررسی میشود (اگر a نادرست باشد، b بررسی نمیشود) |
|| | a || b | a یا b درست باشد، مقدار شرطی b را بررسی میکند (اگر a درست باشد، b بررسی نمیشود.) |
! | !a | a نادرست باشد. |
& | a & b | a و b هر دو درست باشند، همواره b را بررسی میکند. |
| | a | b | a یا b درست باشند، همواره b را بررسی میکند. |
^ | a ^ b | a و b متفاوت باشند. |
گزاره if
اینک که با عملگرها آشنا شدیم زمان استفاده از آنها رسیده است. این کد نشان میدهد که وقتی مقداری منطق به دسترسی getHeight() کلاس person اضافه میکنیم چه اتفاقی میافتد:
public int getHeight() {
int ret = height;
// If locale of the computer this code is running on is U.S.,
if (Locale.getDefault().equals(Locale.US))
ret /= 2.54;// convert from cm to inches
return ret;
}
اگر تنظیمات مکان رایانه بر روی ایالاتمتحده باشد (که سیستم متریک در آن استفاده نمیشود) بهتر است که مقدار درونی height (سانتیمتر) را به اینچ تبدیل کنیم. این مثال نحوه استفاده از گزاره if را نشان میدهد. در این مثال یک عبارت بولی که درون پرانتز است بررسی میشود. اگر مقدار عبارت true باشد، برنامه عبارت بعدی را اجرا میکند.
در این مورد تنها لازم است که یک گزاره if را برای بررسی Locale رایانه اجرا کنیم تا مشخص شود که آیا ایالاتمتحده است یا نه. اگر لازم باشد بیش از یک گزاره شرطی اجرا شوند میتوان از آکولاد برای تشکیل یک گزاره ترکیبی استفاده کرد گزاره ترکیبی چند گزاره را در یک گزاره ترکیب میکند. گزارههای ترکیبی میتوانند شامل گزارههای ترکیبی دیگری نیز باشند.
حوزه متغیر
هر متغیری در برنامه جاوا حوزهای دارد. این حوزه فضای نام بومی نامیده میشود و میتوان از طریق نام درون کد به آن دسترسی یافت. متغیر در خارج از این حوزه اصطلاحاً out of scope نامیده میشود و اگر سعی شود به آن دسترسی پیدا کرد خطای کامپایلر ایجاد میشود. سطوح حوزه در زبان جاوا چنانکه در قطعه کد 7 دیده میشود در اعلان متغیر تعریف میشوند.
public class SomeClass {
private String someClassVariable;
public void someMethod(String someParameter) {
String someLocalVariable = "Hello";
if (true) {
String someOtherLocalVariable = "Howdy";
}
someClassVariable = someParameter; // legal
someLocalVariable = someClassVariable; // also legal
someOtherLocalVariable = someLocalVariable;// Variable out of scope!
}
public void someOtherMethod() {
someLocalVariable = "Hello there";// That variable is out of scope!
}
}
درون someClass متغیر someClassVariable از سوی همه وهلههای متد قابلدسترسی است (یعنی غیر استاتیک است). درون someClass پارامترهای someParameter قابلمشاهده هستند ولی خارج از این متد چنین نیست و این حالت در مورد someLocalVariable نیز صدق میکند. درون بلوک if متغیر someOtherLocalVariable اعلان شده است و خارج از آن بلوک if بهصورت خارج از حوزه (out of scope) خواهد بود. به همین دلیل ما به این متغیر حوزه بلوک میگوییم زیرا بلوکها (که با { و } مشخص میشوند) کرانهای حوزه را تعریف میکنند.
حوزهها قواعد زیادی دارند اما قطعه کد 7 رایجترین انواع آنها را نشان میدهد. چند دقیقه را صرف مطالعه کد و آشنا شدن با این قواعد بکنید.
گزاره else
برخی اوقات در گردش کنترل یک برنامه میخواهیم تنها زمانی کاری را انجام دهیم که عبارت خاصی نتواند درست باشد. در این حالت else به میدان میآید:
public int getHeight() {
int ret;
if (gender.equals("MALE"))
ret = height + 2;
else {
ret = height;
Logger.getLogger("Person").info("Being honest about height...");
}
return ret;
}
گزاره else همانند if عمل میکند. در این حالت دو گزاره در یک گزاره ترکیبی جمع میشوند و برنامه درون آنها اجرا میشود.
از else برای اجرای یک بررسی if دیگر هم میتوان استفاده کرد:
if (conditional) {
// Block 1
} else if (conditional2) {
// Block 2
} else if (conditional3) {
// Block 3
} else {
// Block 4
} // End
اگر مقدار شرطی برابر با true باشد، بلوک 1 اجرا میشود و برنامه به عبارت پس از آخرین آکولاد (که با // مشخص شده است) پرش میکند. اگر مقدار شرطی true نباشد، شرط دوم ارزیابی میشود. اگر شرط دوم true باشد در این صورت بلوک دوم اجرا میشود و سپس برنامه به گزاره بعد از آکولاد پایانی میرود. اگر شرط دوم هم true نباشد در این صورت برنامه به شرط سوم میرود و همین طور تا آخر. اگر همه شرطها نادرست باشند در این صورت بلوک 4 اجرا میشود.
عملگر سهتایی
زبان جاوا یک عملگر مفید برای انجام بررسیهای گزاره if/else دارد. این عملگر چنین است:
(conditional)? statementIfTrue: statementIfFalse;
اگر شرط conditional درست باشد عبارت statementIfTrue اجرا میشود و در غیر این صورت عبارت statementIfFalse اجرا میشود. گزارههای ترکیبی برای هیچکدام از این عبارتها مجاز نیستند.
عملگر سهتایی زمانی که بخواهیم کاری را در صورت درست بودن و کار دیگری را در صورت نادرست بودن مقدار شرط انجام دهیم مناسب است. عملگرهای سهتایی اغلب برای مقداردهی اولیه یک متغیر استفاده میشوند مانند:
public int getHeight() {
return (gender.equals("MALE"))? (height + 2): height;
}
پرانتزهای پس از علامت سؤال ضروری نیستند اما کد را خواناتر میکنند.
در بخش دهم این سلسله آموزشها با یکی از اساسیترین مفاهیم برنامهنویسی به نام حلقهها آشنا خواهیم شد.