Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Cykly a return v Lua

For

V lua existujú dva typy cyklov for a while. For sa zapisuje takto for <promena> = <odkdy>,<dokdy> do end:

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

Pozn. na rozdiel od C-like jazykov Lua začína od 1 nie od 0.

Vypíše do konzoly 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 nepozná ++ ani --

Kalkulačka

Kalkulačku by teda išlo napísať aj s pomocou cyklu a to takto.

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 nie je takzvane blbuvzdorný teda že program spadne keď zadáte zlý vstup. Aby sme toho dosiahli a pritom kalkulačku neznepřehlednily ukážeme si ďalšiu zaujímavú vec na funkciách. Vytvoríme si funkciu ziskejvstup() ktorá bude vstup validovať.

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 validáciu vstupu operácie vytvoríme ďalšiu funkciu a ešte ďalšiu funkciu, ktorá umožní vystúpiť z programu po každom zlom vstupe.

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 tohto dielu potom vyzerá takto.

 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();

Aby sme boli z funkciami hotoví ukážem ešte posledná vec 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šetky články v sekcii
Lua
Článok pre vás napísal Richard H.
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v Javě
Aktivity