Přeskočit na obsah
Kurz Reactu1.0.0 beta
CSEN
Kurz Reactu1.0.0 beta
CSEN
🏠 Úvod🧭 Kde začít?🔁 Opakování📄 Taháky📰 Co je novéhoℹ️ O kurzu
JavaScript0/22

JavaScript obecně

  • 01 Proměnné, typy a operátory0/2
  • 02 Funkce a closures0/2
  • 03 Objekty0/2
  • 04 Pole I: map, filter a spol.0/2
  • 05 Pole II: reduce, řazení a seskupování0/3
  • 06 Podmínky a logické operátory0/2
  • 07 Asynchronní JavaScript0/2
  • 08 Moduly a vestavěné nástroje0/2

JavaScript pro React

  • 09 Reference a immutabilita0/3
  • 10 JS vzory, které v Reactu potkáš všude0/2
TypeScript0/6

Základy

  • 01 Rychlé opakování základů0/3
  • 02 Stav a události (useState)0/3

Hooky do hloubky

  • 03 Efekty (useEffect)0/3
  • 04 Refy (useRef)0/3
  • 05 Složitější stav (useReducer)0/3
  • 06 Context0/3
  • 07 Vlastní hooky0/3

Formuláře

  • 08 Formuláře a React 19 Actions0/3

Výkon

  • 09 Výkon a renderování0/3

Vzory

  • 10 Návrhové vzory komponent0/3

Ekosystém

  • 11 TypeScript s Reactem0/3
  • 12 Routování (React Router)0/3
  • 13 Načítání dat0/3
  • 14 Správa stavu aplikace0/3

Projekt

  • 15 Závěrečný projekt: Kanban0/2

Shrnutí

  • 16 Shrnutí: principy Reactu

Tvůj účet

Ochrana osobních údajů

JavaScript 06 · JavaScript obecně

Podmínky a logické operátory

Truthy a falsy, ternár, &&, ||, ??, ?., switch a early return.

Načítám lekci…

💬 Našel jsi chybu, něco ti není jasné, nebo máš nápad? Napiš mi.
← Pole II: reduce, řazení a seskupováníAsynchronní JavaScript →

Než začneme: výhybky na trati

Program běží jako vlak po kolejích – řádek za řádkem. Podmínky jsou výhybky: podle nějaké otázky pošlou vlak jednou, nebo druhou cestou. „Je uživatel přihlášený?“ „Je košík prázdný?“ „Došla data ze serveru?“

JavaScript má na výhybky dvě skupiny nástrojů. Příkazy (if, switch) řídí, které řádky se provedou. Operátory (? :, &&, ||, ??, ?.) vybírají hodnotu přímo uvnitř výrazu – a právě ty v Reactu potkáš nejčastěji, protože v JSX se if napsat nedá.

ℹ️ Co tě v lekci čeká
  1. if, else a early return.
  2. Truthy a falsy: co se bere jako „ano“.
  3. Logické operátory a, nebo, ne.
  4. Ternární operátor.
  5. && a || jako výběr hodnoty.
  6. ?? a ?.: bezpečné výchozí hodnoty a čtení.
  7. switch a slovník místo dlouhých podmínek.

1. if, else a early return

const age = 17
if (age >= 18) {
console.log('Dospělý')
} else if (age >= 15) {
console.log('Teenager')
} else {
console.log('Dítě')
}
// Jednořádková podoba – bez závorek jen pro jeden příkaz
if (age < 0) return

Early return místo pyramidy

Když funkce musí ověřit několik věcí, nevnořuj podmínky do sebe. Nejdřív vyřiď výjimky a skonči, hlavní případ nech na konec:

// ❌ Pyramida
function checkout(cart, user) {
if (user) {
if (cart.length > 0) {
if (user.address) {
return sendOrder(cart, user)
} else {
return 'Chybí adresa'
}
} else {
return 'Košík je prázdný'
}
} else {
return 'Přihlas se'
}
}
// ✅ Early return – čte se shora dolů jako kontrolní seznam
function checkout(cart, user) {
if (!user) return 'Přihlas se'
if (cart.length === 0) return 'Košík je prázdný'
if (!user.address) return 'Chybí adresa'
return sendOrder(cart, user)
}

2. Truthy a falsy

Když JavaScript potřebuje ano/ne (v if, v ternáru, u &&) a dostane něco jiného než boolean, převede si to. Nepravdivých (falsy) hodnot je jen šest, všechno ostatní je pravdivé (truthy):

