Добавлен MpW,
опубликован
Lua-программирование для чайников
Содержание:
10.1. Арифметический цикл (цикл со счетчиком).
Выполняет действие заданное кол-во раз. Имеет следующую конструкцию:
Синтаксис:
for ... do
...
end
обычно указывают в for .. do end 3 параметра:
start=1 --начало цикла. часто начинают с 1. Но можно, и наоборот, в обратный цикл от max до 1. Пример цикл от 10 до 1, в таком случае, указывают start = 10, finish=1, step = -1
finish=10 --число показывает конец цикла. завершение цикла. цикл прерывается, если finish==a.
step = 1 --шаг, по стандарту =1. И можно не указывать его в for .. do end. можно изменять размер шага. Если я хочу изменить цикл, пример от 10 до 1 с шагом -1.
for a = start, finish, step do
...
end
Пример
-- начало = 1, условие выхода из цикла = 10
for i=1,10 do
print("....");
end
Число 1 — с какого числа надо начинать цикл, 10 — до скольки продолжать. Первое число не может быть меньше одного.
Переменная i может быть любой другой:
for j=1,10 do
...
end
Также эта переменная является локальной — после окончания цикла она перестанет существовать. Если надо, её можно сохранить:
H = 1;
for i=1,20 do
print("...");
H = i;--сохраняем переменную
end
Чтобы преждевременно закончить цикл, можно воспользоваться оператором break:
k = 1;
for i=1,50 do
k = k + 1;
if k == 25 then
break --разрушить/завершить цикл
end
end
Оператор break должен стоять в конце цикла. Если же этого не надо, то можно отнести его в отдельный блок do ... end, о котором говорилось ранее:
k = 1;
for i=1,60 do
k = k + 2;
do
break
end
k = k - 20;
end
Также, если написать break так:
k = 1;
for i=1,10 do
k = k + 1;
break
end
Тогда цикл выполнится только один раз. В дополнение к скрипту выше:
print(k); -- 2
10.2. Цикл while (цикл с предусловием).
Выполняет цикл до тех пор, пока заданное условие является истинным. Таким образом, цикл может не выполнится ни разу. Имеет следующую конструкцию:
Синтаксис:
Синтаксис:
while ... do
...
end
цикл будет выполняться до сих пор, пока условие b истинно. Как только условие вернет b==false, цикл оборвется.
while b do
--<body>
end
Пример:
a = 1; -- переменная а
while a < 20 do -- выполняется цикл до тех пор, пока а меньше 20
a = a + 1;
end
В данном примере цикл закончится, когда а будет равна 20.
Оператор break тут тоже уместен.
10.2.1. Бесконечный цикл.
Как понятно по названию, данный цикл выполняется бесконечно. Конструкция его состоит из цикла while:
Синтаксис:
while true do
...
end
На самом деле это самый обычный цикл while. Но может пригодится для бесконечного выполнения какой-либо операции.
Пример:
i = 1;
while true do
i = i + 1;
if i > 10000 then break end
end
print(i);
10.3. Цикл repeat (цикл с постусловием).
Выполняет действие, пока не выполнится заданное условие. В отличии от while всегда выполнится хотя бы один раз. Конструкция его такова:
Синтаксис:
repeat
...
until ...
Пример:
n = 1; -- есть переменная n со значением 1
repeat -- начало цикла
n = n + 1;
until n == 50; -- выполнять цикл, пока n не примет значение 50
print(n); -- напечатает 50
10.4. Оператор return для циклов.
В случае для циклов данный оператор полностью повторяет оператор break:
a = 10;
for i=1,10 do
a = a + 1;
if a == 15 then return end
end
print(a); -- 15
Ну, в общем, тут всё понятно.
Завершение двойного цикла
Пример, если у нас есть двойной цикл. И нужно, чтобы цикл сразу завершался:
вот внизу представлен пример двойного цикла, из которого по завершению условия, должен завершится. Т.е. по логике должен выйти из первого цикла, и из второго цикла. Но код напечатан неправильно, поскольку, break поможет выйти только из первого цикла, в то время как второй не запустится никогда.
for x=0, column do
for y=0, row do
if not button_xy[x][y] then
button_xy[x][y]=Type_building
break break
end
end
end
надо проверять условия таким образом (правильно):
local exit = false
for y=0, row do
if exit then
break --выход из второго основного цикла
end
for x=0, column do
if not button_xy[x][y] then
button_xy[x][y]=Type_building
exit = true
break --выход из первого доп цикла
end
end
end
Другой вариант. Оборачивай в функцию и используй return, тогда выйдет из всех циклов сразу
function checkA()
for x=0, column do
for y=0, row do
if not button_xy[x][y] then
button_xy[x][y]=Type_building
return false --в некоторых программах луа ругает почему-то, если я ничего возвращаю. поэтому вернул false
end
end
end
end
10.5. Циклы обхода элементов таблиц и массивов.
Данные два цикла пока ещё рано изучать, так как ещё не приступили к изучению таблиц. Просто скажу, что к циклам вернёмся в будущих параграфах.
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.