Ternární operátor (programování): Porovnání verzí

Smazaný obsah Přidaný obsah
trocha preformulovani
predelani clanku
Řádek 1:
'''Ternární operátor''' (též '''operátor pro podmíněný výraz''') je [[operátor]] některých [[programovací jazyk|programovacích]] a [[skriptovací jazyk|skriptovacích jazyků]], jako například [[C (programovací jazyk)|C]], [[C++]], [[Java (programovací jazyk)|Java]], [[PHP]] a dalších. Má [[Operace (matematika)#Arita|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 nějčastěji zapisuje pomocí znaků „?:“.
 
== Operátor pro podmíněný výraz ==
== Vlastnosti ==
Operátor pro podmíněný výraz se nejčastěji používá pro zkrácení zápisu vyhodnocení podmínky.
Operátor se obvykle uvádí ve tvaru ''?:'' (některé jazyky mají [[Syntaxe|syntaxi]] jinou):
 
=== „?:“ ===
<source lang="java">
Tradiční jazykový konstruk if-else se v jazycích, které [[Syntaxe|syntaxí]] vychází z jazyka [[C (programovací jazyk)|C]] (například [[C++]], [[C Sharp|C#]], [[Vala (programovací jazyk)|Vala]], [[Objective-C]], [[Java (programovací jazyk)|Java]], [[JavaScript]] nebo [[ActionScript]]) se zapisuje následovně:
podmínka ? výraz1 : výraz2
<source lang="javac">
if (podmínka) {
výraz1;
}
else {
výraz2;
}
</source>
 
Pomocí operátoru pro podmíněný výraz je možné tento zápis zkrátit:
Postup zpracování (v jazycích C/C++):
 
<source lang="javac">
podmínka ? výraz1 : výraz2;
</source>
 
Postup zpracování (vje jazycích C/C++)takovýto:
# Vyhodnotí se podmínka.
# Je-li podmínka nenulová (true), vyhodnotí se výraz1 a ten bude výsledkem celé [[Operace (matematika)|operace]].
# Je-li podmínka [[nula|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 vstupní 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.<ref>http://latrine.dgx.cz/php-puvab-optimalizace-rychlosti</ref> Operátor ?: má [[asociativita|asociativitu]] zprava doleva.
* Vyhodnocení je ekvivalentní zápisu:
 
==== Specifika C++ ====
<source lang="java">
*V C++ vytváří [[l-hodnota|l-hodnotu]], pokud jsou výraz1 i výraz2 l-hodnoty. Operátor ?: v jazyce C++ nelze [[přetěžování|přetížit]].
if (podmínka) return(výraz1); else return(výraz2);
</source>
 
=== Další varianty ===
* Některé jazyky před zpracováním ternárního operátoru vyhodnocují oba vstupní 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.<ref>http://latrine.dgx.cz/php-puvab-optimalizace-rychlosti</ref>
V jazyce CPL, který je předchůdcem jazyka C a kde se operátor poprvé objevil se zapisoval jako <code>''e''<sub>1</sub> → ''e''<sub>2</sub>, ''e''<sub>3</sub></code>.
* Operátor ?: má [[asociativita|asociativitu]] zprava doleva. V C++ vytváří [[l-hodnota|l-hodnotu]], pokud jsou výraz1 i výraz2 l-hodnoty.
* Operátor ?: v jazyce C++ nelze [[přetěžování|přetížit]].
* Výsledný typ operátoru ?: je jednotný. Jsou-li výraz1 a výraz2 různých typů, pokusí se je [[Překladač|kompilátor]] sjednotit. Je-li výraz1 nebo výraz2 typu '''[[void]]''', výsledkem je také typ '''void'''.
 
V jazyce [[Perl 6]] se operátor zapisuje pomocí znaků „??!!“:
==Reference==
<source lang="Perl">
if (podmínka) return(?? výraz1); else return(!! výraz2);
</source>
 
== Reference ==
{{překlad | en | Ternary_operation | 7222630}}
<references />
 
== Související články ==
* [[Operátor koalescence]]
 
{{Pahýl - software}}
 
[[Kategorie:Programovací konstrukce]]