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

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

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

JASS - Операторы.




Операторы

В теле функции содержаться операторы, каждый на новой строке (Прим. переводчика: как уже говорилось, их может и не быть, также как выражений / локальных переменных). Этот раздел расскажет вам, что делает каждый оператор.


Set

code:
set variable = expression // (1)

set array_variable[index] = expression // (2)


Оператор set дает переменной новое значение. В первом случае, переменная простая (не-массив). Тип выражения должен совпасть с объявленным типом переменной.

Во втором случае, переменная - массив. index может быть любым выражием, которое вернет integer, которое и будет номером запрашиваемой ячейки. Выражение должно совпасть с типом массива. Т.е., если массив был объявлен как unit array, ты тип выражения должен быть unit.


Call

code:
call func_name(arguments)


Оператор call вызывает функцию (пользовательскую или native). arguments[/color] это разделенный запятыми список выражений, которые должны передаться функции (конечно, в согласии с объявленными в функции параметрами). Если в объявлении фунции написано что она "берет" [font=courier]nothing, то мы так и оставляем скобки пустыми (например, call func_name()). Как уже говорилось, выражения должны передаваться в согласии с объявленными параметрами функции. Например:
code:
function MakeUnitsDance takes region where,
integer num, string nameOfDance returns nothing

Может быть вызвана вот так:
code:
call MakeUnitsDance(GetTriggeringRegion(),
numGrunts*2, "salsa")
// Или
call MakeUnitsDance(myRegion,
100, MyChooseDanceFunction())
// и т.д. и т.п.

Возвращаемое значение игнорируется.


If Then Else

code:
if predicate then
statement
statement
...
elseif predicate then
statement
statement
...
elseif predicate then
...
else
statement
statement
...
endif

Оператор if-then-else, это "лесенка" условий которая занимает много строк. Каждое выражение-условие (predicate) проверяется в определенном порядке - сначало if, потом следующий elseif и т.д.. Каждое выражение должно вернуть boolean. Если первое условое верно, то выполняются его операторы, при этом все остальные условия и их блоки игнорируются.

Если ни одно из условий не вернуло true, тогда иницилизируется else. Может и вообще не быть elseif'ов, также как и else'ов (если они запрашиваются, то ничего не происходит). Например:
code:
// (1)
if predicate then
...
elseif predicate then
...
endif

// (2)
if predicate then
...
else
...
endif

// (3)
if predicate then
...
endif


Loop

code:
loop
statement
statement
...
endloop

Оператор loop содержит другие операторы, которые запускаются по несколько раз. Когда один "проход" заканчивается, все начинается заного с начало цикла.

Чтобы выйти из цикла, один из операторов должен быть exitwhen. Возможны и бесконечные циклы (который никогда не выходит; например, основной цикл в AI-скрипте).


Exitwhen

code:
loop
...
exitwhen expression
...
endloop

Оператор exitwhen используется в цикле. Выражение (expression) должно вернуть boolean. Если вернется true, то цикл сразу же выходит на том месте, где стоит exitwhen. Он может быть где угодно: в блоке if-then-else, в цикле... Могут быть даже несколько exitwhen'ов в одном цикле. Например:
code:
local integer iterations = 10
loop
if DidTheThingEnoughTimes() then
call DisplayText("Exiting Early")
exitwhen true
endif
call DoSomething()
set iterations = iterations - 1
exitwhen iterations == 0
endloop


Return

code:
return // (1)
return expression // (2)

Оператор return выходит из данной функции, и возвращается к функции которая её вызвала на ту её точку, которая следует сразу за вызовом. Если функция объявлена так, что она должна что-то вернуть, то return надо писать обязательно с выражением, как в примере 2. Конечно, тип выражения должен совпасть с объявленным типом. В функции может быть несколько return'ов. Если, например, у вас функция "развлетвляется" (с помощью if-then-else можно сделать), она должна дойти до return'а. Если фунция ничего не возвращает, то return ставить не обязательно - фукнция все равно выйдет когда дойдет до конца. Однако, если вы хотите выйти, например, при каком-то условии выйти из функции, то можно воспользоваться return'ом.

В настоящий момент, возвращаемое значение должно всего лишь совпасть по типу с основным типом объявленном в функции (если не понятно, приведу пример: если объявленный тип unit, то возвращаемое значение должно только быть подобным handle). Это самый настоящий баг в интерпретаторе. Однако, учитывая что этот баг используется в JASS коде самих Близзард, то это не случайность.
Прим. переводчика: понятия не имею где они нашли случай где близзард его используют... Может, кто-то знает? o_O


Debug

code:
debug statement

Операторы set, call, if then else и loop могут быть с префиксом debug. Это значит что он запускается только если включен внутре-игровой режим debug. Правда, никто кроме Близзард не знает как этот режим включить, поэтому не имеет смысла этим пользоваться (а имеет ли смысл это тут писать?)] это разделенный запятыми список выражений, которые должны передаться функции (конечно, в согласии с объявленными в функции параметрами). Если в объявлении фунции написано что она "берет" nothing, то мы так и оставляем скобки пустыми (например, call func_name()). Как уже говорилось, выражения должны передаваться в согласии с объявленными параметрами функции. Например:
code:
function MakeUnitsDance takes region where,
integer num, string nameOfDance returns nothing

Может быть вызвана вот так:
code:
call MakeUnitsDance(GetTriggeringRegion(),
numGrunts*2, "salsa")
// Или
call MakeUnitsDance(myRegion,
100, MyChooseDanceFunction())
// и т.д. и т.п.

Возвращаемое значение игнорируется.

Операторы set, call, if then else и loop могут быть с префиксом debug. Это значит что он запускается только если включен внутре-игровой режим debug. Правда, никто кроме Близзард не знает как этот режим включить, поэтому не имеет смысла этим пользоваться.

Автор: Raz
© WC3.RU, 2002-2010 гг
Нашли ошибки и недоработки в статье? Сообщите нам в раздел Поддержки! С уважением, WC3.RU
__________________
Смотри подругому !
VAV вне форума  
Старый 15.02.2010, 00:21   #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:31.
VAV вне форума  
Закрытая тема


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

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

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


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

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