Falsy – bere se jako NETruthy – bere se jako ANO (i když to tak nevypadá)
falsetrue
042, -1, 0.5
'' (prázdný text)'0', 'false', ' ' (mezera)
null[] (prázdné pole)
undefined{} (prázdný objekt)
NaNkaždá funkce, každé datum…
if ('ahoj') { … } // provede se
if ('') { … } // neprovede se
if (0) { … } // neprovede se
if ([]) { … } // ⚠️ provede se – prázdné pole je truthy!
if (items.length > 0) // ✅ správný dotaz „obsahuje pole něco?“
if (items.length) // funguje taky (0 je falsy), ale je méně jasné, na co se ptáš
if (Object.keys(obj).length > 0) // „má objekt nějaké vlastnosti?“
Boolean('ahoj') // true – převod na boolean
!!'ahoj' // true – totéž zkratkou (dvojí negace)

3. Logické operátory: a, nebo, ne

const age = 25
const hasTicket = true
age >= 18 && hasTicket // true – A ZÁROVEŇ: musí platit obojí
age < 18 || hasTicket // true – NEBO: stačí jedno
!hasTicket // false – NE: obrátí hodnotu
// Kombinace – závorky pro jistotu a čitelnost
const canEnter = (age >= 18 && hasTicket) || isVip
const isWorkday = day !== 'sobota' && day !== 'neděle'
const isWeekend = ['sobota', 'neděle'].includes(day) // často čitelnější
✨ Pojmenuj složité podmínky
// ❌ Co to znamená?
if (user && (user.role === 'admin' || post.authorId === user.id) && !post.locked) { … }
// ✅ Mezivýsledky s názvem
const isAuthor = user?.id === post.authorId
const isAdmin = user?.role === 'admin'
const canEdit = (isAuthor || isAdmin) && !post.locked
if (canEdit) { … }

4. Ternární operátor

Ternár je if/else zmáčknutý do výrazu: podmínka ? hodnotaKdyžAno : hodnotaKdyžNe. Na rozdíl od if má hodnotu, takže ho můžeš uložit do proměnné nebo vložit kamkoli do výrazu.

const label = isDone ? 'Hotovo' : 'Zbývá'
const price = isMember ? basePrice * 0.9 : basePrice
const greeting = `Dobr${hour < 12 ? 'é ráno' : 'ý den'}`
const className = `btn ${isActive ? 'btn-active' : ''}`
// Totéž s if – delší a potřebuje let
let label
if (isDone) {
label = 'Hotovo'
} else {
label = 'Zbývá'
}
⚠️ Vnořené ternáry
// ❌ Hádanka
const size = n > 100 ? 'velké' : n > 10 ? 'střední' : n > 0 ? 'malé' : 'žádné'
// ✅ Funkce s early return
function sizeOf(n) {
if (n > 100) return 'velké'
if (n > 10) return 'střední'
if (n > 0) return 'malé'
return 'žádné'
}
Jeden ternár je čitelný, dva vnořené se dají přežít s dobrým formátováním, tři už ne.

5. && a || jako výběr hodnoty

Tady je zrada: && a || v JavaScriptu nevracejí true/false. Vracejí jednu ze svých stran:

VýrazKdyž je a truthyKdyž je a falsy
a && bvrátí bvrátí a
a || bvrátí avrátí b
'ahoj' && 'svět' // 'svět'
'' && 'svět' // ''
0 && 'svět' // 0 ← pozor, číslo 0!
null && 'svět' // null
'ahoj' || 'výchozí' // 'ahoj'
'' || 'výchozí' // 'výchozí'
0 || 'výchozí' // 'výchozí' ← nula se „ztratila“
// Typické použití
user && user.name // přečti name, jen když user existuje (dnes spíš user?.name)
const name = input || 'Anonym' // výchozí hodnota pro prázdný vstup
isLoggedIn && showWelcome() // zavolej, jen když platí podmínka
⚠️ Past s nulou
V Reactu se && používá k podmíněnému vykreslení. Když je levá strana 0, výsledek je 0 – a React nulu vykreslí na stránku. Proto do && patří vždy skutečný boolean: count > 0 && …, ne count && ….

6. ?? a ?.: chybějící hodnoty

?? – výchozí hodnota jen pro „nic“

a ?? b vrátí b, jen když je a null nebo undefined. Nula, prázdný text a false jsou pro něj platné hodnoty.

const settings = { volume: 0, nickname: '', notifications: false }
settings.volume || 50 // 50 ❌ uživatel ztlumil na 0 a my mu pustili 50
settings.volume ?? 50 // 0 ✅
settings.notifications || true // true ❌ uživatel je vypnul
settings.notifications ?? true // false ✅
settings.theme ?? 'light' // 'light' – vlastnost chybí → výchozí hodnota
// Přiřazení s výchozí hodnotou
options.retries ??= 3 // nastav na 3, jen když tam nic není
Hodnota aa || "x"a ?? "x"
0"x"0
''"x"''
false"x"false
null"x""x"
undefined"x""x"
'ahoj''ahoj''ahoj'
❓ Kdy tedy || a kdy ??

Skoro vždy ?? – nahrazuje jen to, co opravdu chybí. || použij, když chceš přeskočit i prázdný text nebo nulu: třeba „přezdívka, a když je prázdná, celé jméno“ (nickname || name).

