Lua/Конструкции языка: различия между версиями
Содержимое удалено Содержимое добавлено
Kylaix (обсуждение | вклад) |
Kylaix (обсуждение | вклад) |
||
Строка 1:
{{Автоматическая навигация|Предыдущая глава=Типы данных}}
== Итераторы ==▼
В прошлой главе мы рассматривали такой тип как table. Задавать ключи/значения достаточно долгая ручная работа. Автоматизировать эту работу можно при помощи итераторов.▼
И так, попробуем наполнить нашу таблицу 100 элементов, ключ которых, равен значению.<syntaxhighlight lang="lua">▼
a = {} -- создали пустой массив ▼
for i = 1,100 do a[i] = i end -- добавили 100 элементов▼
</syntaxhighlight>Немного непонятная конструкция, верно? Давайте разберем в ней каждое слово, каждый символ:▼
* for(для) конструкция, после которой следует количество элементов с которыми мы будем работать▼
* i = 1,100 (переменной i от 1 до 100)▼
* do (сделать) конструкция, после которой говорится, что мы будем делать с конструкцией▼
* a[i] = i каждому a[i] с ключом i присвоить значение i (фактически, это создание элемента массива)▼
* end(конец) указывает на то, что конструкция должны быть закрыта.▼
* А теперь все вместе: для переменной i от 1 до 100 сделать так, чтобы каждому a[i] был присвоен i и закончить конструкцию▼
Если вы ранее программировали на других языках, то вам привычнее будет такая конструкция:<syntaxhighlight lang="lua">▼
for i = 1,100 do▼
a[i] = i▼
end▼
</syntaxhighlight>Мы создали массив. И, предположим, забыли, что в него добавили и какая его длина. Давайте посмотрим посмотрим на элементы массива:<syntaxhighlight lang="lua">▼
for i = 1,#a do▼
print(a[i])▼
end▼
--> выводит 100 элементов▼
</syntaxhighlight>Напомним, что #a - длина массива (в нашем случае, она равна 100)▼
== Условные конструкции ==
Строка 80 ⟶ 52 :
</syntaxhighlight>
===
Break - не является циклом. Он останавливает его выполнение.<syntaxhighlight lang="lua">
a = 0
while True do
a = a + 1 --> Каждое выполнение цикла увеличивает а на единицу
if a == 13 then --> но когда a достигает 13 - цикл заканчивает свое выполнение
break
end
▲end
</syntaxhighlight>Как вы видите, чаще всего break используют с условным выражением.
▲== Итераторы ==
▲В прошлой главе мы рассматривали такой тип как table. Задавать ключи/значения достаточно долгая ручная работа. Автоматизировать эту работу можно при помощи итераторов.
▲И так, попробуем наполнить нашу таблицу 100 элементов, ключ которых, равен значению.<syntaxhighlight lang="lua">
▲a = {} -- создали пустой массив
▲for i = 1,100 do a[i] = i end -- добавили 100 элементов
▲</syntaxhighlight>Немного непонятная конструкция, верно? Давайте разберем в ней каждое слово, каждый символ:
▲* for(для) конструкция, после которой следует количество элементов с которыми мы будем работать
▲* i = 1,100 (переменной i от 1 до 100)
▲* do (сделать) конструкция, после которой говорится, что мы будем делать с конструкцией
▲* a[i] = i каждому a[i] с ключом i присвоить значение i (фактически, это создание элемента массива)
▲* end(конец) указывает на то, что конструкция должны быть закрыта.
▲* А теперь все вместе: для переменной i от 1 до 100 сделать так, чтобы каждому a[i] был присвоен i и закончить конструкцию
▲Если вы ранее программировали на других языках, то вам привычнее будет такая конструкция:<syntaxhighlight lang="lua">
▲for i = 1,100 do
▲ a[i] = i
▲end
</syntaxhighlight>Мы бы рекомендовали использовать именно ее.
Между for и do, можно поставить не только индекс начала и конца массива, но и шаг с которым будет идти процесс итерации. Это часто называют в других языках как ''start,stop,step'' (начало, конец, шаг) и в других языках эта конструкция аналогична. Например:<syntaxhighlight lang="lua">
for i = 1,100,2 do --> start= 1, stop=100, step = 2
a[i] = i --> 1,3,5,7 и т.д.
end
▲</syntaxhighlight>Мы создали массив
▲for i = 1,#a do
▲ print(a[i])
end
▲--> выводит 100 элементов
▲</syntaxhighlight>Напомним, что #a - длина массива (в нашем случае, она равна 100)
Можно также перебирать ключи одновременно со значениями:<!-- Проблема с кодом. Перепроверить --><!-- Добавить про io.lines pairs ipars string.gmatch -->
<syntaxhighlight lang="lua">
a = {'a' = 1,'b' = 2;'c' = 3}
for k,v in pairs(a) do
print(k,v)
end
</syntaxhighlight>
== Goto ==
В Lua существует оператор goto. Он позволяет перепрыгивать в отдельные участки кода, например, выпрыгнуть из цикла в итератор где-то снаружи.
Вы не часто встретите в других языках данный оператор и этому есть разумное объяснение: goto часто приводит к ухудшению читаемости кода, создать непредвиденные ситуации для программиста и многое другое. Именно поэтому мы, как и разработчики языка, рекомендуем его использовать ограниченно и обдуманно.
Также, есть 3 ограничения:
# Нельзя прыгнуть внутрь блока
# Нельзя выпрыгнуть из функции
# Нельзя прыгнуть внутрь области видимости локальной переменной
<!-- Дописать -->{{Нижняя автоматическая навигация|Предыдущая глава=Типы данных}}
|