عملگرهای منطقی AND و OR در جاوا

چاپ

بعنوان یک روش جایگزین برای دستورات if تودرتو، می توانیم از عملگر منطقی AND بین دو عبارت بولین استفاده کنیم تا بررسی کنیم که آیا ارزش هردوی این عبارت ها true می شود یا نه. در جاوا، عملگر AND به صورت دو علامت امپرساند استفاده می شود(&&).  بعنوان مثال، دو عبارت دستوری نشان داده شده در تصویر 5.12 دقیقا مشابه یکدیگر عمل می کنند:

تصویر 5.12

(تصویر 5.12)

در هردوی این موارد، متغیر itemsSold  باید بزرگتر یا مساوی کمترین مقدار لازم برای دریافت پاداش(bonus) باشد. و متغیر totalValue  نیز باید برابر با حداقل مقدار لازم باشد تا اینکه مقدار bonus برابر با SALES_BONUS شود.

باید به خاطر داشت که وقتی از عملگر && استفاده می کنیم، باید در هر طرف آن، یک عبارت بولین کامل را قرار دهید. اگر می خواهید وقتی که مقدار saleAmount بیش از 1000 دلار و کمتر از 5000 دلار قرار دارد، میزان پاداش(bonus) را برابر با 400 دلار قرار دهید، باید به صورت زیر عمل کنید:

if(saleAmount > 1000 && saleAmount < 5000)
bonus = 400;

 

نکته: در فصل 2 آموختید که عملگرهای محاسباتی، باینری هستند زیرا در هر سمت خود به یک عملوند احتیاج دارند. عملگر && نیز یک عملگر باینری است.

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

if((saleAmount > 1000) && (saleAmount < 5000))
bonus = 400;

 در مثال زیر، چون که در هردو طرف عملگر && یک عبارت بولین قرار ندارد، این دستورات کامپایل نخواهند شد و اشتباه هستند:

 عبارت هایی که در هر طرف عملگر && قرار گرفته اند، تنها تا آنجایی ارزیابی می شوند که مشخص شود کل عبارت true یا false است. به این ویژگی، ارزیابی اتصال کوتاه(short-circuit evaluation) گفته می شود. در حین استفاده از عملگر && قبل از اینکه کاری صورت گیرد، ارزش هردوی عبارت های بولین باید true باشد.( در دستورات if تو در تو نیز همین موضوع برقرار است. که می توانید آن را در تصویر 5.10 مشاهده کنید). اگر ارزش عبارتی که اول تست می شود false باشد، عبارت دوم هرگز ارزیابی نمی شود زیرا مقدار ارزش آن دیگر اهمیتی ندارد.  بعنوان مثال، در دستور if زیر، اگر a بزرگتر از LIMIT نباشد، آنگاه ارزیابی ما کامل است زیرا نیازی نیست که ارزیابی کنیم که b بزرگتر از LIMIT است یا نه.

if(a > LIMIT && b > LIMIT)
System.out.println("Both are greater than " + LIMIT);

 شما مجبور نیستید تا از عملگر && استفاده کنید زیرا استفاده از دستورات if تو در تو نیز همین نتیجه را تولید می کند، اما استفاده از عملگر && باعث می شود کدها خلاصه شوند و خطاها کمتر شود و درک کدها ساده تر شود. وقتی که می خوایهم کاری کنیم که تنها نیاز داریم حداقل یکی از شرایط true باشند، می توانیم از if های تو در تو یا از عملگر شرطی OR استفاده کنیم که به صورت || نوشته می شود. بعنوان مثال، اگر می خواهید برای هر مشتری که حداقل یکی از دو شرط را دارا است تخفیف اعمال کنید، یعنی اگر مشتری حداقل 5 قلم کالا خرید یا هر تعداد کالا خرید که سرجمع 3000 دلار قیمت داشت، 10 درصد تخفیف به او داده شود. می توانید این کد را مانند تصویر 5.13 بنویسید:

تصویر 5.13

(تصویر 5.13)

به دو خط عمودی که بعنوان عملگر OR استفاده می شوند، گاهی اوقات pipes گفته می شود. برای ایجاد خط عمودی می توانید کلید شیفت و بک اسلش را بگیرید.

 علاوه بر عملگر && به عملگر || نیز از ارزیابی اتصال کوتاه استفاده می کند. به عبارت دیگر، چون که تنها یکی از عبارت های بولین در عبارت || باید true باشد تا دستورات بعدی اجرا شوند، پس اگر عبارت سمت چپ true باشد، آنگاه نیازی به بررسی عبارت سمت راست نخواهد بود.


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

if(selection == 'A' || selection == 'a')
System.out.println("You chose option A'');