?. – čti, jen když je z čeho

const user = { name: 'Jana', address: null }
user.address.city // 💥 TypeError: Cannot read properties of null
user.address?.city // undefined – ?. se zastaví a vrátí undefined
user.contacts?.[0] // undefined – funguje i s hranatými závorkami
user.getAge?.() // undefined – a s voláním funkce, která nemusí existovat
// Typická dvojice: bezpečně přečíst + výchozí hodnota
const city = user.address?.city ?? 'neznámé'
// Data ze serveru, která ještě nedorazila
const firstTitle = response?.data?.items?.[0]?.title ?? 'Žádné položky'
⚠️ Nepiš ?. všude „pro jistotu“
?. patří tam, kde hodnota opravdu může chybět (nepřihlášený uživatel, nenačtená data, volitelné pole). Kde chybět nemá, je lepší, když kód spadne – chybu hned uvidíš, místo aby se tiše šířilo undefined.
Ukázka

Laboratoř operátorů

Co vidíš: Řada hodnot pro x a pod ní, co s každou udělá převod na boolean, ternár, &&, || a ??.

Vyzkoušej:

  1. Vyber 0. x && 'pravá' vrátí 0 (ne false!), || nulu nahradí, ?? ji nechá.
  2. Vyber '' a pak null. U prázdného textu se || a ?? liší, u null ne.
  3. Vyber [] a {}. Obojí je truthy, přestože je „prázdné“.

Co z toho plyne: Falsy je jen šest hodnot. && a || vracejí jednu ze stran, ne boolean. ?? reaguje jen na null a undefined.

Načítám interaktivní část…

7. switch a slovník

Když porovnáváš jednu hodnotu s mnoha možnostmi, je switch přehlednější než řada if:

function statusLabel(status) {
switch (status) {
case 'new':
return 'Nová'
case 'paid':
return 'Zaplacená'
case 'shipped':
case 'delivered': // víc případů se stejným výsledkem
return 'Na cestě'
default:
return 'Neznámý stav'
}
}
⚠️ Bez return nebo break propadne do dalšího case
switch (level) {
case 'warn':
console.log('Pozor') // ❌ chybí break → vypíše se i 'Chyba'
case 'error':
console.log('Chyba')
break
}

Ve funkcích, které jen převádějí hodnotu na jinou, je často ještě kratší slovník (objekt):

const STATUS_LABELS = { new: 'Nová', paid: 'Zaplacená', shipped: 'Na cestě' }
const statusLabel = (status) => STATUS_LABELS[status] ?? 'Neznámý stav'
const ICONS = { success: '✅', error: '❌', warning: '⚠️' }
const icon = ICONS[type] ?? 'ℹ️'

switch naopak uvidíš u reducerů v Reactu (lekce React 05), kde každá akce dělá něco jiného, ne jen vrací hodnotu.

Ověř si to

Kvíz Co vrátí 0 && 'ahoj'?
Kvíz settings.volume je 0. Co bude v settings.volume || 50?
Kvíz Která hodnota je truthy?
Kvíz user je null. Co vrátí user?.name ?? 'Host'?

Rozcvička

Výzva

Kdo je kdo

Rozcvička

Dvě krátké funkce, které se rozhodují: podle věku a podle toho, jestli jméno vůbec máme.

Zadání najdeš v komentářích v kódu níže – na začátku souboru a u míst označených TODO.

Načítám interaktivní část…

Výzva

Výzva

Bezpečné čtení a rozhodování

StředníBonus · zdarma po přihlášení

Šest funkcí, které rozhodují a bezpečně čtou data, která můžou chybět. Pozor na rozdíl mezi || a ?? – u hlasitosti 0 a u prázdné přezdívky na něm záleží. Co přesně má která funkce vracet, je v komentářích v kódu.

🔓 Bonusová výzva – zdarma po přihlášení

Střední a těžké výzvy se odemknou, jakmile se přihlásíš. Stejně jako celý kurz jsou zdarma – stačí e-mail, žádné heslo ani platba.

Jak nakládáme s tvými údaji

Shrnutí

  • Early return vyřídí výjimky na začátku funkce a zbaví tě pyramid z if/else.
  • Falsy je jen false, 0, '', null, undefined a NaN. Prázdné pole i objekt jsou truthy.
  • Ternár a ? b : c je if/else, který vrací hodnotu. Nevnořuj víc než jeden.
  • && a || vracejí jednu ze stran, ne boolean – 0 && x je 0.
  • ?? dosadí výchozí hodnotu jen za null/undefined, || i za 0 a ''. Skoro vždy chceš ??.
  • ?. bezpečně čte z hodnoty, která může chybět. Typicky a?.b ?? výchozí.
  • switch pro mnoho případů s různou logikou, slovník pro převod hodnoty na jinou.