Вступление
Что же такое vJass? Собственно это нечто вроде реализации ООП в Jass.
Я не буду распинаться и расписывать подробнее, поэтому приступим прямо к делу.
Начнём с плюшек.
Объявление глобальных переменных прямо в коде
Что в этом хорошего? Позволяет использовать переменные без противной приставки udg_. Как же это сделать? Очень просто. Объявим директиву глобальных переменных:
Code
globals
integer i // объявим нашу переменную i типа integer
endglobals
Вы можете спросить, что же делать, если нам надо несколько таких переменных? Очень просто, мы сделаем такие переменными приватными, как это сделать будет немного позже, когда мы будем проходить библиотеки и области.
Debug mode
Code
function TestFunc takes nothig returns nothing
call MyFunc()
debug call BJDebugMsg(“работает!!”)
endfunction
Если включен DeBug мод в редакторе, то при проверки карты из редактора сработают обе функции(и MyFunc и покажется «работает»), а если выключен, то сработает только вызов MyFunc
Структуры и методы
Структура (struct) - связка некоторых переменных, которая используется тоже как переменная, с помощью которой можно получить доступ к включаемых в нее переменных. Структура очень сильное средство при создании заклинаний.
Объявляется следующим способом:
Code
struct <имя>(без <>)
//тело структуры
endstruct
Пример:
Code
struct mystr
integer i
endstruct
Объявление структуры в коде:
Code
local <имя> <локальное имя>=<имя>.create()
set <локальное имя>.переменная=... // обращение к переменной
call <имя>.destroy(<локальное имя>) или <локальное имя>.destroy() //удаление структуры
Пример
Code
local mystr test=mystr.create()
set test.i=1 //присваиваем значение 1 для переменной i в структуре
call test.destroy() // уничтожаем структуру для очищения памяти
Так же структура может включать в себя другие структуры и быть уникальными/публичными
Важно заметить что структура является сама по себе integer
Методы
Методы (method) - внутриструктурные функции, имеющие простой доступ к переменным в структуре, предназначенные для их изменения.
Объявляются так:
общая конструкция
Code
method <имя метода> takes <что берёт в качестве аргумента> returns <что возвращает>
/*тело метода*/
endmethod
Пример:
Code
method mymthd takes integer t returns nothing
set this.i=this.i+t
endmethod
Как вы заметили, методы обращаются к переменным через this.
Обновим нашу структуру с использованием метода:
Code
struct mystr
integer i
method mymthd takes integer t returns nothing
set this.i=this.i+t
endmethod
endstruct
function TestFunc takes nothing returns nothing
local mystr test=mystr.create()
call test.mymthd(1)
call mystr.destroy(test)
endfunction
Так же бывают статичные методы
Статический (static) метод не берет аргумент this следовательно в нем нельзя обращаться к переменной через this.
Но, статический метод может использовать приватные (уникальные) переменные структуры, в которой он объявлен.
Метод onDestroy
Метод, обьявленый внутри структуры и имеющий имя onDestroy будет автоматически вызван при уничтожение данной структуры.
Code
struct MyStr
method onDestroy takes nothing returns nothing
endmethod
endstruct
function OutSide takes nothing returns nothing
local MyStr A=MyStr.create()
call A.destroy()
endfunction
Но я не советую использовать его, т.к он создаёт отдельный триггер, что плохо сказывается на оптимизации. Нормальный программист сам всё предусмотрит
Задание: Сделать заклинание