Operátor koalescence

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

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í.[1]

C#[editovat | editovat zdroj]

V jazyce C# je tento operátor binární a značí se dvěma otazníky (??). 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.[2]

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 ?? b ?? c tedy znamená a ?? (b ?? c). Druhý operátor se ani nevyhodnocuje, pokud první operand není null.

Vala[editovat | editovat zdroj]

Implementace operátoru koalescence v jazyce Vala se zcela schoduje s implementací v jazyce C#.

SQL[editovat | editovat zdroj]

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,[3] NVL pro Oracle;[4] funkce COALESCE ale patří přímo do standardního SQL.

Další jazyky[editovat | editovat zdroj]

Existují i jiné, podobné, varianty řešení téhož problému. Nejznámější je konstrukce používaná např. v jazyce JavaScript, kde stačí použít běžný operátor konjunkce (||). Ten totiž nevrací logické hodnoty, ale vždy první pravdivý (tj. ten, co po konverzi není ekvivalentní s false) operand, pokud nějaký existuje, případně poslední operand, pokud jsou všechny nepravdivé.

var value = str || "default";

Podobně k tomu, 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[editovat | editovat zdroj]

  1. NAGEL, Christian, a kol. C# 2005: Programujeme profesionálně. Brno : Computer Press, 2006. ISBN 80-251-1181-4.  
  2. ?? Operator (C# Reference) na MSDN
  3. ISNULL (Transact-SQL) na MSDN
  4. NVL = ISNULL = IFNULL