Константы и перечисляемые типы¶
Константы¶
Константы — это неизменяемые значения в программе. Используются для создания мнемонических имён для каких-либо "недвижимых" данных — например, математических констант вроде π или e.
Синтаксис схож с объявлением переменных, за исключением того, что практически всегда вместо типа указывается ключевое слово const — и ZScript сам подбирает подходящий тип данных:
const идентификатор_константы = значение;
// Примеры:
const playerMinSize = 3;
const playerMaxSize = 20;
const winString = "You win! Congratulations!";
const looseString = "You loose...";
const monsterXMultiplier = 4.444;
Quote
JSO_x: на простых значениях аналог #define в C/C++, а не const, как можно было бы подумать. На сложных и составных типах не работает, ZScript местами ограничен в самых неожиданных местах.
Перечисляемый тип¶
Он же "перечислимый тип", он же "перечисление", он же "enumerated type", изредка можно услышать "енумерат". Грубо говоря, это целочисленные константы в форме записи, удобной для перечислений. Почему удобной? Потому что есть автоматический инкремент (прибавление единицы) для следующего значения, если не указано что-либо другое. Почему константы? Ну... неизменяемые.
Объявляется перечисление с ключевого слова enum, после которого следует идентификатор типа и открывающая операторная скобка. Затем, через запятую, список целочисленных "констант" без ключевого слова const; в конце — закрывающая операторная скобка, как в блоке кода ниже.
Опциональность части синтаксиса
Во всех блоках кода ниже [Квадратные скобки] используются для того, чтобы обозначить необязательность написания того, что заключено внутри них.
enum имя_перечисляемого_типа {
имя1 [= значение],
[имя2 [= значение],]
[…]
}
// Пример:
enum WeekDays {
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6,
Sunday = 7 // На последней строке запятая возможна, но её допустимо не ставить.
}
Если значения не указаны, то берётся "0" для первого и "(+1 от предыдущего значения)" для последующих. Таким образом достигается полная автоматизированность — можно просто перечислить все нужные идентификаторы подряд (и затем даже не задумываться, какие у них значения).
Одинаковые числа для разных имён в перечислимых типах ZScript вполне законны.
Примеры:
// Номера стандартных цветов в текстовых режимах адаптера EGA
//(что-то, что позволит показать, собственно, перечислимость):
enum EGAColors {
EGA_Black = 0, // Он авто-инициализируется нулём, и на самом деле явно "0" можно не записывать.
EGA_DarkBlue, // "EGA_Black + 1" == 1;
EGA_DarkGreen, // "EGA_DarkBlue + 1" == 2;
EGA_Cyan, // "EGA_DarkGreen + 1" == 3;
EGA_DarkRed, // 4;
EGA_Purple, // 5...
EGA_Brown,
EGA_LightGray,
EGA_DarkGray,
EGA_Blue,
EGA_LightGreen,
EGA_LightBlue,
EGA_LightRed,
EGA_Pink, // ...
EGA_Yellow, // 14;
EGA_White // 15.
}
// Просто некие числа для демонстрации остальных возможностей перечисляемого типа.
enum ETestNumbers {
TN_One = 1, // 1;
TN_Two, // 2;
TN_Couple = TE_Two, // Также 2;
TN_Three, // 3;
TN_Four, // 4;
TN_Five, // 5;
TN_Ten = 10, // 10;
TN_Eleven, // 11;
TN_Twelve = TE_Ten + 2, // 12;
TN_Dozen = TE_Twelve // Тоже 12.
}