---
title: Ternary Operator
localeTitle: مشغل ثلاثي
---
## مشغل ثلاثي

يستخدم المبرمجون المشغلين الثلاثيين في C من أجل اتخاذ القرار في مكان البيانات الشرطية **إذا كان الأمر** **آخر** . المشغل الثلاثي هو مشغل يأخذ ثلاث حجج. الحجة الأولى هي حجة المقارنة ، والثاني هو النتيجة على المقارنة الحقيقية ، والثالث هو النتيجة على مقارنة خاطئة. إذا كان يساعدك على التفكير في المشغل كطريقة مختصرة لكتابة عبارة if-else.

في ما يلي مثال بسيط لصنع القرار باستخدام **if** and **else** :

 `int a = 10, b = 20, c; 
 
 if (a < b) { 
    c = a; 
 } 
 else { 
    c = b; 
 } 
 
 printf("%d", c); 
` 

يأخذ هذا المثال أكثر من 10 أسطر ، لكن هذا ليس ضروريًا. يمكنك كتابة البرنامج أعلاه في 3 أسطر فقط من الشفرة باستخدام **المشغل الثلاثي** .

### بناء الجملة

`condition ? value_if_true : value_if_false`

يثبت البيان على statement\_1 إذا كانت الشرط صحيحًا ، و statement\_2 على خلاف ذلك.

فيما يلي المثال أعلاه الذي تمت إعادة كتابته لاستخدام المشغل الثلاثي:

 `int a = 10, b = 20, c; 
 
 c = (a < b) ? a : b; 
 
 printf("%d", c); 
` 

يجب أن يكون إخراج المثال:

 `10 
` 

تم تعيين `c` يساوي `a` ، لأن الشرط `a<b` كان صحيحًا.

هذا يبدو بسيطا جدا ، أليس كذلك؟ لاحظ أن `value_if_true` و `value_if_false` يجب أن يكونا من نفس النوع ، ولا يمكن أن يكونا عبارات كاملة ولكن مجرد تعبيرات.

يمكن أن يتداخل المشغل الثلاثي تمامًا مثل عبارات if-else المتداخلة. فكر في عبارة if-else المتداخلة التالية:

 `int a = 1, b = 2, ans; 
 if (a == 1) { 
    if (b == 2) { 
        ans = 3; 
    } else { 
        ans = 5; 
    } 
 } else { 
    ans = 0; 
 } 
 printf ("%d\n", ans); 
` 

إليك الشفرة الموضحة أعلاه التي تمت إعادة كتابتها باستخدام المشغل الثلاثي المتداخل:

 `int a = 1, b = 2, ans; 
 ans = (a == 1 ? (b == 2 ? 3 : 5) : 0); 
 printf ("%d\n", ans); 
` 

يجب أن يكون إخراج كل من الشفرين المذكورين أعلاه كما يلي:

 `3 
`