در این مقاله ی آموزشی به آموزش استفاده از عملگرهای شرطی و NOT در جاوا می پردازیم و روش استفاده از آنها را به زبان ساده توضیح می دهیم. 


در کنار استفاده از دستور if و ساختار switch، جاوا یک روش دیگر نیز برای تصمیم گیری به ما ارائه می دهد. عملگر شرطی(conditional operator) به سه عبارت نیاز دارد که با استفاده از یک علامت سوال(؟) و یک علامت دونقطه(:) از یکدیگر جدا می شوند و و از آن بعنوان یک ساختار if و else خلاصه شده، استفاده می شود.

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

testExpression ? trueResult : falseResult;

عبارت اول، یعنی testExpression یک عبارت بولین است و به صورت true یا false ارزیابی می شود. اگر ارزش این عبارت true باشد، مقدار عبارت پس از علامت سوال یعنی trueResult برگردانده می شود؛ اما اگر ارزش testExpression برابر با false باشد، مقدار عبارت falseResult برگردانده می شود. 

نکته: شما قبلاً در مثال های زیادی، با عملگرهای باینری، مانند == یا && روبه رو شده اید. به عملگر شرطی، عملگر سه گانه(ternary) نیز گفته می شود. عملگری که از سه عملوند تشکیل شده است. در جاوا 6، عملگر شرطی، تنها عملگرِ سه گانه محسوب می شود. بنابراین گاهی اوقات به آن عملگر سه گانه(ternary) گفته می شود. 


نکته: در جاوا 7، یک نسخه ی جمع و جور شده از عملگر سه گانه معرفی شده است که مقادیر null را که به آبجکت ها انتساب داده شده اند، چک می کند. این عملگر جدید، عملگر الویس(Elvis) است زیرا از یک علامت سوال و دونقطه به همراه هم استفاده می کند ( ?: ). 


بعنوان مثال، فرض کنید می خواهید کمترین قیمت را برای یک کلای فروشی انتساب دهید. متغیر a را برای قیمت اعلام شده و متغیر b را برای قیمت با تخفیف، روی برچسب فروش در نظر می گیریم. عبارت مورد نظر برای انتساب کمترین هزینه به صورت زیر است:

smallerNum = (a < b) ? a : b;

هنگامی که عبارت a < b ارزیابی می شود، اگر a کمتر از b باشد، مقدار a برگردانده می شود و در متغیر smallerNum ذخیره می شود. اما اگر a کوچکتر از b نباشد، مقدار b برگردانده می شود و در متغیر smallerNum ذخیره می شود. 

اگر بخواهیم همین نتیجه را با استفاده از دستور if و else به دست بیاوریم، می توانیم به صورت زیر عمل کنیم:

if(a < b)
  smallerNum = a;
else
  smallerNum = b;

مزیت استفاده از عملگر شرطی، اختصار بیان آن است. 


استفاده از عملگر NOT در جاوا

ما از عملگر NOT که برای آن از علامت تعجب(!) استفاده می کنیم، برای نقیض کردن نتیجه ی هر عبارت بولین استفاده می کنیم. اگر ارزش یک عبارت true ارزیابی شود، وقتی که قبل از آن از عملگر NOT استفاده شود، ارزش آن برابر با false می شود و بنابراین، اگر ارزش یک عبارت false باشد، و قبل از آن از عملگر NOT استفاده شود، ارزش آن true می شود. 

بعنوان مثال، فرض کنید حق بیمه ی ماهانه ی یک ماشین، اگر سن راننده ی آن 25 سال یا کمتر باشد، 200 دلار باشد؛ و اگر سن راننده 26 سال یا بیشتر باشد، حق بیمه 125 دلار باشد. هریک از دستورات if و else در تصویر 5.23 به درستی مقادیر بیمه(premium) را انتساب می دهند( و مشخص می کنند). 

(تصویر 5.23 : دستورات if و else که همه یک نتیجه را دارند)

دستورات if و else

در تصویر 5.23، دستوراتی که در آنها عملگر ! وجود دارد، فهمیدن و خواندن آنها سخت تر است؛ به ویژه چون از دو جفت پرانتز استفاده می کنند؛ اما نتیجه ی فرآیند تصمیم گیری، در هر مورد، با بقیه یکسان است. 

استفاده از عملگر ! وقتی که مقدار یک متغیر بولین تست شده باشد، واضح تر است. بعنوان مثال، یک متغیر که به صورت boolean oldEnough = (age >= 25); مقدار دهی اولیه شده باشد، می تواند بخشی از عبارت نسبتاً ساده ی if(!oldEnough)… باشد. 


دو عبارت صحیح و یک عبارت اشتباه

بررسی کنید که کدام یک از عبارات زیر در زمینه ی استفاده از عملگرهای شرطی و NOT صحیح و کدام اشتباه است:

  1. از عملگر شرطی، بعنوان یک نسخه ی خلاصه شده از دستور if و else استفاده می شود و به دو عبارت که با استفاده از یک علامت تعجب از یکدیگر جدا شده اند، نیاز دارد.
  2. عملگر NOT به صورت یک علامت تعجب نوشته می شود. 
  3. مقدار هر عبارت false وقتی که قبل از آن از عملگر NOT استفاده شود، به true تبدیل می شود. 

پاسخ:

عبارت شماره 1 اشتباه است. عملگر شرطی به سه عبارت که با استفاده از یک علامت سوال و یک علامت دو نقطه از یکدیگر جدا شده اند نیاز دارد.