Operátor podmínky je ternární operátor (má tři operandy). Je velmi podobný IF struktuře

operator podminky

Zde vidíme jednotlivé části operátor podmínky

  • podmínka
  • výraz, pokud je podmínka pravdivá
  • výraz, pokud je podmínka nepravdivá

Mějme program, kde podmínka je pravdivá

#include <stdio.h>

int main() {
    int x =  0 < 1 ? 5 + 5 : 2 + 2 + 1;

    printf("x je %i\n", x);

    return 0;
}

Nám dává

x je 10

Podmínka se vyhodnotí jako pravdivá a do proměnné x se uloží výsledek výrazu 5 + 5.

Mějme program, kde podmínka je nepravdivá

#include <stdio.h>

int main() {
    int x =  0 > 1 ? 5 + 5 : 2 + 2 + 1;

    printf("x je %i\n", x);

    return 0;
}

Nám dává

x je 5

Podmínka se vyhodnotí jako nepravdivá a do proměnné x se uloží výsledek výrazu 2 + 2 + 1.

Mohli bychom samozřejmě použít i závorky

#include <stdio.h>

int main() {
    int x =  (0 > 1) ? (5 + 5) : (2 + 2 + 1);

    printf("x je %i\n", x);

    return 0;
}

A program by fungoval pořád stejně.

Zanoření podmínkových operátorů

Podmínkové operátory se dají zanořovat. Mějme funkci s jedním parametrem typu int. Pokud je hodnota parametru záporná, funkce vrátí -1. Pokud je kladná, tak vrátí 1. Pokud je nula, tak se vrátí nula.

int vrat_hodnotu(int x) {
    if (x < 0) {
        return -1;
    }

    if (x > 0) {
        return 1;
    }

    return 0;
}

Tuto funkci bychom mohli napsat jako dva operátory podmínky v sobě.

#include <stdio.h>

int vrat_hodnotu(int x) {
    return x < 0
        ? -1
        : x > 0
        ? 1
        : 0;
}

int main() {
    int x =  vrat_hodnotu(-10);

    printf("x je %i\n", x);

    return 0;
}

Dostáváme

x je -1

Velmi jednoduché operátory podmínky se někdy používají pro přiřazení hodnoty, například

int y = x > 0 ? 1 : -1;

Je to přehlednější, než mít

int y = 1;

if (x < 0) {
    y = -1;
}

Ale je to subjektivní. Neexistuje případ, kdy byste operátor podmínky museli použít. Vše jde přepsat i bez použití operátoru podmínky (s použitím struktury IF).

Odkazy

Následující kapitola: Priorita operátorů

GitHub diskuze k této kapitole

Zpátky na přehled

Předchozí kapitola: Aritmetické operace (zkráceně)