Форум портала о WarCraft Форум портала о WarCraft
порно чат

Вернуться   Форум портала о WarCraft > Вселенная WarCraft > World Editor > Статьи
Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Закрытая тема
 
Опции темы Опции просмотра
Старый 15.02.2010, 00:28   #1
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию JASS - Типы

JASS - Типы




Типы

В JASS есть система типов переменных, которая гарантирует правильность записи типов в выражениях (т.е., чтобы вы случайно не пробовали сложить двух юнитов). Есть несколько основных типов, которые встроены в движок (native), но пользователи могут объявлять (создавать) свои типы, которые будут являться подтипами этих самых основных типов. Массив любого типа также может быть объявлен.


Основные типы

integer - целочисленные переменные могут хранить числа в интервале от -2147483647 до 2147483647.

real - рациональные числа с плавающей запятой. Предполагают, что оно 32-битное и согласован со стандартом "IEEE Standard 754 Floating-Point standard" (кому-то это интересно?).

boolean - булины берут логические выражения true или false. Все проверки условий возвращают данные именно этого (часто называемого "логического") типа.

string - переменные типа строк содержат символы. У строки может быть значение null, но тогда её нельзя использовать (только дать ей значение).

handle - по сути это "указатель". Он ассоциируется с данными, которые храняться в памяти Warcraft III и не могут быть изменены напрямую (Прим. переводчика: это не совсем так). Все пользовательские типы унаследованы от handle. Например, тип unit подтип handle, который указывает на ту область памяти, где хранятся данные о юните. Любому типы, производному от handle, может быть присвоено значение null, что значит что переменная ссылается никуда.

code - функция может иметь code в параметрах. Это значит, что как аргумент функция берет обращение к другой функции... Параметр пишется следующим образомfunction func_name. Например, вот функция:
code:
function RunFunctionForAllPlayers takes code theFunction returns nothing

Будет вызвана вот так: RunFunctionForAllPlayers(function someFunction).
code может равняться null, что значит что она ассоциируется с никакой функцией (и не может быть использована в native функциях).


Пользовательские типы

Тип handle может быть "разветвлен", т.е., пользователи могут создавать новые виды переменных. Читайте раздел Глобальные определения для подроблностей. Все типы, используемые native функциями, определены в common.j.

Новый тип (new_type), который "расширяет" другой тип (parent_type), называют потомком (или дочерным) parent_type'а. Например, widget потомок handle, а unit потомок widget.

Любой тип считается предком самого себя. А тип a считается предком типа b, если b потомок какого-то типа c, предок которого также a (т.е., "родство" транзитивно). Грубо говоря, a предок b если есть точный путь идущий вниз от a до b в схеме типов. Например, если c расширяет a, d расширяет c и b расширяет d, тогда a предок b, также как c и d. Смотрите прикрепленный к этому посту рисунок.

Мы говорим что тип b подобен типу a, если a предок b. Если переменная типа b, а b подобен a, то этот тип и a и b. Например, тип unit является еще и widget'ом и handle'ом, так как unit подобен обоим.

Если у функции есть параметр типа a, то она может взять любой тип подобный a. Например:
code:
function DestroyWidget takes widget toDestroy returns nothing

Аргументом может быть unit, destructable, item или widget, т.к. все эти типы подобны widget. Однако, знайте что подобное наоборот не сработает. Если функция была объявлена как:
code:
function DestroyUnit takes unit toDestroy returns nothing

Аргументом должен быть только unit, но не widget (и подобные), так как widget - необязательно unit.
Прим. переводчика: писал бы я этот текст, я бы сказал немного по-другому: функция может взять любой тип, который является потомком "изначального" типа.


Массивы

Переменная любого типа может быть массивом, кроме code (code array невозможен). Читайте раздел Глобальные определения для подробностей.

Массивы иницилизируются с "пустыми" значениями (т.е., 0 для чисел, null для handle-подобных) и имеют ограниченные размеры. Каждая ячейка содержит данные объявленного типа и обращаться к ней следует стандартным образом (т.е., указывая номер ячейки в квадратных скобках). Например, my_array[10] - 11-ая ячейка массива my_array.
Прим. переводчика: не следует забывать, что первый элемент массива все-таки 0.

Однако, вы можете сохранять данные в ячейку с любым номером (от 0 до макс. положительного целого числа). Максисальное кол-во ячеек - JASS_MAX_ARRAY_SIZE = 8192, определено в common.j. На самом деле, массив больше напоминает разбросанную хэш-таблицу с ограниченным размером в 8192.
Прим. переводчика: слово "хэш" значит "случайные данные". Тут имеется в виду, что необязательно соблюдать порядок при заполнении массива.

Функции не могут брать массивы как аргумент, и не могут его возвращать. Массивам нельзя давать значения (т.е., использвовать set на переменную-массив). Например:
code:
...
unit array myUnits
unit array yourUnits
...
set myUnits = yourUnits // нельзя
set myUnits[0] = yourUnits[10] // можно

Автор: Raz
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума  
Старый 15.02.2010, 00:30   #2
VAV
Pandora Directive
 
Аватар для VAV
 
Регистрация: 04.09.2002
Адрес: Area 404
Сообщений: 3,611
VAV как роза среди колючек VAV как роза среди колючек VAV как роза среди колючек
Отправить сообщение для VAV с помощью ICQ
По умолчанию Ответ: JASS - Типы

Другие статьи:

Основы JASS.
JASS - Общие понятия.
Синтаксис JASS.
JASS - Библиотечные функции. Часть 1.
JASS - Библиотечные функции. Часть 2.
JASS - Операторы.
JASS - Выражения
JASS - Комментарии.
JASS - Функции
JASS - Типы
JASS - Заключение.
Faq по созданию рельефа.
Зачем так много триггеров?
Немного об оптимизации кода.
Текстовые триггеры
Создаем простейшие карты (карты для melee)
Событие с переменным периодом.
Познаем триггеры (Triggers)
Познаем регионы (locations)
Познаем переменные...
Отлавливаем двойной клик мышью.
Массивы и циклы в обычных и текстовых триггерах
Локальные переменные в Custom Text
Камеры, спецэффекты, карта, цвета, кэш...
Добавление своих функций в триггеры
Добавление своих моделей и др. в карту
Делаем очень большую карту...
Делаем огнемет.
Улучшенная версия огнемета...
Глюки worldeditor'a
Random с задаваемой вероятностью - аура.
__________________
Смотри подругому !

Последний раз редактировалось VAV, 12.08.2010 в 14:32.
VAV вне форума  
Закрытая тема


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +4, время: 03:23.

Design Developed by CompleteGFX
vBulletin® Version 3.6.7.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot