Klíče v proměnných

Klíč v hranatých závorkách nemusíte psát přímo. Může být uložený v proměnné, nebo přijít jako parametr či z cyklu:

local ceny = {mrkev = 5, brambory = 8, jahody = 12}

local plodina = "brambory"
print(ceny[plodina])

Vypíše:

8

Lua se nejdřív podívá do proměnné plodina, najde v ní text "brambory" a pak přečte hodnotu s tímto klíčem. Tak napíšete kód pro klíč, který při psaní programu ještě neznáte: pro plodinu, na kterou se ptá zákazník, nebo pro každou plodinu ze seznamu.

A teď klasická chyba. Za tečkou je vždycky přímo název klíče, nikdy proměnná. ceny.plodina znamená ceny["plodina"]: klíčem je text "plodina" a takový klíč v tabulce není:

local ceny = {mrkev = 5, brambory = 8, jahody = 12}

local plodina = "brambory"
print(ceny.plodina)
print(ceny["plodina"])
print(ceny[plodina])

Vypíše:

nil
nil
8

Takže: když klíč znáte už při psaní kódu, použijte tečku (ceny.brambory). Když je klíč v proměnné, použijte hranaté závorky bez uvozovek (ceny[plodina]). S uvozovkami je to zase jen text: ceny["plodina"] je totéž co ceny.plodina.

Klíč v proměnné může být jakýkoli text, i s diakritikou. Nejvíc se hodí ve funkcích a cyklech. Tahle funkce funguje pro každou plodinu, i pro takovou, kterou do tabulky přidáte později:

local ceny = {mrkev = 5, brambory = 8, ["dýně"] = 20}

local function spocitejCenu(plodina, pocet)
    return ceny[plodina] * pocet
end

print(spocitejCenu("mrkev", 3))
print(spocitejCenu("dýně", 2))

Vypíše:

15
40

Kdybyste v ní omylem napsali ceny.plodina * pocet, program by skončil chybou attempt to perform arithmetic on a nil value (field 'plodina'). Hláška jmenuje klíč, který Lua hledala, 'plodina': to je znamení, že jste napsali název proměnné místo její hodnoty. A když klíč z proměnné v tabulce není, je v hlášce místo názvu otazník, protože Lua neví, odkud se klíč vzal: spocitejCenu("kukuřice", 1) skončí chybou attempt to perform arithmetic on a nil value (field '?').

Ještě jedna drobnost: klíčem může být i číslo, a číslo je jiný klíč než text. t[1] a t["1"] jsou dva různé klíče.

Pokyny

Program skončí chybou. Opravte funkci spocitejCenu, aby četla cenu plodiny, která je v parametru plodina. Program vypíše:

3 mrkve: 15 mincí

Zákazník přinesl seznam toho, co chce, objednavka: od každé plodiny jeden kus. Na konci programu ho projděte pomocí ipairs a u každé plodiny vypište její cenu. Kukuřici Ema na stánku neprodává (nechává ji slepicím), takže ceny klíč "kukuřice" nemají: u ní vypište kukuřice: neprodává se. Program vypíše:

dýně: 20
jahody: 12
kukuřice: neprodává se
mrkev: 5

Pod cyklem vypište, kolik zákazník zaplatí za plodiny, které Ema prodává:

Celkem: 37 mincí

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

3/10