أهلاً! درس اليوم لن يكون طويلا جدا، لكنه سيكون مفيدا بالتأكيد :) سنتحدث عن ما يسمى بالمشغل الثلاثي . كلمة "Ternary " تعني " مكونة من ثلاثة أجزاء ". إنه بديل لبيان
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);
}
وإليك كيفية عمل هذا المشغل. ويسمى بالمشغل الثلاثي لأنه يشتمل على ثلاثة مكونات:
- شرط واحد (
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