[Уроки JASS]Основы синтаксиса, "Функции"
|
|
-
AncientPenguin | Дата: Суббота, 04-08-2012, 14:24:46 | Сообщение # 1 |
загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
|
Уроки JASS Основы синтаксиса, урок № 3. “Функции”
Введение
Если в кратце, то функция это некий кусок кода. Если у вас есть код который необходимо использовать в нескольких местах, то можно создать функцию и вместо постоянного копирования кода просто вызывать ее. Функция выглядит следующим образом:
Code function <имя функции> takes <аргументы> returns <тип возвращаемого значения> <код функции> endfunction
Например:
Code function Hello takes nothing returns nothing call BJDebugMsg(“Hello world”) endfunction
прим. BJDebugMsg пишет сообщение всем игрокам.
Для того чтобы воспользоваться созданной функцией необходимо ее вызвать:
Code call <имя функции>(<аргументы>)
call Hello()
В итоге всем игрокам выдаст сообщение Hello world
Аргументы
Очень часто в функцию нужно передать какие-то переменные для того чтобы она с ними что-то сделала, например передвинула юнита. Для этого и существуют аргументы, чтобы функция брала аргумент, нужно написать его тип и имя:
Code function Hello takes string str returns nothing call BJDebugMsg(str) endfunction
Для того чтобы функция брала несколько аргументов нужно перечислить их через запятую:
Code function sum takes integer i1, integer i2 returns nothing local integer i3 = i1 + i2 endfunction
Вот так, но эта функция абсолютно бесполезна т.к. переменная i3 локальная и при выходе из функции она уничтожится, и мы не узнаем что же там получилось.
Возвращаемое значение
Функция может вернуть какой-нибуть результат, для этого нужно указать тип возвращаемого значения:
Code function sum takes integer i1, integer i2 returns integer local integer i3 = i1 + i2 return i3 endfunction
Ключевое слово return используется для того чтобы вернуть значение, а так же для того чтобы завершить выполнение функции, все что после ретурна выполнятся не будет. Предыдущую функцию можно записать короче:
Code function sum takes integer i1, integer i2 returns integer return i1 + i2 endfunction
Функции могут принимать и возвращать любые типы переменных, кроме массивов.
В варкрафте есть одна неприятная особенность, а именно ограничение на количество операций в функции. Т.е. при достижении какого-то определенного количества операций (set и call) функция просто прекратит выполнение, несмотря на то, что должна была выполняться дальше. Но пугаться раньше времени не стоит, ограничение довольно большое и без изврата его превысить очень сложно (у меня не получалось).
Домашнее задание
Создать функцию, которая возводит реальное число в степень и возвращает полученное значение. Степень - целое число и должна быть больше 0, если условия не выполнены, то функция должна вернуть ноль.
Выполненное задание кидать в лс, текстом.
|
| | |
-
НубикВЕ | Дата: Суббота, 04-08-2012, 20:40:03 | Сообщение # 2 |
загрузка наград ...
Группа: Пользователи
Сообщений: 187
Репутация: 261
Статус: Не на сайте
|
Довай vJass, это фсё для навичков!
[c][/c]
|
| | |
-
AncientPenguin | Дата: Суббота, 04-08-2012, 20:59:52 | Сообщение # 3 |
загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
|
Quote (НубикВЕ) Довай vJass, это фсё для навичков!
Будет и vjass. Раз это для новичков то где выполненное задание?)
|
| | |
-
НубикВЕ | Дата: Воскресенье, 05-08-2012, 13:40:34 | Сообщение # 4 |
загрузка наград ...
Группа: Пользователи
Сообщений: 187
Репутация: 261
Статус: Не на сайте
|
AncientPenguin, пфф, тута и делать нечего, шутник! Ты же играл в Winter AoS открой там все дз
[c][/c]
|
| | |
-
AncientPenguin | Дата: Воскресенье, 05-08-2012, 13:49:57 | Сообщение # 5 |
загрузка наград ...
Группа: Избранные
Сообщений: 449
Репутация: 526
Статус: Не на сайте
|
Quote (НубикВЕ) AncientPenguin, пфф, тута и делать нечего, шутник! Ты же играл в Winter AoS открой там все дз
Ок, тебе персональное задание:
Создать функцию которая перемещает юнита на вектор (function MoveUnit takes unit u, real x, real y, real z returns nothing) При этом высота юнита не должна зависеть от высоты рельефа.
p.s. еще раз напишешь что слишком легко, дам задание на матрицы и кватернионы
|
| | |
-
MarkSpartak | Дата: Понедельник, 06-08-2012, 09:37:34 | Сообщение # 6 |
Tu tu-ru
загрузка наград ...
Группа: V.I.P.
Сообщений: 1261
Репутация: 1650
Статус: Не на сайте
|
НубикВЕ, Зачем тебе учить Jass? Во первых ты его и так знаешь Во вторых на тот случай если ты не знаешь, у тебя есть личный учитель
|
| | |
-
НубикВЕ | Дата: Понедельник, 06-08-2012, 11:01:55 | Сообщение # 7 |
загрузка наград ...
Группа: Пользователи
Сообщений: 187
Репутация: 261
Статус: Не на сайте
|
MarkSpartak, он обиделся xDD ,как девочка)
[c][/c]
|
| | |
-
MarkSpartak | Дата: Понедельник, 06-08-2012, 17:16:41 | Сообщение # 8 |
Tu tu-ru
загрузка наград ...
Группа: V.I.P.
Сообщений: 1261
Репутация: 1650
Статус: Не на сайте
|
НубикВЕ, а че ты ему сделал? Но факт остается фактом ты знаешь джасс, нафиг тебе его учить? тем более в классе С?
|
| | |
-
НубикВЕ | Дата: Понедельник, 06-08-2012, 17:25:29 | Сообщение # 9 |
загрузка наград ...
Группа: Пользователи
Сообщений: 187
Репутация: 261
Статус: Не на сайте
|
MarkSpartak, ты ваще офигел, не ответил в скайп, ТЫ ЗДОХНЕШ ВО СНЕ!
[c][/c]
|
| | |
-
Sent | Дата: Понедельник, 06-08-2012, 18:21:16 | Сообщение # 10 |
#DARKSIDE
загрузка наград ...
Группа: Зам.Админа
Сообщений: 9158
Репутация: 8449
Статус: Не на сайте
|
НубикВЕ, исключен из школы
|
| | |