سلام! درس امروز خیلی طولانی نخواهد بود، اما قطعا مفید خواهد بود :) ما قصد داریم در مورد عملگر به اصطلاح سه تایی صحبت کنیم .
سه گانه به معنای " مرکب از سه بخش " است. این یک جایگزین برای
به هر حال، پرانتزهای اطراف شرط لازم نیست: ما آنها را برای خوانایی بیشتر اضافه کردیم. بدون آنها نیز کار می کند:
این بهترین شیوه ها و توصیه ها را برای برنامه نویسان گرد هم می آورد، که به شما کمک می کند کدی بنویسید که نه تنها کاربردی است، بلکه به راحتی قابل خواندن است.

if-else
دستور جریان کنترل است که قبلاً با آن آشنا شده اید. بیایید یک مثال بزنیم. فرض کنید شخصی تصمیم گرفته است که به فیلمی با رتبه R برود (زیر 17 سال به همراهی والدین یا قیم بزرگسال نیاز دارد). طلیعه گر سن خود را در درب چک می کند: اگر از بررسی سن عبور کرده باشد، اجازه ورود دارد. اگر نه، او را به خانه می فرستند. بیایید یک Person
کلاس را اعلام کنیم و با استفاده از یک if-else
دستور این را بررسی کنیم:
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse;
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
System.out.println(usherResponse);
}
}
خروجی کنسول:
"Everything is in order. Come in!"
اگر خروجی کنسول را حذف کنیم، بررسی ما به این صورت است:
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
منطق در اینجا بسیار ساده است: یک شرط بررسی می شود (سن >= 18) بر اساس نتیجه، به متغیر usherResponse
یکی از دو رشته با پاسخ آشور اختصاص داده می شود. چنین موقعیت هایی ("یک شرط - دو نتیجه ممکن") در برنامه نویسی بسیار رایج هستند. و به همین دلیل عملگر سه تایی ایجاد شد. میتوانیم از آن برای سادهسازی بررسی خود به یک خط کد استفاده کنیم:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
در اینجا نحوه عملکرد این اپراتور آمده است. این عملگر سه تایی نامیده می شود، زیرا شامل 3 جزء است:
- یک شرط (
person.getAge() > 18
) - دو نتیجه ممکن ( "همه چیز مرتب است. بیا داخل!" و "این فیلم برای سن شما مناسب نیست!" )
person.getAge() > 18 ?
"آیا سن این فرد بیش از 18 سال است؟" سپس اولین مقدار را می نویسیم . این مقدار در صورتی استفاده می شود که شرط به صورت زیر ارزیابی شودtrue
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
آیا سن این فرد بیشتر از 18 سال است؟ اگر بله، usherResponse
متغیر را روی "همه چیز مرتب است. وارد شوید!" بعد نماد " :
" و مقدار دوم می آید . این مقدار در صورتی استفاده می شود که شرط به صورت زیر ارزیابی شودfalse
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
آیا سن این فرد بیشتر از 18 سال است؟ اگر بله، usherResponse
متغیر را روی "همه چیز مرتب است. وارد شوید!" . در غیر این صورت، usherResponse
متغیر را روی "این فیلم برای سن شما مناسب نیست!" به طور کلی، در اینجا منطق عملگر سه تایی به نظر می رسد. وضعیت ؟ نتیجه 1 : نتیجه 2 
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
پس از چه چیزی باید استفاده کنید؟ بیانیه if-else
یا عملگر سه تایی؟ از نظر عملکرد هیچ تفاوتی وجود ندارد. دقیق تر، شاید وجود داشته باشد، اما ناچیز است. بزرگترین نکته در اینجا خوانایی کد شماست. کدی که می نویسید نه تنها باید به درستی کار کند، بلکه باید به راحتی خوانده شود . پس از همه، ممکن است توسط برنامه نویسان دیگر، همکاران شما "به ارث برده" شود! اگر درک آن دشوار است، کار آنها و شما را پیچیده می کند (آنها هر 5 دقیقه یکبار برای توضیح به سراغ شما می آیند). توصیه کلی این است: اگر شرایط ساده است و به راحتی تأیید می شود، می توانید از اپراتور سه تایی بدون آسیب استفاده کنید. این به شما امکان می دهد مقدار کد و تعداد if-else
عبارات را کاهش دهید (و ممکن است تعداد زیادی از آنها وجود داشته باشد). اما اگر شرط پیچیده است و شامل چندین مرحله است، بهتر است از یک if-else
دستور استفاده کنید. به عنوان مثال، استفاده از یک عملگر سه تایی ایده بدی در این مورد خواهد بود:
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
بلافاصله معلوم نیست اینجا چه اتفاقی می افتد! خواندن کد بسیار دشوار شده است. و همه به دلیل شرایط پیچیده:
- اگر فردی بزرگتر از 18 سال است، بلیت (یا پاس رایگان) دارد و فرزند خردسال ندارد، می تواند وارد شود.
- اگر حتی یک قسمت از شرط نادرست باشد، نمی تواند.
if-else
. بله، کد ما بزرگتر خواهد بود، اما بسیار خواناتر خواهد بود. و همکاران شما اگر این کد را به ارث ببرند با کف دست مواجه نخواهند شد :) در نهایت می توانم یک کالای خوب را به شما توصیه کنم. ما در طول درس به خوانایی کد پرداختیم. کتاب «کد پاک» نوشته رابرت مارتین که به کتابی کلاسیک تبدیل شده است به همین موضوع اختصاص دارد. 
GO TO FULL VERSION