Руководство по Lua 5.1

Содержание:

Оператор if

Оператор if позволяет выполнять разные участки кода в зависимости от условия:
    if condition then
      block
    elseif condition2 then
      block
    elseif condition3 then
      block
    else
      block
    end
if- и elseif-части проверяются по порядку. Как только одно из условий возвращает true, выполняется блок кода, следующий за условием, а все остальные условия пропускаются. Блок кода после else выполняется, если ни одно из вышеуказанных условий не выполнилось.
elseif- и else-части не обязательны:
    > n = 5
    > if n > 5 then print("greater than 5") else print("less than 5") end
    less than 5
    > n = 7
    > if n > 5 then print("greater than 5") else print("less than 5") end
    greater than 5
И более сложный пример:
    > n = 12
    > if n > 15 then
    >> print("the number is > 15")
    >> elseif n > 10 then
    >> print("the number is > 10")
    >> elseif n > 5 then
    >> print("the number is > 5")
    >> else
    >> print("the number is <= 5")
    >> end
    the number is > 10
Обратите внимание, что даже, если несколько условий возвращают true, выполняется только один блок кода, т.к. после первого подходящего условия, все остальные пропускаются.

Циклы

Цикл while (цикл с предусловием):
    while condition do
      block
    end
Выполняет блок кода вновь и вновь по циклу до тех пор, пока выполняется условие. Проверка условия происходит перед каждым выполнением цикла. Если условие всегда равно false ,цикл вовсе не запускается.
    > i = 1
    > while i <= 10 do
    >> print(i)
    >> i = i + 1
    >> end
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

Цикл repeat (цикл с постусловием):
    repeat
      block
    until condition
Похож на цикл while, но действует по-другому: выполнение цикла прерывается, когда выполняется условие.
Также проверка условия происходит после выполнения цикла, так что такой цикл будет выполнен по крайней мере 1 раз.
    > i = 5
    > repeat
    >> print(i)
    >> i = i - 1
    >> until i == 0
    5
    4
    3
    2
    1

Цикл for :
    for variable = start, stop, step do
      block
    end
выполняет блок кода с переменной start, после каждого выполнения блока переменная start увеличивается на значение переменной step. Блок кода выполняется до тех пор, пока start не станет больше stop.
Можно не указывать переменную step, тогда она по умолчанию будет равна 1
Можно сделать переменную step отрицательной, чтобы цикл шёл с конца:
    > for i = 1, 5 do
    >> print(i)
    >> end
    1
    2
    3
    4
    5
    > for i = 1, 100, 8 do
    >> print(i)
    >> end
    1
    9
    17
    25
    33
    41
    49
    57
    65
    73
    81
    89
    97
    > for i = 3, -3, -1 do
    >> print(i)
    >> end
    3
    2
    1
    0
    -1
    -2
    -3
    > for i = 0, 1, 0.25 do
    >> print(i)
    >> end
    0
    0.25
    0.5
    0.75
    1
    > for i = 1, 3 do
    >> for j = 1, i do
    >> print(j)
    >> end
    >> end
    1
    1
    2
    1
    2
    3
Помните, что переменные в цикле видны только внутри данного блока.

Цикл for с итератором:
    for var1, var2 in iterator do
      block
    end
Часто применяет для быстрого и простого перебора таблиц:
    > tbl = {"a", "b", "c"}
    > for key, value in ipairs(tbl) do
    >> print(key, value)
    >> end
    1       a
    2       b
    3       c

Оператор break

Оператор break прерывает выполнение текущего цикла:
    > i = 3
    > while true do -- infinite loop
    >> print(i)
    >> i = i + 1
    >> if i > 6 then
    >> break
    >> end
    >> end
    3
    4
    5
    6
Если break расположен во вложенном цикле, он прервёт только его:
    > for i = 1, 2 do
    >> while true do
    >> break
    >> end
    >> print(i)
    >> end
    1
    2
Нельзя использовать break за пределами циклов:
    > break
    stdin:1: <break> at line 1 not inside a loop

Оператор goto

Пропускает часть кода цикла и переходит к другой части:
    > for i = 1, 10 do
    >> if i>3 and i<6 then goto continue end
    >> print(i)
    >> ::continue:: -- любое название, окруженное:: :: (двойными двоеточиями) 
                               --является меткой оператора goto
    >> end
    1
    2
    3
    6
    7
    8
    9
    10

Условия

Необязательно, чтобы условиями были только логические значения: подойдут любые.
Но помните, nil и false возвращают false, все остальные типы и значения - true.
    > if 5 then print("true") else print("false") end
    true
    > if 0 then print("true") else print("false") end
    true
    > if true then print("true") else print("false") end
    true
    > if {} then print("true") else print("false") end
    true
    > if "string" then print("true") else print("false") end
    true
    > if nil then print("true") else print("false") end
    false
    > if false then print("true") else print("false") end
    false
В некоторых языках программирования, присваивание значений - обычное выражение, и может быть использовано в таком коде:
    > i = 0
    > while (i = i + 1) <= 10 do print(i) end
    stdin:1: ')' expected near '='
Однако в Lua = это оператор, и такой код вызовет ошибку.
данная статья является вольным переводом с сайта lua-users.org
с возможными дополнениями и изменениями

`
ОЖИДАНИЕ РЕКЛАМЫ...