Lua підручник для початківців lua manual for beginners, two diverse developers - blog

Доброго вам дня!
Як і обіцяв починаю створювати деяку подібність підручника з Луа.

На чому звичайно ж з банального прикладу виведення в консоль «Hello world!», На Луа це дуже простий код:

print # 40; "Hello world!" # 41;

> Program example1.lua is running
Hello world!

Ось він, результат роботи! Тепер зупиняємо скрипт вибравши Debug -> Stop або натиснувши F6, до тексту дописати

> Program example1.lua is stopped

що означає що скрипт зупинений (тепер можна згорнути до самого низу це вікно, воно вилізе саме при наступному запуску). А ось зараз вже розберемо сам скрипт на запчастини, дізнавшись що в ньому означає кожен символ. Відразу скажу що заглиблюватися в фішки і різноманітні хитрощі написання скриптів я не буду, тому код йде в стандартному (в моєму розумінні) вигляді і містить обичне конструкції. І ще одне невелике відступ, якщо ви не володієте логікою, не можете скласти план роботи і продумати виконання самого скрипта, то краще і не братися, а вже якщо взялися - намагатися розібратися самому що й до чого, а не діставати не надто добрих дядьків програмістів, вони дуже сильно починають нервувати коли намагаються вам на пальцях пояснити що треба зробити і чому саме так, а ви в цей час нічого не розумієте або просто «тупите». Якщо все-таки впертість грає в вас і ви ще не закрили цей текст, тоді продовжимо. Продовжимо з ще одного важливого як мені здається відступу, полягає воно в тому, що тутешній матеріал - моє бачення, в тому числі і російської мови, а не тільки Луа. Будь-які зауваження з цього тексту будуть враховуватися, але постарайтеся не вступати в суперечку з-за якоїсь або не подобалася вам коми або конструкції в коді. Я не майстер Луа, але дещо вмію, про це і постараюся розповісти.

І знову продовжимо (обожнюю такі відступу, вони змушують і тебе і собесеніков тримати нитку розмови))), почнемо з того як виглядає виклик функції в Луа. Функція - якийсь набір інструкцій, що виконується за викликом. У функцію так само можуть передаватися аргументи (параметри), хоча це і не обов'язково, передані аргумент можна використовувати виключно всередині функції (про областях видимості змінних розповім пізніше). Припустимо, що у нас є якась функція SomeFunction, ось приклад її виклику без аргуменов:

SomeFunction # 40; # 41;

і з аргументами one і two, вони розділяються комами:

SomeFunction # 40; one, two # 41;

Тепер про наш коді, сподіваюся тепер видно що у нас є виклик функції print, що має один аргумент, яким є «Hello world!». Функція print - стандартна (базова) функція, надана Луа, вона виводить дані в стандартне вікно виведення, ця функція може приймати будь-яке число аргументів будь-якого типу, виводячи їх один за одним в перетвореному в рядок вигляді.

А зараз настав час поговорити про типи змінних, це один із значущих моментів в программірваніі на Луа. У цій мові існують такі типи даних (цей і деякий далі матеріал запозичений з сайту ilovelua.narod.ru):

nil - нічого, позначає відсутність будь-якого значення
boolean - булевська змінна, приймає значення true або false
number - числовий тип
string - строковий тип
function - функція
userdata - спеціальний тип даних, що дозволяє зберігати в Lua дані з С (фактично це покажчик void *)
thread - співпрограми Lua (дозволяє організувати превдо-многопоточность)
table - таблиця - асоціативний масив (набір пар ключ-значення), причому в якості і ключа і значення може виступати будь-який тип даних

Lua - мова з динамічною типізацією, тобто тип змінної встановлюється заздалегідь, як, наприклад, в С, а в момент присвоєння змінній значення. приклади:

var = true - var - змінна типу boolean
var = 1 - тепер var число
var = "string" - тепер var рядок
var = function # 40; a, b # 41; return a + b end - а тепер var функція, яка приймає два параметри і повертає їх суму
var = coroutine.create # 40; var # 41; - а тепер var співпрограми
var = # 123; # 125; - а тепе var таблиця
var = nil - а тепер ... тепер var відсутня, перменаая знищена

А тепер після цієї маленької довідки скажіть на милість до якого типу належить «Hello world!»? Правильно, це рядок, якщо ви думаєте інакше - читаємо все заново. Ось і весь розбір польотів, вийшло що в нашому простому скрипті є один виклик стандартної функції Луа що виводить в консоль будь передані їй параметри, перетворюючи їх в рядок, ми передаємо фукнции один аргумент, який є рядком «Hello world!», Яку ми і бачимо в консолі після запуску скрипта.

Моя вам порада: якщо не зрозумілий сенс мовних конструкцій краще не пропускати цей момент і постаратися зрозуміти що написано в цій простенькій довідці, інакше можна втратити важливі моменти і в найпростішому моменті в скрипті сісти в калюжу.

Трохи потішившись переходимо до як мені здається важливою довідці, слід прийняти її як належне. У Луа ми можемо оголошувати змінні, які можуть бути будь-яким з типів Луа, але так само є зарезервовані імена змінних, ними користуватися не можна, це призведе до порушення роботи вашого скрипта! Ось повний перелік:

and break do else elseif
end false for function if
in local nil not or
repeat return then true until while

Так називати змінні не можна тому що ці слова використовуються в конструкціях мови Луа. Давайте домовимося далі що писати назви змінних ми будемо відповідно до угорської нотації, тобто називати змінні відповідно до їх типом, починаючи змінну з маленької літери, що позначає тип змінної, а вже далі писати саме ім'я нашої змінної:

s - string
i - integer
b - boolean
h - handle
t - table
mt - metatable

Приклади: sData, iShareSize, bConnected, hFile, tTable, mtTable. Прімечаніце: тут під handle мається на увазі тип userdata.

Тепер довідка по спец. символам в рядках Луа, ось цитата з лексичних угод:

\ T - табуляція, застосовується для більш красивого виведення інформації
\\ - так екранується сам слеш щоб вивести його як \, в іншому випадку буде помилка
\ N - перенесення рядка
\ R - повернення каретки
\ "- лапки
\ '- одинарна лапка

Для розриву рядків на різних операційних системах використовується різний поєднання символів розриву рядків і повернення каретки:

\ R \ n - windows
\ N - * nix
\ R - macOS

Поки все, думаю це вам ще треба обміркувати, правда на практиці все набагато зрозуміліше, спробуйте самі зробити висновки через функцію print () і пограти з типами, до речі, функція type () повертає тип переданої їй змінної, написавши print (type ( «» )) ми отримаємо string

Схожі статті