03.04 Parametry a argumenty
Výuka
Proč parametry a argumenty?
Dosud jsme viděli funkce, které buď neměly žádné vstupy, nebo měly pevně dané vstupy. Ale co když chceš stejnou funkci použít s různými hodnotami?
// ❌ Špatně - musíš vytvořit funkci pro každé číslo
const squareOf5 = () => 5 * 5;
const squareOf12 = () => 12 * 12;
// ✅ Dobře - jedna funkce pro všechna čísla
const square = x => x * x;
Parametry a argumenty umožňují funkcím být univerzální - stejný kód funguje s různými vstupy.
Představ si to jako: Recept na dort. Parametr je "množství mouky" (obecná položka), argument je "300g" (konkrétní hodnota, kterou použiješ právě teď).
Jak to funguje?
Terminologie:
- Parametr = "prázdné místo" v definici funkce (např.
function square(x)-xje parametr) - Argument = konkrétní hodnota, kterou předáš při volání (např.
square(5)-5je argument)
1. V definici funkce napíšeš parametry: function nazev(param1, param2) { }
2. Při volání předáš argumenty: nazev(hodnota1, hodnota2)
3. JavaScript "dosadí" argumenty do parametrů
4. Uvnitř funkce pracuješ s parametry jako s proměnnými
Zajímavost: JavaScript je flexibilní - můžeš předat méně nebo více argumentů, než má funkce parametrů!
Klíčové koncepty
- Parametry vs argumenty - parametr je "slot" v definici, argument je hodnota při volání
- Flexibilní počet argumentů - JavaScript ti nedá chybu, pokud předáš jiný počet
- Chybějící argumenty = undefined - pokud argument chybí, parametr má hodnotu
undefined - Přebytečné argumenty - JavaScript je tiché ignoruje (nejsou ztracené, jsou v
arguments)
JavaScript
Příklad 1: Jeden parametr
const square = function(x) {
return x * x;
};
console.log(square(4)); // → 16
console.log(square(12)); // → 144
console.log(square(0.5)); // → 0.25
Co se stalo?
- Definovali jsme funkci s jedním parametrem
x - Při volání
square(4)se doxdosadí hodnota4 - Uvnitř funkce pracujeme s
xjako s proměnnou - Můžeme stejnou funkci volat s různými hodnotami!
Příklad 2: Více parametrů
const add = function(a, b) {
return a + b;
};
console.log(add(2, 3)); // → 5
console.log(add(10, 20)); // → 30
Co se stalo?
- Funkce má dva parametry:
aab - Pořadí záleží!
add(2, 3)dosadía = 2ab = 3 - Parametry se oddělují čárkou:
function(a, b, c) { }
Příklad 3: Přebytečné argumenty (ignorují se)
const square = function(x) {
return x * x;
};
console.log(square(4, true, "hedgehog"));
// → 16
Co se stalo?
- Funkce
squaremá jen jeden parametrx - Ale zavolali jsme ji se třemi argumenty
- JavaScript použije první (
4) a ostatní (true,"hedgehog") ignoruje - Žádná chyba! JavaScript je velmi benevolentní
Příklad 4: Chybějící argumenty (= undefined)
const greet = function(name, greeting) {
console.log(greeting + ", " + name + "!");
};
greet("Alice", "Hello");
// → Hello, Alice!
greet("Bob");
// → undefined, Bob!
Co se stalo?
- Funkce má dva parametry, ale zavolali jsme ji jen s jedním argumentem
- Druhý parametr
greetingjeundefined(nebyl předán) undefinedse v textu zobrazí jako slovo "undefined"
Řešení problému:
const greet = function(name, greeting) {
if (greeting === undefined) {
greeting = "Hello"; // Výchozí hodnota
}
console.log(greeting + ", " + name + "!");
};
greet("Bob");
// → Hello, Bob!
Poznámka: V lekci 06 se naučíš lepší způsob - výchozí parametry!
Příklad 5: Funkce s různým chováním podle parametrů
const minus = function(a, b) {
if (b === undefined) {
// Pokud je jen jeden argument, vrátíme záporné číslo
return -a;
} else {
// Pokud jsou dva argumenty, odečteme je
return a - b;
}
};
console.log(minus(10)); // → -10 (negace)
console.log(minus(10, 5)); // → 5 (odečítání)
Co se stalo?
- Stejná funkce se chová různě podle počtu argumentů
- Kontrolujeme
if (b === undefined)- pokud druhý parametr chybí - To je užitečný pattern pro flexibilní funkce!
TypeScript
V TypeScriptu můžeš specifikovat typy parametrů a označit některé parametry jako volitelné pomocí ?:
// Povinné parametry s typy
const add = function(a: number, b: number): number {
return a + b;
};
add(2, 3); // ✅ OK
add(2, "3"); // ❌ Error: Argument of type 'string' is not assignable to parameter of type 'number'
add(2); // ❌ Error: Expected 2 arguments, but got 1
Volitelné parametry - použij ? za názvem parametru:
const greet = function(name: string, greeting?: string): string {
if (greeting === undefined) {
greeting = "Hello";
}
return greeting + ", " + name + "!";
};
greet("Alice", "Hi"); // ✅ OK - "Hi, Alice!"
greet("Bob"); // ✅ OK - "Hello, Bob!" (greeting je volitelný)
Volitelný parametr musí být na konci:
// ❌ Špatně - volitelný parametr uprostřed
function bad(a?: number, b: number) { }
// ✅ Dobře - volitelné parametry na konci
function good(a: number, b?: number, c?: number) { }
TypeScript přidává:
- ✅ Kontrolu počtu argumentů - musíš předat správný počet (pokud nejsou volitelné)
- ✅ Kontrolu typů - nemůžeš předat číslo, kde se očekává text
- ✅ Dokumentaci - hned vidíš, jaké parametry funkce očekává
- ✅ Volitelné parametry - pomocí
?označíš, že parametr není povinný
Rozdíl JS vs TS
JavaScript:
const add = function(a, b) {
return a + b;
};
add(2, 3); // 5 ✅
add(2); // NaN (2 + undefined) ✅ (žádná chyba)
add(2, "3"); // "23" (string concat) ✅ (žádná chyba)
add(2, 3, 4); // 5 (ignoruje 4) ✅ (žádná chyba)
TypeScript:
const add = function(a: number, b: number): number {
return a + b;
};
add(2, 3); // 5 ✅
add(2); // ❌ Error: Expected 2 arguments, but got 1
add(2, "3"); // ❌ Error: Argument of type 'string' is not assignable to parameter of type 'number'
add(2, 3, 4); // ❌ Error: Expected 2 arguments, but got 3
Tip
💡 Dávej parametrům popisné názvy:
// ❌ Špatně - co znamenají a, b, c?
const calc = (a, b, c) => (a + b) * c;
// ✅ Dobře - hned vidíš, co funkce dělá
const calculateTotal = (price, quantity, taxRate) => (price * quantity) * taxRate;
💡 Pořadí parametrů záleží:
const divide = (a, b) => a / b;
divide(10, 2); // 5 (10 / 2)
divide(2, 10); // 0.2 (2 / 10) - úplně jiný výsledek!
💡 Kontroluj undefined před použitím:
const safeGreet = function(name, greeting) {
// ✅ Dobře - kontrola před použitím
if (greeting === undefined) {
greeting = "Hello";
}
return greeting + ", " + name + "!";
};
Kvíz
Co se stane, když zavoláš funkci s méně argumenty, než má parametrů?
❌ - V JavaScriptu to není chyba (v TypeScriptu ano, pokud parametr není ?)
✅ - Pokud argument chybí, parametr má hodnotu undefined
❌ - Funkce se normálně spustí
❌ - Parametry nemají náhodné hodnoty, mají undefined
🎯 Závěrečný projekt
Po dokončení všech 8 dílů vytvoříte jednoduchou Todо aplikaci v čistém JavaScriptu. Naučíte se, jak aplikovat vše, co jste se naučili, na reálný projekt.
Zobrazit podrobnosti projektu →Informace o seriálu
Obtížnost
Délka
Cca 480 minut
Počet videí
8 videí + projekty
Certifikát
Po dokončení obdržíte certifikát
Lekce v této sekci
- 03.01 Deklarace funkce
- 03.02 Function Expression
- 03.03 Arrow Functions
- 03.04 Parametry a argumenty
- 03.05 Return hodnoty
- 03.06 Výchozí parametry
- 03.07 Rest parametry
- 03.08 Co je Scope
- 03.09 Lexikální Scope
- 03.10 Řetězec Scope
- 03.11 Globální Scope
- 03.12 Životní Cyklus Proměnných
- 03.13 Omezení Scope
- 03.14 Použití Closures
- 03.15 Callback funkce
- 03.16 Higher-order Functions
- 03.17 IIFE
- 03.18 Void funkce
- 03.19 Rekurze
Struktura lekcí (souborový strom)
- 1.1 Úvod do JavaScriptu a TypeScriptu
- 1.2 Nastavení prostředí
- 1.3 První program
- 1.4 Proměnné: var, let, const
- 1.5 Datové typy - přehled
- 1.6 String (řetězce)
- 1.7 Number (čísla)
- 1.8 Boolean (pravda/nepravda)
- 1.9 Null a Undefined
- 1.10 Type Inference vs Annotations
- 1.11 Aritmetické operátory
- 1.12 Porovnávací operátory
- 1.13 Logické operátory
- 1.14 Komentáře
- 1.15 Console metody
- 03.01 Deklarace funkce
- 03.02 Function Expression
- 03.03 Arrow Functions
- 03.04 Parametry a argumenty
- 03.05 Return hodnoty
- 03.06 Výchozí parametry
- 03.07 Rest parametry
- 03.08 Co je Scope
- 03.09 Lexikální Scope
- 03.10 Řetězec Scope
- 03.11 Globální Scope
- 03.12 Životní Cyklus Proměnných
- 03.13 Omezení Scope
- 03.14 Použití Closures
- 03.15 Callback funkce
- 03.16 Higher-order Functions
- 03.17 IIFE
- 03.18 Void funkce
- 03.19 Rekurze
- v přípravě
- v přípravě
- v přípravě
- v přípravě
- 01 — Co je Next.js
- 02 — Vytvoření projektu
- 03 — Struktura projektu (app/)
- 04 — Page komponenty (page.js / page.tsx)
- 05 — Layout komponenty (layout.js / layout.tsx)
- 06 — File-based routing
- 07 — Dynamické routy ([id]/page.js)
- 08 — Link komponenta (navigace)
- 09 — Image komponenta (next/image)
- 10 — Metadata (title, description, Open Graph)
- 11 — Loading UI (loading.js / loading.tsx)
- 12 — Error handling (error.js / error.tsx)
- 13 — Not Found (not-found.js / not-found.tsx)
- v přípravě
- v přípravě
- v přípravě