CodeGym /وبلاگ جاوا /Random-FA /اپراتور جاوا سه تایی
John Squirrels
مرحله
San Francisco

اپراتور جاوا سه تایی

در گروه منتشر شد
سلام! درس امروز خیلی طولانی نخواهد بود، اما قطعا مفید خواهد بود :) ما قصد داریم در مورد عملگر به اصطلاح سه تایی صحبت کنیم . اپراتور سه تایی - 1سه گانه به معنای " مرکب از سه بخش " است. این یک جایگزین برای 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 اپراتور سه تایی - 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. بله، کد ما بزرگتر خواهد بود، اما بسیار خواناتر خواهد بود. و همکاران شما اگر این کد را به ارث ببرند با کف دست مواجه نخواهند شد :) در نهایت می توانم یک کالای خوب را به شما توصیه کنم. ما در طول درس به خوانایی کد پرداختیم. کتاب «کد پاک» نوشته رابرت مارتین که به کتابی کلاسیک تبدیل شده است به همین موضوع اختصاص دارد. اپراتور سه تایی - 4این بهترین شیوه ها و توصیه ها را برای برنامه نویسان گرد هم می آورد، که به شما کمک می کند کدی بنویسید که نه تنها کاربردی است، بلکه به راحتی قابل خواندن است.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION