Сейчас мы поподробнее рассмотрим, что такое переменные. Это обязательно нужно знать при переходе с триггеров на Jass или сразу при программировании на Jass.
Переменные - это области памяти, которые могут хранить значения. Они играют важную роль в программировании, т.к. позволяют программистам писать программы более удобно. В переменные можно сохранять почти любой вид данных. Они позволяют вам хранить боевых единиц, выигрывающего игрока, тип боевой единицы или даже текстовые строки. Сохранение информации в переменные позволяет вам использовать их позже. Например, вы хотите записать в переменную, сколько боевых единиц убил игрок. Тогда вам понадобится переменная типа "целочисленная" (integer). Также можно записать игрока, убившего самое большое количество боевых единиц на протяжении игры, используя переменную типа "игрок" (player). В Jass существует на порядок больше типов переменных, чем в триггерах, поэтому на их изучение придётся потратить время.
Советы о том, как лучше называть переменные: - Присваивайте переменной имя, которое что-либо означает. Названия из одной буквы выглядят глуповато. Согласитесь, назвать переменную "index" лучше, чем "i", название "count" лучше, чем "c", а "name" лучше, чем "n".
- Не начинайте имя переменной с числа. Оно может содержать числа, но первым символом должна быть буква.
- Можно использовать в имени переменной нижнее подчёркивание, но никак не пробел. Использование таких подчёркиваний является хорошим разделением слов, но лучше не начинать имя с такого подчёркивания.
- Не давайте имена, которые очень похожи на имена других переменных.
- Не давайте переменным имена, которые похожи на ключевые слова или функции. Например, не называйте переменную типа "целочисленная" именем "int" или переменную типа "строка" именем "string". Это может быть причиной некоторых недоразумений при создании триггеров.
В Jass существует два "подразделения" переменных - локальные и глобальные. Сначала рассмотрим плюсы и минусы каждого "подразделения".
Локальные: + Сохраняют своё значение после ожиданий
+ Создаются уникально при каждом запуске триггера (не перезаписываются после второго запуска триггера)
+ Легко регулируемы
+ MUI - Действуют только в пределах функции, где их задали. Глобальные: + Действуют во всех триггерах карты
+ MPI (Хоть и массивным способом) - Есть риск потерять значение после ожидания (Если триггер запустится во время ожидания, переменная перезапишется).
- Каждый раз нужно писать приставку udg_
- Немного неудобны по сравнению с локальными. Напрашивается такой вывод - лучше по возможности отказываться от глобальных переменных и использовать только локальные (Исключение - хеш-таблицы, служащие кластерами для значений), т.к. они дают гарантию того, что значение сохранится.
Итак, приступим к рассмотрению типов переменных более подробно.
Локальные переменные. Локальные переменные объявляются строго до вызова каких-либо функций и прочих действий. Объявляются они так:
local <тип> <название>
= <значение>
Задание значения можно опускать, когда его невозможно задать сразу, например, в синтаксисе объявления массивов:
local <тип>
array <название>
Существует такое понятие, как утечка памяти.
Утечка памяти - процесс неконтролируемого уменьшения объёма свободной оперативной памяти (RAM) компьютера, связанный с ошибками в работающих программах, вовремя не освобождающих ненужные уже участки памяти, или с ошибками системных служб контроля памяти. Возникают они тогда, когда создающиеся объекты, которые становятся не нужны, не удаляются и не обнуляются.
Локальные и глобальные переменные имеют единый принцип обнуления. Смотрите его ниже.
set <название> =
null ВАЖНО: Существуют типы переменных, которые обнулять не надо. Это те типы, которые не наследуются в конечном счёте от handle. Это типы
integer, real, string, boolean, которые сами являются базовыми (в общем, все базовые типы кроме handle обнулению не подлежат).
Задаются переменные по разному, в зависимости от типа. Рассмотрим принципы задания переменных типов
integer, real, string, boolean.
integer задаётся очень просто. Для того, чтобы задать её, следует поступить так:
set <название> = <целое число>
real задаётся чуть сложнее, чем integer. Для того, чтобы задать переменную типа real, следует поступить так:
set <название> = <целое число или десятичная дробь>
Тут есть хитрость касательно оптимизации задания переменной данного типа. Если в десятичной части у вас 0, а в целой - число, большее нуля, то вместо нулей в десятичной части можно написать просто точку. К примеру, если целая часть равна 24, то писать её надо так:
24. Если же в целой части 0, а в десятичной, допустим, 35, то писать надо так:
.35 В случае, если число равно нулю, то можно отбросить написание любой из частей, но
никак не обеих.
boolean имеет два значения - true (истина) и false (ложь). Либо то, либо то. Принцип задания такой:
set <название> = <true или false или логическое выражение>
string задаётся совсем легко. Смотрите ниже:
set <название> = "строка"
Список типов переменных.
Способность - сохраняет тип способности, например "Стремительность" или "Кровожадность".
Тип атаки - сохраняет тип атаки. (Заклинание, Герой, Сила Тьмы и.т.д.)
Логическая - сохраняет значения "Да" или "Нет".
Заклинание - сохраняет тип заклинания, например "Замедление" или "Яд". Не является способностью.
Объект камеры - сохраняет камеру, которая была поставлена на карте.
Звуки боя - сохраняет тип звуков боя у боевой единицы. (Лёгкий металлический удар (рубящий), тяжёлый металлический удар (режущий) и.т.д.)
Тип урона - сохраняет тип урона боевой единицы. (Огонь, холод, молния, отравление и.т.д.)
Декорация - сохраняет декорацию, которая была поставлена на карту или создана триггерно.
Разрушаемый объект - сохраняет тип декорации.
Условие поражения - сохраняет последнее созданное вами условие поражения.
Диалог - сохраняет последнее созданное вами окно диалога.
Кнопка - сохраняет последнюю созданную вами кнопку для окна диалога.
Тип эффекта - сохраняет тип эффекта. (Графика цели, графика мага, графика выстрела и.т.д.)
Плавающий текст - сохраняет последний созданный вами всплывающий текст.
Буфер игры - сохраняет последний созданный вами кэш.
Скорость игры - сохраняет скорость игры, также текущую скорость игры или похожее значение.
Ссылка - сохраняет ссылку на любой вид данных.
Хэш-таблица - сохраняет последнюю созданную вами хэш-таблицу.
Изображение - сохраняет последнее созданное вами изображение.
Тип изображения - сохраняет тип изображения. (Текстура земли, выбор, индикатор и.т.д.)
Целочисленная - сохраняет целое число. Не поддерживает десятичные дроби.
Предмет - сохраняет предмет, который уже существует в карте.
Класс предмета - сохраняет класс предмета.
Тип предмета - сохраняет тип предмета.
Таблица рекордов - сохраняет последнюю созданную вами таблицу рекордов.
Молния - сохраняет последнюю созданную вами молнию.
Тип молнии - сохраняет тип молнии. (Похищение здоровья, похищение маны, вампиризм и.т.д.)
Меню паузы - сохраняет последний созданный вами мультибоард.
Порядок - сохраняет приказ, который может быть отдан боевой единице. (Атаковать, двигаться, спрятаться и.т.д.)
Игрок - сохраняет любого игрока.
Цвет игрока - сохраняет цвет любого игрока.
Группа игроков - сохраняет группу игроков для дальнейшего использования.
Точка - сохраняет координату Х\Y на карте.
Тип проходимости - сохраняет тип проходимости. (Ходьба, строительство, полёт и.т.д.)
Задание - сохраняет последнее созданное вами задание.
Условия задания - сохраняет последнее созданное вами задание.
Раса - сохраняет расу. (Альянс, орда и.т.д.)
Реальная - сохраняет число. Поддерживает десятичные дроби.
Область - сохраняет регион, который расположен на карте.
Звук - сохраняет звук, который был импортирован или изначально существовал в игре.
Тип звука - сохраняет тип звука.
Спецэффект - сохраняет последний созданный вами спецэффект.
Строка - сохраняет группу символов, число или текст.
Тип технологии - сохраняет тип улушения, которое может быть исследовано.
Деформация рельефа - сохраняет последнюю созданную вами деформацию рельефа.
Рельеф - сохраняет форму кисти рельефа (круг или квадрат).
Тип ландшафта - сохраняет текстуру ландшафта. (Летний лордерон: почва, Ашенваль: трава и.т.д.)
Таймер - используется для создания таймера. Каждыйт таймер имеет переменную.
Окно таймера - сохраняет последнее созданное вами окно таймера.
Триггер - сохраняет любой созданный вами триггер.
Текстура земли - сохраняет последнюю созданную вами текстуру земли.
Тип текстуры земли - сохраняет тип текстуры земли.
Боевая единица - сохраняет боевую единицу.
Отряд - сохраняет группу боевых единиц.
Тип объекта - сохраняет тип объекта.
Модификатор видимости - сохраняет последний созданный вами модификатор видимости.
Погодный эффект - сохраняет последний созданный вами погодный эффект.