Типы данных. Литералы. Константы
В этой статье мы рассмотрим фундаментальные понятия, которые так или иначе присутствуют в Sanny Builder.
Начну статью о понятии
тип данных
. В своей сути тип являются некой категорией для множества значений; группировкой значений по категории (типу). Скриптинг SCM на даёт нам особой свободы в плане выбора, поэтому мы можем сразу определить доступные типы. Всего их два:- Числа
- Строки
Эти типы в свою очередь делятся ещё на дополнительные подтипы:
Строки | Имя типа | Пример |
---|---|---|
Короткая | string | 'STRING' , 'HELLO' |
Длинная | long string | "MY_STRING" , "WMYSTERIO" |
Числа | Имя типа | Пример |
---|---|---|
Целые | int, integer | 10 , 0 , -100 , 0xAB , -0xAF , 0b01101 |
Вещественные | float | 6.0 , 0.0 , -20.5 |
Другие | Имя типа | Пример |
---|---|---|
Булево | bool | True , False |
ID модели | - | #ADMIRAL , #BUFFALO |
Метки | - | @LABEL |
... | ... | ... |
Таблица типов
Другие
являются скорее полезными или косметическими; и более привычными по содержанию для опытных программистов. Значения этих типов в конечном итоге превращаются в целые числа. Эта таблица может быть дополнена в будущем, но основная суть не изменится.Колонки
Пример
демонстрируют способ распознать или создать значение некого типа. Сами значения всегда являются фиксированными и неизменными для скриптера (ноль всегда будет нулём и т.п.). Для такой особой формы записи существует даже отдельный термин — литерал; он же константа без имени.Особое внимание стоит обратить на литералы строк. Их содержимое обрамлено кавычками двух видов:
'
и "
. Первый вид строк (короткие) имеет ограничение на максимальную длину символов, а именно до 15
. Второй вид (длинные) не имеют прямого ограничения на длину, но само ограничение устанавливает конкретный опкод и смотреть максимальную длину стоит исходя из его описания или банальными тестами. К слову, короткие строки, которые я встречал в оригинальных мейнах, всегда не больше 7 символов включительно. Я рекомендую придерживаться именно этого ограничения.Также я хотел бы обратить внимание на разницу между формами записи целых и вещественных чисел. Хоть в математике
2.0
и 2
являются одинаковыми по значению, но в программировании это не всегда так. Исторически так сложилось, что вещественные числа (числа с "плавающей" запятой) кодируются и обрабатываются на уровне типа по другому принципу, поэтому и требуют особой формы с обязательной точкой для разделения целой части числа от дробной.Кроме понятной формы целых чисел, есть ещё их специализированные литералы, которые позволяют записать число как в шестнадцатеричной системе счисления (
0xAB
, -0xAF
), так и в бинарной (двоичной) системе счисления (0b01101
).Начнём с определения. Константа — это некое фиксированное значение, которому присвоено имя. Это имя, как и его значение, не может быть изменённым после его объявления.
Константы помогают лучше контролировать часть кода. В основном из за того, что они используются непосредственно в коде один или множество раз, тогда как изменения значения константы происходит в одном месте.
Объявляются констант ы в блоке
const ... end
, а синтаксис заполнения такой:ИмяКонстанты = Значение
Для примера давайте создадим простой блок с константой, которая будут символизировать количество денег:
const
MONEY_VALUE = 100
end
Теперь когда SB будет компилировать код, то он автоматически заменит
MONEY_VALUE
на число 100
. Кроме числа туда можно записывать и другие литералы. Плюс есть возможность записать в качестве значения ещё и свойства классов:MONEY = Player.Money($PLAYER_CHAR)
Конечно такую запись я никогда не использовал и не планирую, но могу только констатировать, что это возможно. Давайте лучше рассмотрим фрагмент кода простого скрипта с использованием констант:
const
MONEY_VALUE = 100
MONEY = Player.Money($PLAYER_CHAR)
end
MONEY += MONEY_VALUE
MONEY += MONEY_VALUE
В результате игроку дадут 200 баксов (дважды по 100). При компиляции
MONEY
будет заменён на Player.Money($PLAYER_CHAR)
а MONEY_VALUE
— на 100
, так что этот скрипт станет идентичным этому:Player.Money($PLAYER_CHAR) += 100
Player.Money($PLAYER_CHAR) += 100
В примере кода константы могут показаться не целесообразными из за наличия дополнительного блока. Однако ценность существенно возрастает в более крупных проектах, где кода достаточно много и он постоянно разрастается.
Константам лучше задавать запоминающиеся имена. Регистр может быть любым, но я рекомендую использовать название в верхнем регистре.
Автор: wmysterio
, которые присутствуют в скриптинге.
В этом уроке мы познакомимся с типами данных в SCM-скриптах и типами переменных. Также будут рассмотрены арифметические операции над числами.
Редактирование main.scm. Переменные (Часть 1)||wmysterio|wmysterio||||Вот так, понемножку, мы подошли к переменным. Что же это такое? Если образно представить, то можно сказать, что это ящик, в котором можно что то хранить. В потоках мы можем использовать много таких ящиков ( но не нужно забывать о лимитах ). Эти ящики называются переменными.
Так что же именно мы можем хранить? Давайте рассмотрим несколько типов данных:
Тип данных | Пример | Text |
---|---|---|
| | |
1 | Целое число | 1, 0, -100 |
| | |
2 | Дробное число | 6.0, 0.0, -20.5 |
| | |
3 | Короткая строка ( максимум 7 символов) | 'STRING', 'HELLO' |
| | |
4 | Длинная строка ( максимум 15 символов) | "MY_STRING", "RU-SCRIPT" |
| | |
× **Примечание:** Все строки не имеют пробелов! В место них, как правило, пишется значок **_**
Отличаются 3-й и 4-й тип тем, что они имеют свои ограничения по длине, в использовании, и пишутся они в разных скобках.
Естественно для этих типов есть свои правила, но запомнить нужно только то, что выполнять операции можно только между данными одинакового типа. Иначе результат будет неправильным. Кстати, насчёт операций... Давайте рассмотрим, что же можно делать с числами:
Операция | Описание |
---|---|
| |
+= | Сложение |
| |
*= | Умножение |
| |
/= | Деление |
| |
-= | Вычитание |
| |
Приведу примеры этих операций:
Правильно | Не привильно |
---|---|
| |
2 += 2 | 22.5 += 7 |
| |
0.25 *= -0.1 | 5 *= 3.4 |
| |
220 /= 5 | 32.0 /= 4 |
| |
33.3 -= 1.5 | 88 -= -55.5 |
| |
× **ВАЖНО:** Делить на 0 и на 0.0 соответсвтенно нельзя!× **ВАЖНО:** Мы не можем выполнять арифметические операции между числами и строками, и наоборот - между строками и числами!
Вот, собственно, основные правила арифметических операций над числами. Правда записываются они в иной форме, так как что в место чисел слева у нас будут переменные! Думаю самое время рассказать о них.
Каждый человек имеет имя. Например, Ваня, Вася, Дима и т.п. Также имеют имена и наши переменные. Что бы создать переменную, нужно выполнить небольшую операцию: поставить знак доллара $ и ввести имя.
× **Примечание:** Имена должны состоять только с латинских символов и не иметь пробелов! Допускаются ещё целые положительные числа и символ **_**
Для примера, напишем несколько:
$WANYA
$WASYA
$DIMA
Итак, мы научились писать имена переменных. Их можно использовать во всём мейне и использовать во всех потоках. Такие переменные называю глобальными. Но есть и другие переменные, так званые - локальные - они тоже имеют имена, только, в отличии от глобальных, имена состоят только с положительных целых числел, а в конце имени стоит знак собаки электронной почты ( читается как "эт" ): @. Для примера, напишем несколько таких:
Для строк синтаксис написания немного другой:
Глобальные строки | Text |
---|---|
| |
v$WANYA | Можно записать только строку с длинной в 15 символов, то есть с кавычкой **"** |
| |
s$WANYA | Можно записать только строку с длинной в 7 символов, то есть с кавычкой **'** |
| |
Локальные строки | |
| |
Можно записать только строку с длинной в 15 символов, то есть с кавычкой **"** | |
|