TOC

This article has been localized into Czech by the community.

Funkce:

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ů.


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!