Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Cykly a return v Lua

For

V lua existují dva typy cyklů for a while. For se zapisuje takto for <promena> = <odkdy>,<dokdy> do end:

for i = 1,3 do
  print("ahoj svete")
end

Pozn. na rozdíl od C-like jazyků Lua začíná od 1 ne od 0.

Vypíše do konzole 3krát ahoj svete.

While

zápis: while <podmínka> do end

exit = 1 -- vytvoříme proměnou exit a dáme jí hodnotu 1
  while not exit == 3 do -- cyklus zkontroluje jestli  exit nemá hodnotu 3
    print("ahoj svete") -- vypíše ahoj svete
    exit = exit + 1 -- přičteme k exit 1
  end

Pozn. Lua nezná ++ ani --

Kalkulačka

Kalkulačku by tedy šlo napsat také s pomocí cyklu a to takhle.

exit = false
  while not exit do --Šlo by také napsat  while not exit == true do ale v případě že proměnné přiřadíme logickou hodnotu true/false můžeme == vynechat.
   print("první číslo")
   cislo = io.read()
   print("zadej druhé cislo")
   cislo2 = io.read()
   print("zadej operaci")
   operace = io.read();
   if operace == "+" then
     print(cislo + cislo2)
    elseif operace == "-" then
     print(cislo - cislo2)
    elseif operace == "*" then)
     print(cislo * cislo2)
    elseif operace == "/" then
     print(cislo / cislo)
    else --příkazy po else se provedou v případě že operace nesplňuje if ani žádný z elseif.
     print("spatna operace")
   end
    print("chcete zadat další příklad ano/ne")
    roz = io.read()
   if roz == "ne" then
     exit = true
   end
  end

Kalkulačka má však jednu chybu a to že není takzvaně blbuvzdorná tedy že program spadne když zadáte špatný vstup. Abychom toho dosáhly a přitom kalkulačku neznepřehlednily ukážeme si další zajímavou věc na funkcích. Vytvoříme si funkci ziskejvstup() která bude vstup validovat.

function ziskejvstup()
    exit = false
    while not exit do
      vstup = io.read()
      if not tonumber(vstup) ==  nil then -- Funkce tonumber je součástí standardních knihoven lua tedy ---je přístupná ve všech lua programech.
       -- programu stejně jako standardní knihovna funkcí io ze které je funkce io.read().
       -- tonumber se normálně používá v případě že je potřeba převést textový řetězec na číslo.
       -- Ovšem díky tomu že vrací nil když se převod nepovede se dá použít k validaci vstupu.
       print("nezadali jste číslo")
       vystup() -- Tato funkce bude vysvětlena níže.
       else
        return tonumber(vstup)-- Vrátíme vstup převedený na číslo.
      end
    end

K validaci vstupu operace vytvoříme další funkci a ještě další funkci, která umožní vystoupit z programu po každém špatném vstupu.

function vystup()
  print("byl zadán neplatný vstup")
  print("chcete ukončit program? (Ano pro ukončeni cokoli pro pokračování.)")
  vstup = io.read()
  if vstup == "ano" then
   os.exit(1)--ukončíme program s kódem 1 (program byl ukončen bez chyby).
  end
end
function ziskejoperaci()
 exit = false
 while not exit do
  vstup = io.read()
  if vstup == "+" then
    return "+"
  elseif vstup == "-" then
    return "-"
  elseif vstup == "*" then
    return "*"
  elseif vstup == "/" then
    return "/"
  else
   print("neznámá operace")
   vystup()
   end
 end
end

Kalkulačka z tohoto dílu pak vypadá takhle.

 function vystup()
  print("byl zadán neplatný vstup")
  print("chcete ukončit program? (Ano pro ukončeni cokoli pro pokračování.)")
  vstup = io.read()
  if vstup == "ano" then
   os.exit(1)--ukončíme program s kódem 1 (program byl ukončen bez chyby).
  end
end
function ziskejoperaci()
 exit = false
 while not exit do
  vstup = io.read()
  if vstup == "+" then
    return "+"
  elseif vstup == "-" then
   return "+"
  elseif vstup == "*" then
     return "*"
  elseif vstup == "/" then
    return "/"
  else
   print("neznámá operace")
   vystup()
   end
 end
end
  function ziskejvstup()
    exit = false
    while not exit do
      vstup = io.read()
      if not tonumber(vstup) ==  nil then -- Funkce tonumber je součástí standardních knihoven lua tedy je přístupná .
       -- programu stejně jako standardní knihovna funkcí io ze které je funkce io.read().
       -- tonumber se normálně používá v případě že je potřeba převést textový řetězec na číslo.
       -- Ovšem díky tomu že vrací nil když se převod nepovede se dá použít k validaci vstupu.
       print("nezadali jste číslo")
       else
        return tonumber(vstup)-- Vrátíme vstup převedený na číslo.
      end
    end
    function main()
      exit = false
      while not exit do
       print("zadejte první číslo")
       cislo = ziskejvstup()
       print("zadej druhe číslo")
       cislo2 = ziskejvstup()
       print("zadejte operaci")
       operace = ziskejoperaci()
       if operace == "+" then
         print(cislo + cislo2)
      elseif operace == "-" then
         print(cislo - cislo2)
      elseif operace == "*" then
         print(cislo * cislo2)
     elseif operace == "/" then
         print(cislo / cislo2)
    else
      print("neznama operace")
      vystup()
      end
     end
    end
    main();

Abychom byli z funkcemi hotovi ukážu ještě poslední věc a to argumenty.

function zvetsi(cislo,o)--dáme funkci argumenty
cislo = cislo + o --argument je vlastně proměnná takže můžeme použít tohle.
return cislo
end

 

Všechny články v sekci
Lua
Článek pro vás napsal Richard H.
Avatar
Uživatelské hodnocení:
2 hlasů
Autor se věnuje programování v Javě
Aktivity