Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Studies

משפט if טרנרי (ternary if)

אחד המקרים הנפוצים ביותר שמערבים משפטי if הוא בו נרצה לחשב ערך אחד אם תנאי נכון, ואחרת ערך אחר. במקרה זה ניתן להשתמש במשפט מיוחד שהתוצאה שלו היא ערך אחד או אחר בהתאם לתנאי. נבחן את התוכניות הבאות:

#define DISCOUNT_LIMIT 1000
#include <stdio.h>
int main() {
    int total_price;
    float discount;
    if (total_price > DISCOUNT_LIMIT) {
        discount = 0.05;
    } else {
        discount = 0;
    }
    printf("Discount on purchase: %f", discount);
}
#include <stdio.h>
#define ADULT 18
int main() {
    int age;
    scanf("%d", &age);
    if (age < ADULT) {
        printf("You are not an adult\n");
    } else {
        printf("You are an adult\n");
    }
}

זה מאוד מסורבל ביחס לפעולה מאוד פשוטה. ביטוי if טרנרי מאפשר לנו לשלב את כל השורות האלו לאחת ע״פ הסינטקס הבא:

boolean expression ? <value if true> : <value if false>;

כלומר, אם הביטוי הבוליאני הוא true, נקבל את הביטוי הראשון, ואחרת את השני - במשפט אחד!

ניתן לחשוב על משפט כזה בתור עם שתי תשובות אפשריות - אנחנו שואלים את השאלה שהיא התנאי (ולכן יש סימן שאלה אחריה), מיד לאחר מכן מציגים את הערך אם התשובה היא כן, ובמידה ולא לאחר ה-: מציגים את הערך השני.

בדוגמאות שלנו נקבל:

float discount = total_price > DISCOUNT_LIMIT ? 0.05 : 0;
#include <stdio.h>
#define ADULT 18
int main() {
    int age;
    scanf("%d", &age);
    printf(
        "%s\n", age < ADULT ? 
        "You are not an adult\n" : 
        "You are an adult\n"
    );
}

Note

אין חובה לכתוב כל מחרוזת בשורה חדשה, אך לפעמים זה הופך את הקוד לקריא ונוח יותר מאשר לכתוב הכל בשורה אחת ארוכה.

וזה באמת יותר קצר ואלגנטי. לדוגמא נוספת - ניתן לכתוב כך בתוך printf על מנת לפרמט טקסט בהתאם לתנאי:

int jim_age = 30;
int pam_age = 28;
printf("oldest age of jim and pam: %d", jim_age > pam_age ? jim_age : pam_age);