Ternární operátor (programování)
Ternární operátor je operátor některých programovacích a skriptovacích jazyků, jako například C, C++, Java, PHP a dalších. Má aritu operace rovnou třem. Nejpoužívanější ternární operátor při programování je operátor pro podmíněný výraz, který se nejčastěji zapisuje pomocí znaků „?:“.
Operátor pro podmíněný výraz
Operátor pro podmíněný výraz se nejčastěji používá pro zkrácení zápisu vyhodnocení podmínky.
„?:“
Tradiční jazyková konstrukce if-else se v jazycích, které syntaxí vychází z jazyka C (například C++, C#, Vala, Objective-C, Java, JavaScript nebo ActionScript) se zapisuje následovně:
if (podmínka) {
výraz1;
} else {
výraz2;
}
Pomocí operátoru pro podmíněný výraz je možné tento zápis zkrátit:
podmínka ? výraz1 : výraz2;
Postup zpracování je takovýto:
- Vyhodnotí se podmínka.
- Je-li podmínka nenulová (true), vyhodnotí se výraz1 a ten bude výsledkem celé operace.
- Je-li podmínka nulová (false), vyhodnotí se výraz2 a ten bude výsledkem celé operace.
Některé jazyky před zpracováním ternárního operátoru vyhodnocují oba výrazy, takže, pokud jsou tyto výrazy náročné na výpočetní čas nebo prostředky, je lepší provést samotné vyhodnocení opisně, pomocí podmíněného vykonání kódu.[1] Operátor ?: má asociativitu zprava doleva.
Specifika C++
V C++ vytváří l-hodnotu, pokud jsou výraz1 i výraz2 l-hodnoty. Operátor ?: v jazyce C++ nelze přetížit.
Další varianty
V jazyce CPL, který je předchůdcem jazyka C a kde se operátor poprvé objevil, se zapisoval jako e1 → e2, e3
.
V jazyce Perl 6 se operátor zapisuje pomocí znaků „??!!“:
podmínka ?? výraz1 !! výraz2;
Elvis operátor
Jako "Elvis operátor" je označována dvou-argumentová forma operátoru ?:
, pro ověřování hodnot null
: Vrátí první operand (dokonce i bez vyhodnocování druhého), leda by první byl null, to pak tedy vrátí druhý operand.
Oproti ternárnímu operátoru v Elvis-operátoru není druhý operand, jen první a třetí: První dva splývají do jednoho.
Reference
V tomto článku byl použit překlad textu z článku Ternary_operation na anglické Wikipedii.