Гайд | Lua для чайников {1 часть}
-
Универсальный гайд по входу в кодинг на Lua
гайд полностью написан мной (t1m1yep) при помощи своих знаний и документации Lua для octothorp team и его сообщества

Предисловие
привет! меня зовут тимофей и на протяжении всего этого гайда я буду обучать тебя входу в кодинг на lua и базам glua
рекомендую взять чай/кофе или твой любимый напиток, чипсы или другую закуску и готовься впитывать большое кол-во информации
удачи!
Установка IDE и Lua
давай начнем с установк всего необходимого для разработки:
для начала установим среду разработки - IDE (англ. интегрированная среда разработки)предлагаю тебе использовать visual studio code, но если ты знаком с любым другим IDE, можешь пользоваться им
установить vs code
после установки открывай visual studio code (дальше для удобства буду его называть VSC)
в левой части интерфейса будет кнопка с квадратиками, в ней мы выберем необходимые дополнения (скриншот ниже, нажимай туда)
в строку поиска пиши Lua и нажимай установить на расширении, показанном на скриншоте

делай тоже самое с расширением glua (тоже показано на скриншоте)

теперь установим Lua. я смогу сделать гайд на установку луа на windows только в феврале, сейчас у меня мак… поэтому… смотреть гайд тут (НЕ МОЙ):
видео гайд
нужный сайт для установкитеперь ты готов к разработке!
учимся писать код!
откроем папку для разработки, рекомендую создать отдельную папку (смотреть скриншот)

теперь создадим файл: (смотреть скриншот)

нажимаем на кнопку создать файл и вводим:
main.luaв этом случае main - название файла, а .lua это расширение файла. название файла вы можете сделать своим, но расширение обязательно .lua
после этого откроется окошко с вводом кода, туда мы будем писать код

