Porovnávací operátory

Znaky > a < jsou porovnávací operátory: porovnávají dvě hodnoty. Lua jich má šest:

  • == rovná se: 5 == 5
  • ~= nerovná se: 5 ~= 3
  • > je větší než: 5 > 3
  • < je menší než: 3 < 5
  • >= je větší nebo rovno: 5 >= 5
  • <= je menší nebo rovno: 3 <= 5

Všechny příklady v seznamu jsou pravdivé. Dejte pozor na hranici: 12 > 12 je nepravda, ale 12 >= 12 je pravda. „Aspoň tucet vajec“ je tedy vejce >= 12.

Každé porovnání dává pravdivostní hodnotu true (pravda), nebo false (nepravda), kterou znáte z minulé lekce. Můžete ji vypsat nebo uložit do proměnné:

local vejce = 12
print(vejce > 12, vejce >= 12)
local jeTucet = vejce == 12
print("Tucet:", jeTucet)

Vypíše:

false	true
Tucet:	true

V local jeTucet = vejce == 12 Lua nejdřív porovná a teprve potom výsledek uloží. „Rovná se“ se píše dvěma rovnítky, protože jedno už má svou práci: vejce = 12 přiřazuje (uloží 12 do vejce), kdežto vejce == 12 porovnává (ptá se, jestli je vejce 12, a nic nemění). Jedno = v podmínce je chyba syntaxe: if vejce = 12 then skončí hláškou 'then' expected near '='.

„Nerovná se“ se v Lua píše ~=, tedy vlnovka a rovnítko. Mnoho jiných jazyků píše !=, a tomu Lua nerozumí:

local den = "pondělí"
if den != "sobota" then
    print("Dnes trh není")
end
main.lua:2: 'then' expected near '!'

Porovnávat můžete i texty. Dva texty se rovnají, jen když se shodují přesně, znak po znaku: "Mrkev" == "mrkev" je nepravda, protože velké písmeno je jiný znak. < a > porovnávají texty podle abecedy: "brambory" < "mrkev" je pravda. Abeceda Lua má ale dvě zvláštnosti: všechna velká písmena jsou před všemi malými, takže i "Zelí" < "brambory" je pravda, a písmena s diakritikou (č, ř, ž…) jsou až za všemi ostatními, takže "čaj" < "zelí" je nepravda.

Číslo a text se nikdy nerovnají, takže 12 == "12" je nepravda, i když "10" + 5 Lua na číslo převede sama. A <, >, <= nebo >= mezi číslem a textem skončí chybou:

local vejce = "14"
if vejce < 12 then
    print("Vajec je málo")
end
main.lua:2: attempt to compare string with number

Když číslo přijde jako text, převeďte ho nejdřív pomocí tonumber.

Pokyny

Spusťte program: skončí chybou. Opravte podmínku pomocí operátoru „nerovná se“ tak, jak se píše v Lua. Program pak vypíše:

Trh je otevřený jen v sobotu
Mrkve: 15

Obchodník Hugo kupuje mrkve po tuctech. Na konec programu napište příkaz if, který vypíše Hugo koupí tucet mrkví, pokud je mrkve 12 nebo víc. Program vypíše:

Trh je otevřený jen v sobotu
Mrkve: 15
Hugo koupí tucet mrkví

Změňte mrkve na 12. Tucet je přesně 12, takže Hugo mrkve koupí i teď a program vypíše:

Trh je otevřený jen v sobotu
Mrkve: 12
Hugo koupí tucet mrkví

Pokud poslední řádek chybí, zkontrolujte porovnávací operátor.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

2/10