JavaRush /مدونة جافا /Random-AR /عامل التشغيل الثلاثي في جافا

عامل التشغيل الثلاثي في جافا

نشرت في المجموعة
مرحبًا! محاضرة اليوم لن تكون طويلة جدًا ولكنها مفيدة بالتأكيد :) سنتحدث عن ما يسمى بالمشغل الثلاثي . المشغل الثلاثي - 1"الثلاثي" يعني "الثلاثي". هذا بديل للعامل الشرطي 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 القيمة "هذا الفيلم غير مناسب لعمرك!" هذا هو ما يبدو عليه المنطق العام للمشغل الثلاثي. حالة ؟ result 1 : result 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 عامًا + لديه تذكرة (أو لديه قسيمة للدخول المجاني) + وليس معه أطفال صغار - فيمكنه المرور.
  • إذا أعاد جزء واحد على الأقل من الشرط خطأ، فلا يمكن ذلك.
ومن الواضح أن هذا هو المكان الذي سيكون من الأفضل استخدامه if-else. نعم، سيكون حجم الكود الخاص بنا أكبر، لكنه سيكون أكثر قابلية للقراءة عدة مرات. ولن يمسك أي من زملائك رأسه إذا ورث مثل هذا الرمز :) أخيرًا، يمكنني أن أوصيك بالكتاب. تطرقنا في المحاضرة إلى موضوع إمكانية قراءة الكود. الكتاب الكلاسيكي "Clean Code" لروبرت مارتن مخصص لها. المشغل الثلاثي - 3فهو يحتوي على أفضل الممارسات والتوصيات للمبرمجين والتي ستسمح لك ليس فقط بكتابة التعليمات البرمجية العملية، ولكن أيضًا سهلة القراءة. هناك مراجعة لهذا الكتاب على JavaRush.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION