TOC

This article has been localized into Czech by the community.

Operátory:

Podmíněný (ternární)operátor

V předchozím článku jsme věnovali trochu času psaní if-příkazů, velmi silné kontroly struktury, které se nacházejí v prakticky jakémkoli programovacím jazyce, umožňující vám řídit tok vašeho kódu na základě jedné nebo několika podmínek.

Také jsme psali kód s použitím konstrukce if..else, kde definujeme dvě akce, ale provedeme pouze jednu z nich na základě podmínky. Zde je jeden z příkladů, které jsme použili:

var answer = confirm("Is it true?");
if(answer == true)
	alert("I knew it was true!");
else
	alert("Oh well, guess not then...");

Je to poměrně snadné číst a rozumět, ale také trochu zdlouhavé. Naštěstí pro nás, JavaScript, stejně jako mnoho dalších programovacích jazyků, přichází s kratší notací pro if..else příkaz ve formě podmíněného operátoru, někdy označovaného jako ternární operátor. Vypadá to takto:

condition ? actionIfTrue() : actionIfFalse();

Takže stejně jako příkaz if..else, existují tři části: Podmínka, akce, která se má provést, pokud je podmínka pravdivá, a akce, která se má provést, pokud podmínka není pravdivá. To nám umožňuje vzít všech 5 řádků kódu z prvního příkladu a převést je na jediný, byť trochu dlouhý, řádek kódu:

confirm("Is it true?") ? alert("I knew it was true!") : alert("Oh well, guess not then...");

Tato krátká verze příkazu if..else se vám může líbit nebo ne. Některým lidem se může zdát těžší na čtení, zatímco jiní mají rádi, jak udržuje jejich kód krátký a stručný.

Zpracování hodnot NULL

Situace, kdy se tento operátor velmi často používá, je, když potřebujete před použitím zkontrolovat hodnotu na NULL s možností dodat záložní hodnotu. To je zvláště užitečné v JavaScriptu, kde můžete určit proměnnou jako podmínku, protože bude vyhodnocena jako false, pokud je proměnná NULL. To nám také umožňuje provést kontrolu přímo v rámci jiného příkazu, například tak, jak to děláme v tomto příkladu:

let name1 = "John Doe", name2 = null;
alert("Hello, " + (name1 ? name1 : "unknown person") + "!");
alert("Hello, " + (name2 ? name2 : "unknown person") + "!");

Všimněte si, jak používám proměnné name1 a name2 jako podmínku, tak jako "akci", pokud je podmínka vyhodnocena jako pravdivá. Jako třetí část příkazu dodávám záložní hodnotu. To funguje, protože podmíněný operátor skutečně vrátí výsledek kterékoli akce, kterou provede, takže v tomto případě bude vráceno buď jméno, nebo řetězec "neznámá osoba" a poté okamžitě bude použita funkce alert().

Abychom to ilustrovali, můžeme příklad trochu rozšířit a uložit výsledek podmíněné operace do proměnné, než ji použijeme:

let name1 = null;
let personToGreet = (name1 ? name1 : "unknown person");
alert("Hello, " + personToGreet + "!");

Řetězení podmíněných (ternárních) operátorů

Jak vidíte, podmíněný operátor je poměrně flexibilní, ale nemusí se na tom zastavit. Můžete proměnit některé z akcí v podmíněnou operaci, kolikrát chcete, v podstatě vytvářející sérii příkazů if..else v jednom řádku. V článku o příkazech if jsem demonstroval, jak řetězit více příkazů if..else dohromady, takto:

var age = prompt("What's your age?");
if(age < 1)
	alert("Infant");
else if(age < 13)
		alert("Child");
	else if(age < 18)
		alert("Teenager");
	else
		alert("Adult");

Ale můžete to skutečně přepsat do jednoho řádku, pokud opravdu chcete, pomocí podmíněného operátoru:

var age = prompt("What's your age?");
(age < 1) ? alert("Infant") : (age < 13) ? alert("Child") : (age < 18) ? alert("Teenager") : alert("Adult");

Všimněte si, že pro každý podmíněný příkaz používám druhou možnost k zavedení nové podmíněné operace, řetězící je dohromady. Opět někteří lidé budou považovat tuto strukturu za zcela nečitelnou, zatímco jiní budou milovat efektivitu převodu těchto řádků kódu do jednoho řádku. Samozřejmě můžete přidat nějaké to zalomení řádku, pokud chcete, tak, abyste si mysleli, že je to čitelnější. Například takto:

var age = prompt("What's your age?");
(age < 1) ? alert("Infant") 
		: (age < 13) ? alert("Child") 
		: (age < 18) ? alert("Teenager") 
		: alert("Adult");

Shrnutí

Podmíněný/ternární operátor umožňuje psát příkazy if..else ve zkrácené formě, někdy označované jako syntaktické sladidlo. Jsou nenáviděny některými lidmi, kteří si myslí, že dělají kód méně čitelným, a milovány ostatními za to, že jsou krátké a stručné. Použijte je, pokud chcete!


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!