JavaRush /وبلاگ جاوا /Random-FA /اپراتور سه تایی در جاوا

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

در گروه منتشر شد
سلام! سخنرانی امروز خیلی طولانی نخواهد بود، اما قطعا مفید خواهد بود :) ما در مورد عملگر به اصطلاح سه تایی صحبت خواهیم کرد . اپراتور سه تایی - 1"Ternary" به معنای "سه گانه" است. این یک جایگزین برای عملگر شرطی است if-elseکه قبلاً با آن آشنا هستید. بیایید یک مثال بزنیم. فرض کنید شخصی تصمیم می گیرد برای دیدن فیلمی با رتبه 18+ به سینما برود. نگهبان در ورودی سن او را چک می کند: اگر محدودیت سنی را رعایت کند، به او اجازه ورود به سالن را می دهد، اگر نه، او را به خانه می فرستد. بیایید یک کلاس ایجاد کنیم Manو آن را با if-else:
public class Man {

   private int age;

   public Man(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Man man = new Man(22);

       String securityAnswer;

       if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }

       System.out.println(securityAnswer);

   }
}
خروجی کنسول:

"Все в порядке, проходите!"
اگر خروجی را به کنسول برداریم، آزمایش ما به این صورت است:
if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }
در اینجا، در واقع، منطق ساده کار می کند: یک شرط بررسی می شود (سن >= 18). بسته به این، securityAnswerیکی از دو رشته با پاسخ محافظ به متغیر اختصاص داده می شود. چنین موقعیت هایی، "یک شرط - دو نتیجه ممکن"، اغلب در برنامه نویسی رخ می دهد. بنابراین همان عملگر سه تایی برای آنها ایجاد شد. با استفاده از آن، ما می توانیم تأیید خود را به یک خط کد ساده کنیم:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
این همان چیزی است که کار این اپراتور به نظر می رسد. سه گانه (سه گانه) نامیده می شود زیرا 3 جزء در کار آن شرکت می کنند:
  • یک شرط ( man.getAge() >= 18)
  • دو نتیجه ممکن ( "اشکالی نداره، ادامه بده!" و "این فیلم برای سن شما مناسب نیست!" )
ابتدا یک شرط در کد نوشته می شود و به دنبال آن علامت سوال می آید.
man.getAge() >= 18 ?
"آیا سن فرد بیشتر از 18 سال یا مساوی است؟" نتیجه زیر اولین نتیجه است. اگر شرط برگردد فعال می شود true، یعنی درست است:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
آیا سن فرد بیشتر از 18 سال است یا مساوی؟ securityAnswer اگر بله، مقدار "همه چیز خوب است، وارد شوید!" به متغیر اختصاص دهید. . بعد از عملگر " :"، نتیجه دوم نوشته می شود. اگر شرط برگردد فعال می شود false، یعنی نادرست است:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
آیا سن فرد بیشتر از 18 سال است یا مساوی؟ securityAnswer اگر بله، مقدار "همه چیز خوب است، وارد شوید!" به متغیر اختصاص دهید. . در غیر این صورت، به متغیر securityAnswer مقدار «این فیلم برای سن شما مناسب نیست» اختصاص دهید. این همان چیزی است که منطق کلی عملگر سه تایی به نظر می رسد. وضعیت ؟ نتیجه 1 : نتیجه 2 اپراتور سه تایی - 2به هر حال، قرار دادن پرانتز در اطراف شرط ضروری نیست: ما این کار را برای خوانایی بیشتر انجام دادیم. بدون آنها کار خواهد کرد:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
از چه چیزی باید استفاده کنید: if-else, یا عملگر سه تایی؟ از نظر عملکرد تفاوت زیادی وجود ندارد. به عبارت دقیق تر، ممکن است وجود داشته باشد، اما ناچیز است. در اینجا سوال بیشتر به خوانایی کد شما مربوط می شود. در برنامه نویسی بسیار مهم است: کدی که می نویسید نه تنها باید درست کار کند، بلکه خواندن آن نیز آسان باشد. از این گذشته ، می توان آن را به سایر برنامه نویسان ، همکاران شما "به ارث برد"! و اگر درک آن دشوار باشد، هم کار آنها و هم کار شما را پیچیده می کند - آنها هر 5 دقیقه یک بار برای توضیحات به سراغ شما می روند. یک توصیه کلی ممکن است اینگونه به نظر برسد: اگر شرایط ساده و قابل بررسی است، می‌توانید از اپراتور سه تایی بدون آسیب استفاده کنید. به این ترتیب شما مقدار کد و تعداد چک ها را کاهش می دهید if-elseکه ممکن است تعداد زیادی از آنها وجود داشته باشد. اما اگر شرایط پیچیده و چند مرحله ای است، بهتر است از if-else. به عنوان مثال، در این مورد، استفاده از عملگر سه تایی ایده بدی خواهد بود:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Come in!" : "You can not pass!";
بنابراین شما بلافاصله متوجه نمی شوید که اینجا چه خبر است! خواندن کد بسیار دشوار شده است. و همه به دلیل شرایط دشوار:
  • اگر فردی بالای 18 سال یا مساوی باشد + بلیط داشته باشد (یا کوپن ورودی رایگان داشته باشد) + فرزندان کوچک همراه خود نداشته باشد - پس می تواند بگذرد.
  • اگر حداقل یک قسمت از شرط false را برگرداند، نمی تواند.
اینجاست که استفاده از آن به وضوح بهتر است if-else. بله، کد ما از نظر اندازه بزرگتر است، اما چندین برابر قابل خواندن است. و هیچ یک از همکاران شما اگر چنین کدی را به ارث ببرند، سرشان را نمی گیرند :) در نهایت می توانم کتاب را به شما توصیه کنم. در سخنرانی به موضوع خوانایی کد پرداختیم. کتاب کلاسیک "کد پاک" نوشته رابرت مارتین به او تقدیم شده است. اپراتور سه تایی - 3این شامل بهترین شیوه ها و توصیه هایی برای برنامه نویسان است که به شما امکان می دهد نه تنها کدهای کارآمد، بلکه خواندنی آسان نیز بنویسید. بررسی این کتاب در JavaRush وجود دارد.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION