This article has been localized into Czech by the community.
Vícenásobné návratové hodnoty
Již jsme diskutovali o tom, že funkce v JavaScriptu, stejně jako v mnoha dalších programovacích jazycích, mohou vrátit hodnotu pomocí klíčového slova return. To je však volitelné - funkce může fungovat zcela v pořádku i bez toho, aby kdy vrátila cokoli.
V určitém okamžiku, když pracujete s funkcemi, pravděpodobně pocítíte potřebu definovat funkci, která může vrátit více než jednu hodnotu. Ale je to v JavaScriptu vůbec možné? Jako příklad si vezměte tuto funkci, která bere celé jméno jako "John Doe" a pak ho rozdělí na křestní jméno a příjmení - můžeme vrátit obě hodnoty?
function GetNameParts(fullname)
{
let nameParts = fullname.split(" ");
return nameParts[0];
return nameParts[1];
}
let fullName = "John Doe";
// Only returns "John"
alert(GetNameParts(fullName));
Ne, to samozřejmě nebude fungovat, protože klíčové slovo return také funguje jako příkaz pro ukončení funkce, což znamená, že jakmile je dosaženo klíčového slova return, funkce je ukončena a hodnota vrácena volajícímu. V této situaci to jen znamená, že bude vráceno pouze křestní jméno a druhé klíčové slovo return nebude nikdy dosaženo.
Existuje několik programovacích jazyků, které nativně podporují vícenásobné návratové hodnoty, ale kvůli způsobu, jakým funguje klíčové slovo return v JavaScriptu (stejně jako v jiných souvisejících programovacích jazycích), není možné přímo vrátit více hodnot. Existuje však samozřejmě obezlička!
Pole
Jedním ze způsobů, jak vrátit více hodnot, je jednoduše vrátit pole. Takto by naše funkce z výše uvedeného příkladu mohla vypadat, pokud bychom ji přepsali tak, aby vracela pole:
function GetNameParts(fullname)
{
let nameParts = fullname.split(" ");
return nameParts;
}
let fullName = "John Doe";
let firstName = GetNameParts(fullName)[0];
let lastName = GetNameParts(fullName)[1];
// Doe, John
alert(lastName + ", " + firstName);
Vzhledem k tomu, že pomocí metody Array.split() již dostáváme zpět pole, můžeme jej jednoduše vrátit. Jakmile od funkce dostaneme zpět pole, jde jen o přístup k dvěma jednotlivým hodnotám. V tomto případě to používáme k zobrazení jména ve formátu "Příjmení, Křestní jméno".
Objekty
Pole je snadné vrátit, ale elegantnější řešení může být vytvořit objekt a vrátit ho. Vzhledem k tomu, že v JavaScriptu můžeme vytvářet objekty na počkání, je to opravdu snadné a osobně si myslím, že to kód učiní snadněji čitelným a příjemnějším na pohled. Zde je přepsaná verze výše uvedeného příkladu, kde místo pole používáme objekt:
function GetNameParts(fullname)
{
let nameParts = fullname.split(" ");
let result =
{
firstName: nameParts[0],
lastName: nameParts[1]
};
return result;
}
let fullName = "John Doe";
let name = GetNameParts(fullName);
// Doe, John
alert(name.lastName + ", " + name.firstName);
Děláme zde v podstatě to samé, ale pro konzumenta funkce GetNameParts() je získání křestního jména a příjmení trochu čistší, protože to můžeme dělat s pojmenovanými vlastnostmi místo indexů v poli.
Shrnutí
JavaScript nativně nepodporuje vracení více hodnot z funkce, ale dosáhnout stejné funkcionality je poměrně jednoduché jednoduše vrácením polí nebo objektů.