также в VSC удобный встроенный терминал. для этого нажмите словосочетание
CTRL + ` (апостроф)переведи курсор в верхнюю панель с кодом и готовься запоминать
терминология
переменная - ячейка с определенным названием и значением:
название_переменной = значение_переменнойпеременные могут быть глобальными и локальными. локальные имеют перед названием слово “local”:
local название_переменной = значение_переменнойтипы данных в Lua
луа - динамически типизированный язык, поэтому тут вам не надо указывать типы, но, все же их необходимо знать для понимания языка и чтобы не допускать ошибок с этой темой
string - строка
моя_крутая_строка = "привет, мир!"строка ВСЕГДА обьявляется в кавычках!! это очень важно, если их не указать, компьютер будет искать переменную вместо строки, так как именно переменные указываются без кавычек!!!
number - число
мое_крутое_число = 5также число может быть дробью:
моя_крутая_дробь_тоже_число = 5.5boolean - булево значение
вы наверняка знаете “true” и “false” из учебников английского языка 5 класса

мое_крутое_булево_значение = trueи еще:
мое_крутое_булево_значение = falseесли не знаете английский, true - правда, false - ложь
nil - ничего
nil - буквально ничего

мое_крутое_ничего = nilfunction - функция
function моя_крутая_функция(мой_крутой_аргумент_функции)пока что ты еще не знаешь о функциях, но мы поговорим о них прямо в следующем параграфе!
в этом параграфе я рассказал тебе только о самых базовых типах, всего их восемь, об остальных мы поговорим позже
функции
функция имеет аргумент (иногда его не может быть) и название, также она может возвращать значение. давай посмотрим на примере:
function название_функции(аргумент_функции) -- обьявляем функцию local переменная = 10 -- обьявляем переменную return переменная -- возвращаем переменную end -- обьясняем компьютеру, что наша функция закончиласьты мог заметить, что после обьявления функции, все что находится в ней начинается с нескольких пробелов. такой отступ называется табуляцией. чтобы удобно создать табуляцию - нажми кнопку TAB и табуляция появится сама
**также функция может принимать аргументы: **
function суммировать(а, б) -- создаем функцию local сумма = а + б -- создаем переменную, равную сумме аргументов а и б return сумма -- возвращаем нашу переменную сумма end -- заканчиваем функциюаргументы в функции перечисляются через запятые и могут иметь любые названия, это обычные переменные
теперь вызовем функцию:
суммировать(10, 50)функция должна быть обьявлена выше, чем ее вызов в коде!
чтобы вывести результат функции, нам понадобится вызов встроенной функции print:
print(суммировать(10, 50))также можем вывести любую другую переменную через функцию print:
print("привет, челог!")для этого понадобится отправить строку в кавычках, как я говорил раньше в параграфе с типами данных!! если этого не сделать, компьютер будет искать переменную вместо строки
также можно вывести переменную:
local строка = "привет, челог!" print(строка)разницы между двумя верхними примерами нет
условия
условия позволяют выполнять определенный отрывок кода только если условие соблюдается
условия if и else
local a = 10 -- обьявляем переменную a local b = 5 -- обьявляем переменную b if a > b then -- говорим компьютеру: ЕСЛИ а БОЛЬШЕ б, ТОГДА печатай текст print("переменная а больше чем б!") endусловие также имеет табуляции и заканчиваются с помощью end. в этом случае нам напишет строку “переменная а больше чем б!”
но если мы поменяем переменные значениями (тоесть переменная a станет равна 5, а переменная b станет 10)
теперь введем еще одно условие else
local a = 10 local b = 5 if a > b then print("переменная а больше чем б!") else -- говорим компьютеру, что если условие не выполняется, то печатаем текст print("функция не подошла не под одно условие!!") endelseif
а что если может быть еще один вариант? если переменные равны, и нам надо напечатать текст именно о том, что переменные равны? в таком случае нам поможет условие elseif
local a = 10 local b = 5 if a > b then print("переменная а больше чем б!") else if a == b -- иначе если а == б print("переменная а равна б!") -- печатаем текст else print("функция не подошла не под одно условие!!") endвот так выглядят условия. и да, end у них один, так как они считаются одним блоком кода
когда мы сравниваем две переменные на равенство, пишется два знака “=”, а если присваеваем переменной значение, пишется один знак “=”
ввод и вывод
есть три потока - stdIN, stdOUT, stdERR
нас интересуют только первые два (пока что)
stdin - осуществляет пользовательский ввод из консоли
stdout - осуществляет вывод данных в консоль
чтобы пользователь мог ввести значение переменной, рассмотрим такой код:local переменная = io.read()мы вызываем функцию read из библиотеки io (input/output)
библиотека - определенный код, созданный для удобства использования заготовленных функций. язык имеет встроенные библиотеки
а теперь выведем этот ввод:local переменная = io.read() print(переменная)массивы
набор переменных, каждая из которых хранит значение, идентифицируемое с помощью одного или нескольких индексов
рассмотрим следующий код:local массив = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}так создается массив, в массиве количество элементов считается от нуля, тоесть последним индексом этого массива будет 9, а первым 0
обратимся к 5 индексу массива в этом коде (это число 6):local массив = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} print(массив[5]) -- в квадратных скобках после названия переменной указываем индекс переменной в массивециклы
циклы позволяют нам выполнять один блок кода н-нное количество раз. один такой раз называется одной ИТЕРАЦИЕЙ
операторы (важно)
= - оператор присваивания
== - оператор сравнения (если переменные равны)
~= - оператор сравнения (если переменные не равны)
< - оператор меньше
> - оператор больше
<= - оператор меньше-равно
>= - оператор больше-равноwhile
while переводится как “пока”, тоесть компьютер делает какой то блок кода пока условие выполняется. грубо говоря, if вместе с циклом.
рассмотрим цикл while:
local i = 0 -- i это общепринятое название переменной обозначающей количество итераций local limit = 10 -- количество итераций while i < limit do -- пока i меньше переменной limit (10) делай этот блок кода print(i) -- печатаем переменную i i = i + 1 -- i равняется i плюс 1 endэтот код выведет числа от 0 до 9
repeat (repeat-until)
repeat -- повторять line = io.read() -- считываем ввод от пользователя until line ~= "" -- если ввод пользователя не пустая строка, то повторяем еще раз print(line) -- печатаем последний ввод пользователяrepeat перевыполняет код еще раз, если условие until выполняется. until выполняет роль if
числовой for
цикл for - переводится как “пока”, как и while, только используется в других целях и имеет другой вид
for i = 1, 10 do print(index) endfor делает “шаги”, после каждого автоматически прибавляя 1 к переменной i, а число 10 после запятой здесь означает количество шагов. этот код выведет числа от 1 до 10
рядовой for
сразу попрошу учесть что рядовой for не военный и даже не служит в армии! рядовой тут означает - по рядам
рядовой for позволяет итерироваться (перевыполнятся) блоку кода пока в данном ему массиве имеются элементы.
рассмотрим этот код:local a = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100} for i,v in ipairs(a) do -- i (индекс обьекта в массиве) и v (значение массива с индексом i) в ipairs(массив) print(v) -- печатаем значение массива с индексом i endipairs() - функция которая возвращает сразу два значения: индекс значения в массиве и само значение в массиве. перестает возвращать значения когда массив заканчивается, следственно, цикл тоже останавливается
возвращать два значения легко - return первое_значение, второе_значение . просто перечисли через запятую!
break
break позволяет остановить цикл вне его выполнения
рассмотрим данный код:local a = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100} for i,v in ipairs(a) do -- i (индекс обьекта в массиве) и v (значение массива с индексом i) в ipairs(массив) if v == 50 then break end -- если значение массива равняется 50, останавливаем цикл print(v) -- печатаем значение массива с индексом i endда, условия в одну строку реализуются только если блок, выполняемый в условии однострочный: if 10 > 20 then print(“10 меньше 20!!”) end
Заключение первой части гайда
итоговый гайд выйдет ОЧЕНЬ большим, поэтому я считаю что будет лучше разбить его на несколько частей, дабы сильно не нагружать мозг читателя.
спасибо что дочитал до этого момента! мне правда приятно что я смогу научить кого-то своим навыкам
итоговая работа (по желанию)
если ты хочешь закрепить свои навыки, можешь выполнить это задание и отправить его мне в личные сообщения (дискорд - timofeyw) или канал #programming дискорда Octothorp Team с моим пингом. отправляй файл .lua, я обязательно отвечу тебе
сделать программу, которая будет запрашивать у пользователя количество чисел и после в цикле (можно выбрать любой) запросить и суммировать столько чисел, сколько пользователь ввел в начале (то самое кол-во чисел о котором я сказал в начале задания)
обратная связь (вопросы насчет кода)
смело пиши мне в личные сообщения дискорда - timofeyw
я постараюсь ответить в кратчайшие сроки
обратная связь (вопросы насчет топика, ошибки топика)
можешь писать прямо в комментарии этого топика или мне в личные сообщения дискорда - timofeyw
спасибо и удачи! новая часть выйдет как можно скорее
вторая часть
-
сейчас отдохну и начну писать вторую часть, сообщайте насчет ошибок пожалуйста
-
Т тимиеп делает ссылку на эту тему
-
спасибо за лайки, мне очень приятно
-
приступаю ко второй части, завтра/может быть сегодня будет готово (у меня +4 от мск, поэтому скорее всего завтра)