Podmíněný operátor - Conditional operator
The Podmíněný operátor je podporován v mnoha programovací jazyky. Tento termín obvykle označuje ?:
jako v C, C ++, C #, Pythonu a JavaScriptu. V Javě však tento termín může také odkazovat na &&
a ||
.
&& a ||
V některých programovacích jazycích, např. Java, termín podmíněný operátor odkazuje na zkratoví booleovští operátoři &&
a ||
. Druhý výraz se vyhodnotí, pouze když první výraz není dostatečný k určení hodnoty celého výrazu.[1]
Rozdíl od bitového operátoru
&
a |
jsou bitové operátory který se vyskytuje v mnoha programovacích jazycích. Hlavní rozdíl spočívá v tom, že bitové operace fungují na jednotlivých bitech binární číslice, zatímco podmíněné operátory pracují na logických operacích. Navíc budou vždy vyhodnoceny výrazy před a po bitovém operátoru.
-li (výraz1 || výraz2 || výraz3)
Pokud je výraz 1 pravdivý, výrazy 2 a 3 NEBUDOU kontrolovány.
-li (výraz1 | výraz2 | výraz3)
Tím se zkontrolují výrazy 2 a 3, i když 1 již platí.
Operátoři zkratu mohou zkrátit dobu provozu tím, že nebudou volat pozdější funkce. Mohou se také vyhnout Null výjimce, pokud výraz 1 zkontroluje, zda je objekt platný.
Použití v Javě
třída Podmíněné Demo { veřejnost statický prázdnota hlavní(Tětiva[] args) { int hodnota1 = 1; int hodnota2 = 2; -li ((hodnota1 == 1) && (hodnota2 == 2)) Systém.ven.tisk(„hodnota1 je 1 A hodnota2 je 2“); -li ((hodnota1 == 1) || (hodnota2 == 1)) Systém.ven.tisk(„hodnota1 je 1 NEBO hodnota2 je 1“); }}
?
Ve většině programovacích jazyků ?: se nazývá podmíněný operátor. Je to typ ternární operátor, zatímco ternární operátor ve většině situací konkrétně znamená ?: , protože je to jediný operátor, který bere tři operandy.[2]
Pravidelné používání „?:“
?:
se používá v podmíněných výrazech. Programátoři mohou přepsat výraz if-then-else stručnějším způsobem pomocí podmíněného operátoru.[3]
Syntax
stav ? výraz 1 : výraz 2
podmínka: Výraz, který je vyhodnocen jako a booleovský hodnota.
výraz 1, výraz 2: Výrazy s hodnotami jakéhokoli typu.
Pokud je podmínka vyhodnocena jako true, bude vyhodnocen výraz 1. Pokud je podmínka vyhodnocena jako nepravdivá, bude vyhodnocen výraz 2.
Mělo by se číst jako: "Pokud je podmínka pravdivá, přiřaďte hodnotu výrazu 1 k výsledku. Jinak přiřaďte hodnotu výrazu 2 k výsledku."
Majetek sdružení
Podmíněný operátor je asociativní vpravo, což znamená, že operace jsou seskupeny zprava doleva. Například výraz tvaru a? před naším letopočtem ? d: e je vyhodnocen jako? b: (c? d: e).[2]
Příklady podle jazyků
Jáva
třída PodmíněnéDemo2 { veřejnost statický prázdnota hlavní(Tětiva[] args) { int hodnota1 = 1; int hodnota2 = 2; int výsledek; booleovský someCondition = skutečný; výsledek = someCondition ? hodnota1 : hodnota2; Systém.ven.tisk(výsledek); }}
V tomto příkladu proto, že someCondition je pravda, tento program vytiskne na obrazovku „1“. Použijte operátor?: Místo příkazu if-then-else, pokud je váš kód čitelnější; například když jsou výrazy kompaktní a bez vedlejších efektů (například přiřazení).
C ++
#zahrnout <iostream>int hlavní() { int X = 1; int y = 2; std::cout << ( X > y ? X : y ) << „je větší ze dvou.“ << std::konec;}
Na druhý a třetí operand v C ++ platí několik pravidel:
- Pokud jsou oba operandy stejného typu, výsledkem je tento typ
- Pokud jsou oba operandy aritmetické nebo výčtové typy, provedou se obvyklé aritmetické převody (zahrnuté ve standardních převody), které je převedou na běžný typ
- Pokud jsou oba operandy typů ukazatelů nebo pokud je jeden typ ukazatele a druhý je konstantní výraz, který je vyhodnocen jako 0, jsou prováděny převody ukazatelů k jejich převodu na běžný typ
- Pokud jsou oba operandy referenčních typů, jsou prováděny referenční převody k jejich převodu na běžný typ
- Pokud jsou oba operandy typu void, je běžným typem typ void
- Pokud jsou oba operandy stejného typu definovaného uživatelem, je běžným typem tento typ.[4]
C#
// podmínka? first_expression: second_expression;statický dvojnásobek upřímně(dvojnásobek X) { vrátit se X != 0.0 ? Matematika.Hřích(X)/X : 1.0;}
Na druhý a třetí operand v C # platí několik pravidel:
- Pokud x má typ X a y má typ Y pak
- Pokud implicitní převod (implicitní převody) existuje z X na Y, ale ne z Y na X, pak Y je typ podmíněného výrazu.
- Pokud implicitní převod (implicitní převody) existuje z Y na X, ale ne z X na Y, pak X je typ podmíněného výrazu.
- Jinak nelze určit žádný typ výrazu a dojde k chybě při kompilaci.
- Pokud má pouze jeden z xay typ a oba xay jsou implicitně převoditelné na tento typ, pak je to typ podmíněného výrazu.
- Jinak nelze určit žádný typ výrazu a dojde k chybě při kompilaci.[2]
JavaScript
var stáří = 26;var nápoj = (stáří >= 21) ? "Pivo" : "Džus";řídicí panel.log(nápoj); // „Pivo“
Podmíněný operátor JavaScriptu je kompatibilní s následujícími prohlížeči:
Chrome, Okraj, Firefox (1), internet Explorer, Opera, Safari, Android webview, Chrome pro Android, Edge Mobile, Firefox pro Android (4), Opera pro Android, Safari pro IOS, Samsung Internet, Node.js.[5]
Speciální použití v podmíněném řetězci
Ternární operátor je asociativní doprava, což znamená, že jej lze „zřetězit“ následujícím způsobem, podobně jako řetězec if ... else if ... else if ... else.[4]
Příklady podle jazyků
JavaScript
funkce příklad(…) { vrátit se podmínka1 ? hodnota1 : podmínka2 ? hodnota2 : podmínka3 ? hodnota3 : hodnota4;}// Ekvivalentní:funkce příklad(…) { -li (podmínka1) { vrátit se hodnota1; } jiný -li (podmínka2) { vrátit se hodnota2; } jiný -li (podmínka3) { vrátit se hodnota3; } jiný { vrátit se hodnota4; }}
C / C ++
konst dvojnásobek A = výraz1 ? a1 : výraz2 ? a2 : výraz3 ? a3 : /*v opačném případě*/ a4;// Ekvivalentní:dvojnásobek A; -li (výraz1) A = a1; jiný -li (výraz2) A = a2; jiný -li (výraz3) A = a3; jiný /*v opačném případě*/ A = a4;
Speciální použití ve výrazu přiřazení
podmíněný operátor může přinést a Hodnota L. v C / C ++, kterému lze přiřadit jinou hodnotu, ale drtivá většina programátorů považuje tento extrémně špatný styl, i když jen proto, že technika je neznámá.[6]
C / C ++
((foo) ? bar : baz) = frink;//ekvivalentní: -li (foo) bar = frink; jiný baz = frink;
Viz také
- ?:, podmíněný operátor v počítačovém programování
- Ternární provoz
- Bitové operátory
- zkratové booleovské operátory
- Operátor (programování)
Reference
- ^ „Rovnost, relační a podmíněné operátory (Návody Java ™> Výuka jazyka Java> Základy jazyka)“. docs.oracle.com. Citováno 2019-04-29.
- ^ A b C BillWagner. "?: Operátor - C # reference". docs.microsoft.com. Citováno 2019-04-29.
- ^ „The?: Operator in Java“. www.cafeaulait.org. Citováno 2019-04-29.
- ^ A b MikeBlome. "Podmíněný operátor:?:". docs.microsoft.com. Citováno 2019-04-29.
- ^ „DevDocs“. devdocs.io. Citováno 2019-04-29.
- ^ „Podmíněný operátor“. wiki.c2.com. Citováno 2019-04-29.