Гайд | Lua для чайников {1 часть}

Гайды
  • Универсальный гайд по входу в кодинг на Lua

    гайд полностью написан мной (t1m1yep) при помощи своих знаний и документации Lua для octothorp team и его сообщества 🙂

    Предисловие

    привет! меня зовут тимофей и на протяжении всего этого гайда я буду обучать тебя входу в кодинг на lua и базам glua
    рекомендую взять чай/кофе или твой любимый напиток, чипсы или другую закуску и готовься впитывать большое кол-во информации
    удачи! 😊

    Установка IDE и Lua

    давай начнем с установк всего необходимого для разработки:
    для начала установим среду разработки - IDE (англ. интегрированная среда разработки)

    предлагаю тебе использовать visual studio code, но если ты знаком с любым другим IDE, можешь пользоваться им
    установить vs code
    после установки открывай visual studio code (дальше для удобства буду его называть VSC)
    в левой части интерфейса будет кнопка с квадратиками, в ней мы выберем необходимые дополнения (скриншот ниже, нажимай туда)

    yWqkJay.png

    в строку поиска пиши Lua и нажимай установить на расширении, показанном на скриншоте

    4IweOWY.png

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

    2J9nBYR.png

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

    видео гайд
    нужный сайт для установки

    теперь ты готов к разработке!

    учимся писать код!

    откроем папку для разработки, рекомендую создать отдельную папку (смотреть скриншот)

    vcT32Df.png

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

    2N4PVI6.png

    нажимаем на кнопку создать файл и вводим:

    main.lua
    

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

    после этого откроется окошко с вводом кода, туда мы будем писать код
    frLLpGu.png

    также в VSC удобный встроенный терминал. для этого нажмите словосочетание

    CTRL + ` (апостроф)
    

    переведи курсор в верхнюю панель с кодом и готовься запоминать

    терминология

    переменная - ячейка с определенным названием и значением:

    название_переменной = значение_переменной
    

    переменные могут быть глобальными и локальными. локальные имеют перед названием слово “local”:

    local название_переменной = значение_переменной
    

    типы данных в Lua

    луа - динамически типизированный язык, поэтому тут вам не надо указывать типы, но, все же их необходимо знать для понимания языка и чтобы не допускать ошибок с этой темой

    string - строка

    моя_крутая_строка = "привет, мир!"
    

    строка ВСЕГДА обьявляется в кавычках!! это очень важно, если их не указать, компьютер будет искать переменную вместо строки, так как именно переменные указываются без кавычек!!!

    number - число

    мое_крутое_число = 5
    

    также число может быть дробью:

    моя_крутая_дробь_тоже_число = 5.5
    

    boolean - булево значение

    вы наверняка знаете “true” и “false” из учебников английского языка 5 класса 🙂

    мое_крутое_булево_значение = true
    

    и еще:

    мое_крутое_булево_значение = false
    

    если не знаете английский, true - правда, false - ложь

    nil - ничего

    nil - буквально ничего 🙂

    мое_крутое_ничего = nil
    

    function - функция

    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("функция не подошла не под одно условие!!")
    end
    

    elseif

    а что если может быть еще один вариант? если переменные равны, и нам надо напечатать текст именно о том, что переменные равны? в таком случае нам поможет условие 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)
    end
    

    for делает “шаги”, после каждого автоматически прибавляя 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
    end
    

    ipairs() - функция которая возвращает сразу два значения: индекс значения в массиве и само значение в массиве. перестает возвращать значения когда массив заканчивается, следственно, цикл тоже останавливается

    возвращать два значения легко - 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

    спасибо и удачи! новая часть выйдет как можно скорее

    вторая часть

    @msmr-0

  • сейчас отдохну и начну писать вторую часть, сообщайте насчет ошибок пожалуйста

  • тимиепТ тимиеп делает ссылку на эту тему
  • спасибо за лайки, мне очень приятно

  • приступаю ко второй части, завтра/может быть сегодня будет готово (у меня +4 от мск, поэтому скорее всего завтра)

Похожие темы