Operátor koalescence

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Operátor koalescence je v mnoha programovacích jazycích operátor, který vrací první z dodaných odkazů, který označuje platný objekt. Někdy bývá označován také jako operátor nulového sjednocení.

C#

V jazyce C# je tento operátor binární a značí se dvěma otazníky (. ). +more Byl zaveden ve verzi C# 2. 0 z roku 2005. Oba operandy musí být typově kompatibilní a být referenčního nebo nullable typu. Pokud není levý operand null, vrací levý operand, jinak vrací pravý operand.

Tedy zápis

return objekt1 ?? objekt2;

znamená zhruba totéž jako podmíněný výraz

return objekt1 != null ? objekt1 : objekt2;

nebo jako podmínka

if (objekt1 != null) return objekt1; else return objekt2;

Na rozdíl od těchto složitějších zápisů se při použití operátoru koalescence levý operand vyhodnocuje pouze jednou.

Operátor má poměrně nízkou prioritu, nižší prioritu mají pouze podmíněný výraz a přiřazení. Je asociativní zprava, zápis a . +more b . c tedy znamená a . (b . c). Druhý operátor se ani nevyhodnocuje, pokud první operand není null.

Stejný operátor je v jazyce Vala, který je od C# odvozen.

JavaScript

V jazyce JavaScript se pro podobné účely dá použít běžný operátor logické disjunkce (||). Ten totiž nevrací nutně logické hodnoty, ale vždy první operand, který je pravdivý (který po vyhodnocení není ekvivalentní s false), pokud nějaký takový existuje, případně poslední operand, jsou-li všechny nepravdivé.

var value = str || "default";

Toto použití má však tu nevýhodu, že nahrazuje i jiné hodnoty než null (a undefined), protože jako nepravdivé se vyhodnocují i hodnoty 0, "", false či NaN. Takže např. +more ve výše uvedeném příkladu se do proměnné value nikdy nedostane prázdný řetězec.

Proto byl ve standardu ES2020 přidán specializovaný ??, který vrací hodnotu vpravo jen v případě, že je hodnota výrazu vlevo undefined či null, nikoliv ostatní falsy hodnoty.

a ?? b

je ekvivalentní s

(a !== null && a !== undefined) ? a : b

s tím, že se levý výraz vyhodnocuje jen jednou.

SQL

V SQL existuje funkce COALESCE, která přijímá libovolný počet parametrů a vrací první z nich (zleva), který není NULL, případně poslední hodnotu, pokud jsou všechny parametry NULL.

Zápis

COALESCE(hodnota1, hodnota2, hodnota3, hodnota4)

je definován jako zkratka pro

CASE WHEN hodnota1 IS NOT NULL THEN hodnota1 WHEN hodnota2 IS NOT NULL THEN hodnota2 WHEN hodnota3 IS NOT NULL THEN hodnota3 ELSE hodnota4 END

Některé dialekty SQL definují jiné funkce s podobným významem, např. IFNULL pro MySQL, ISNULL pro MSSQL, NVL pro Oracle; funkce COALESCE ale patří přímo do standardního SQL.

Další jazyky

Existují i jiné, podobné, varianty řešení téhož problému.

Skriptovací jazyky Perl a PHP mají kromě standardních logických operátorů &&, || a ^ odpovídající operátory and, or a xor s velmi nízkou prioritou, vhodné pro výše uvedené konstrukce.

Reference

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top