Начала работы с NodeMCU. Учим LUA.

Опубликовано bondrogeen

 

Lua — язык с динамической типизацией (переменные получают типы «на лету» в зависимости от присвоенных значений). Писать на нем можно как в императивном, так и в объектно-ориентированном или функциональном стиле.

1. Переменные.

Именами (идентификаторами) переменных в Lua могут быть любые последовательности из букв, цифр и символа подчеркивания, начинающиеся не с цифры.

Язык Lua различает регистр символов, поэтому abc, Abc, ABC являются различными именами.

Имена которые зарезервированы языком Lua и не могут использоваться в именах переменных: and, break, do, else, elseif, end, false, for, function, if, in, local, nil, not, or, repeat, return, then, true, until, while.

Когда возможно, рекомендуется использовать локальные переменные вместо глобальных. Это позволит избежать «засорения» глобального пространства имён и обеспечит лучшую производительность (поскольку доступ к локальным переменным в Lua выполняется несколько быстрее, чем к глобальным).

В Lua допускается так называемое множественное присваивание,  когда несколько переменных, находящихся слева от оператора присваивания, получают значения нескольких выражений, записанных справа от оператора присваивания:

Если переменных больше чем значений, «лишним» переменным присваивается nil.

Множественное присваивание можно использовать для обмена значениями между переменными:

Переменные в Lua могут быть глобальными и локальными. Если переменная не объявлена явно как локальная, с использованием ключевого слова local, она считается глобальной. Если значение переменной не присвоено, переменная содержит nil.

 

Получить тип переменной.

Тип значения, сохранённого в переменной, можно выяснить при помощи стандартной функции type.

Преобразовать тип переменной.

Lua при необходимости автоматически преобразует числа в строки и наоборот. Например, если строковое значение является операндом в арифметической операции, оно преобразуется в число. Аналогично числовое значение, встретившееся в том месте, где ожидается строковое, будет преобразовано в строку.

2.Циклы и условия.

Оператор for предназначен для организации циклов.

Оператор while предназначен для организации циклов с предусловием

— Оператор repeat предназначен для организации циклов с постусловием.

3. Функции.

Типичное определение функции выглядит следующим образом.

Функции могут как принимать несколько значений так и возвращать, Лишние получатели принимают значение nil, а лишние значения игнорируются.

Функции могут быть локальными и глобальными.

Функция может принимать переменное число параметров. Для этого список аргументов в определении функции должен заканчиваться многоточием (…). Все значения, скрытые за многоточием, передаются функции через локальную таблицу arg. Поле n этой таблицы содержит число переданных аргументов. Поэтому значения переданных в функцию аргументов можно получить, например, так:

Возникают ситуации, когда функция возвращает несколько значений, а переменной требуется присвоить только одно из них.  Общепринятым способом является использование переменной с именем «_» (символом подчёркивания).

 

 

Функция обратного вызова «callback». Коллбэк – это функция, которая должна быть выполнена после того, как другая функция завершила выполнение.

4. Таблицы.

Таблица единственная составная структура данных в Lua представляет собой ассоциативный массив.

Таблицу можно заполнить значениями непосредственно при создании.

В случае строковых ключей квадратные скобки (и двойные кавычки) можно не указывать.

Если необходимо создать таблицу, поля которой также являются таблицами, это можно сделать следующим образом.

Массив — это таблица, ключами которой являются целые положительные числа. Чтобы создать массив, достаточно перечислить в фигурных скобках значения его элементов.

(!) В Lua массивы индексируются, начиная с 1, а не с 0, как в некоторых языках программирования.

При работе с массивами следует учитывать важную особенность оператора #. Этот оператор рассматривает любой неинициализированный (имеющий значение nil) элемент массива как признак конца массива. Таким образом, для корректной работы оператора # необходимо, чтобы массив не содержал «пустых» элементов.

Для перебора всех элементов таблицы обычно используют оператор for совместно со стандартной функцией pairs.

Для перебора массива,  удобнее использовать другую стандартную функцию  ipairs.

4.1 Метатаблицы и метаметоды.

4.2 Таблицы как класс и наследования.

5. Модули.

 

 

 

 

 

 

Рубрики: NodeMCU

1
Отправить ответ

avatar
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Solderman Recent comment authors

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Subscribe  
newest oldest most voted
Notify of
Solderman
Гость
Solderman

Все отлично, только не хватает побитовых операций.