nil: žádná hodnota

Někdy proměnná žádnou hodnotu nemá. Lua na to má zvláštní hodnotu nil, která znamená „nic“. Proměnná, kterou vytvoříte bez = a hodnoty, obsahuje nil:

local jahody
print(jahody)
print("Jahody:", jahody)

Vypíše:

nil
Jahody:	nil

nil se hodí pro věci, které ještě nejsou známé nebo které chybí. Můžete ho do proměnné uložit i sami, jahody = nil, když už v ní nemá nic být. Počítat s nil ale nejde a nejde ho ani připojit k textu:

local mince
print("Mince: " .. mince)

Lua ohlásí:

main.lua:2: attempt to concatenate a nil value (local 'mince')

Hlášku čtěte od konce. (local 'mince') je proměnná: lokální, jménem mince. a nil value je hodnota, kterou obsahovala, tedy nil. A attempt to concatenate je to, o co se Lua pokusila: připojit ji k textu (concatenate znamená spojit). U +, - a dalších operátorů hláška zní attempt to perform arithmetic on a nil value (local 'mince'), tedy pokus o výpočet.

Nejčastějším zdrojem nil je překlep v názvu:

local mince = 120
print(mnice)

Vypíše:

nil

Žádná chyba! Lua nenašla lokální proměnnou mnice, a tak hledala globální. Ani ta neexistuje a proměnná, která neexistuje, má hodnotu nil. print ji bez reptání vypíše. Chyba přijde, až když program s hodnotou něco dělá:

local mince = 120
print("Mince: " .. mnice)

Lua ohlásí:

main.lua:2: attempt to concatenate a nil value (global 'mnice')

Slovo v závorce vám napoví:

  • local: název je správně, ale proměnná ještě nemá hodnotu. Hledejte řádek, kde ji měla dostat.
  • global: všechny své proměnné máte lokální, takže tahle nejspíš neexistuje. Hledejte překlep nebo špatné velké písmeno: Mince je jiný název než mince.

Pokyny

Spusťte program a přečtěte si chybovou hlášku. Slepice dnes snesly 12 vajec: opravte řádek, který vytváří proměnnou vejce, aby program vypsal:

Slepice: 4
Vejce: 12

Přidejte na konec programu tento řádek i s překlepem a program spusťte:

print("Mléko: " .. mlkeo .. " litrů")

Přečtěte si hlášku. Pak název opravte, aby program vypsal i mléko, které dala kráva Bella:

Slepice: 4
Vejce: 12
Mléko: 6 litrů

Ema ještě neví, kolik natrhá jahod. Pod to vytvořte proměnnou jahody bez hodnoty a vypište ji za text "Jahody:", oddělenou čárkou. Na rozdíl od .. si čárka s nil poradí:

Slepice: 4
Vejce: 12
Mléko: 6 litrů
Jahody:	nil

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

6/10