Типы, значения и выражения в Lua

{title}

Lua - это динамический язык, когда речь идет о типах данных и их значениях, то есть на момент создания переменной не существует каких-либо определений и указывается, что это строка, число или даже логическое значение.
Выражения идут рука об руку со значениями, они позволяют нам выполнять с ними операции, которые могут варьироваться от арифметических, реляционных и даже условных операций, чтобы придать динамизм нашим программам, но прежде чем перейти к выражениям, давайте посмотрим типы значений, которые у нас в Lua и в какой форме они работают на языке.

Типы и значения


В Lua каждое значение загружает свой собственный тип, в котором мы можем найти восемь различных типов: nil, boolean, number, string, userdata, function, thread и table, где с помощью функции type () мы можем узнать имя типа данное значение Давайте посмотрим на простой пример того, как Lua интерпретирует это в соответствии с type () :

{title}


Как мы видим, тип определяется значением, которое загружается, и назначенная функция помогает нам узнать, что это такое, мы можем видеть, что даже в последнем случае переменной H результат является строкой, и это потому, что функция type () всегда является строкой, Поскольку мы увидели, как Lua интерпретирует типы данных, давайте подробно рассмотрим каждый из них:
ноль

Это тип значения, основное свойство которого должно отличаться от других значений. Как мы видели в последнем уроке, глобальная переменная по умолчанию имеет значение nil, и если мы хотим устранить его, мы присваиваем это значение, мы можем даже использовать его для представления отсутствия полезного значения.
логический

Булевы значения, как и в остальных языках программирования, имеют два значения, true и false, но в отличие от других языков, этот тип данных не имеет общего домена над условиями, поскольку любой из них может представлять условие.
номер

Этот тип данных представляет как целые числа, так и десятичные числа. Lua не имеет тип целочисленного значения и не нуждается в нем, поскольку Lua может представлять любое 32-разрядное целое число без проблем с округлением, но самое интересное в языке - это то, что мы можем скомпилировать его для использования другого типа, такого как длинные целые числа или числа с плавающей запятой, что весьма полезно для случаев, когда оборудование не поддерживает десятичные дроби.
строка

Строки в Lua - это последовательность символов, они являются неизменяемыми значениями, то есть мы не можем изменить символ в строке. Они обрабатываются автоматической памятью языка, а также остальными объектами, и присвоение строки может быть с двойными или одинарными кавычками.
стол

Таблица типов данных реализует ассоциативный массив, который представляет собой массив, который можно индексировать не только с помощью чисел, но и со строками или любым другим языковым значением, кроме nil. Таблицы не имеют фиксированного размера, поэтому мы можем включать столько элементов, сколько мы хотим, и с ними мы можем представлять модули, пакеты и объекты одинаково. Наконец, для его создания это так же просто, как использовать скобки {} при инициализации таблицы.
функции

Функции в Lua имеют довольно своеобразное поведение, поэтому мы можем сохранять их в переменных, передавать их в качестве аргументов другим функциям и возвращать их даже в качестве результатов, где Lua может вызывать эти функции, написанные как на самом языке, так и на C.
Userdata

Тип данных userdata позволяет хранить произвольную информацию о L в переменных Lua и не имеет предопределенных операций в Lua, за исключением тестов присваивания и равенства, где основная функция этого типа состоит в представлении новых типов как таковых, созданных приложение или библиотека, написанная на C.
Поскольку мы видим, что типы не сильно расходятся во мнениях относительно того, что мы можем найти в современных языках, но несомненно то, что простота их представления намного выше, поэтому давайте посмотрим, какова роль выражений и как мы можем использовать их с нашими ценности.

Арифметические операции


Арифметические операции чрезвычайно важны для любой программы, и важно знать, как с ними обращаться и какие ограничения могут существовать в используемом нами языке. Lua поддерживает обычные операторы, к которым мы привыкли: сложение, вычитание, умножение, деление, экспонента, процент и отрицание.
Давайте посмотрим на простой код, где мы демонстрируем использование некоторых операторов Lua :
 x = 8 + 5 y = 9 - 2 отпечатка (x * y% 0, 01) 
Мы используем сложение, вычитание и деление на 2 в результате операции умножения, давайте посмотрим, как интерпретатор реагирует, когда мы выполняем наш код с консоли:

$config[ads_text5] not found

{title}


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

Реляционные операторы


Lua, как и другие языки, дает нам отношения операторов, такие как больше чем>, меньше чем <, меньше или равно =, равно равно == и отрицание ~ =. Мы видим, что единственное, что, возможно, отличается, это отрицание, но после того, как мы привыкнем, проблем с его использованием не возникнет.
Все эти операторы могут возвращать true или false, где мы можем даже применить оператор равенства и оператор отрицания к двум значениям. Эти сравнения Lua делают их в зависимости от типа в дополнение к другим факторам, давайте посмотрим в следующем коде, где сравнение выполняется на основе того же объекта:
 a = {}; топор = 1; ay = 0 b = {}; bx = 1; по = 0 с = а 
Где, если мы сравним их, результат операции даст нам, что a равно ac, но a отличается от b, это связано с тем, что это один и тот же объект. Кроме того, мы должны быть очень осторожны при сравнении разных типов, так как, например, 6 отличается от «6», и если мы сделаем что-то вроде «3» <«8», Lua выдаст ошибку, так как мы смешиваем строки.

Логические операторы


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

конкатенация


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


Как мы видим в первом случае, операция выполняется без каких-либо проблем, а во втором случае у нас есть числа, Lua автоматически преобразует их в строку. Важно помнить, что строки являются неизменяемыми, поэтому эта операция всегда создает новую строку, не внося изменений в ее операнд.

конструкторы


Наконец, у нас есть конструкторы, которые являются выражениями, которые позволяют нам создавать и инициализировать таблицы. Эта характеристика уникальна для Lua и является одним из ее самых универсальных и мощных механизмов. Мы можем без проблем использовать пустой конструктор, используя только квадратные скобки {}, которые создадут пустую таблицу как таковую. Они также могут инициализировать расположения или списки, давайте рассмотрим пример:
 дни = {"воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"} 
Здесь мы создаем список с днями недели, и если мы хотим получить доступ к его элементам с указанием индекса, который у нас есть, например, получить четверг будет индексом 5 или воскресенье номер 1, так как Lua не инициализируется в ноль, как и остальные языки, давайте посмотрим, как это выглядит, когда мы запускаем его на нашей консоли:


Мы также можем создать наши собственные ассоциативные массивы типа значения ключа:
массив = {x = 26, y = 67}
Но важно, чтобы для доступа к его значениям мы делали ссылку на индекс с двойными кавычками остатка, мы получим значение nil, давайте посмотрим на нашу работу в интерактивной консоли:


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