2.1 Инкремент и Декремент
Операторы инкремента ++ (увеличение на 1) и декремента -- (уменьшение на 1) являются унарными, то есть получающиими всего один операнд. Они могут как использоваться самостоятельно на отдельной строке, так и являться частью более сложных выражений:
function test takes nothing returns nothing
integer a = 7
a++ // после этого выражения, a = 8
integer b; b = 3 + a-- // после этого выражения, a = 7, b = 11
b-- // после этого выражения, b = 10
endfunction
что транслируется в следующее:
function test takes nothing returns nothing
local integer a = 7
local integer b
set a = a + 1
set b = 3 + a
set a = a - 1
set b = b - 1
endfunction
Эти операторы имеют две формы записи: префиксную (оператор записывается перед переменной) и постфиксную (оператор записан после переменной). При использовании унарных операторов на отдельной строке, форма записи значения не имеет.
Однако, используя их внутри сложных выражений, необходимо помнить, что они ведут себя по-разному в зависимости от формы записи:
- при префиксной форме записи сначала переменная изменяется, а затем её новое значение передается в вычисляемое выражение.
- при постфиксной записи, сначала в выражение передается значение переменной, а лишь затем её значение изменяется.
function test takes nothing returns nothing
integer a = 7
integer b = ++a // после этого выражения, a = 8, b = 8
integer c = a + b-- // после этого выражения, a = 8, b = 7, c = 16
endfunction
что после трансляции будет выглядеть так:
function test takes nothing returns nothing
local integer a = 7
local integer b
local integer c
set a = a + 1
set b = a
set c = a + b
set b = b - 1
endfunction
2.2 Операторы присваивания
Вводимые синтаксисом cJass операторы присваивания позволяют сокращать запись присваиваемых выражений. Например, выражение
a = a + 2
может быть сокращено применением составной операции сложения +=:
a += 2
Оператор += прибавляет значение выражения, записанного справа, к выражению, записанному слева от него. Так же образуются и другие составные операторы: -=, *= и /=.
function test takes nothing returns nothing
integer a = 3, b = 5, c = 4, d = 6
a += 7 // в результате a = 10
b -= 4 // в результате b = 1
c *= 5 // в результате c = 20
d /= 3 // в результате d = 2
endfunction
после трансляции выглядит так:
function test takes nothing returns nothing
local integer a = 3
local integer b = 5
local integer c = 4
local integer d = 6
set a = a + 7
set b = b - 4
set c = c * 5
set d = d / 3
endfunction
2.3 Логические операции
При использовании синтаксиса cJass, все логические операции можно записывать в сокращенной форме наряду со стандартной. Вы можете использовать тот вариант, который вам наиболее удобен.
function test takes boolean a, boolean b returns nothing
boolean c
if (a && b) then // a and b
c = !b // not b
else
c = b || a // b or a
endif
endfunction
2.4 Внешний вид кода
cJass предоставляет несколько удобных способов управления внешним видом вашего кода. Это — операторы, позволяющие записывать несколько выражений на одной строке либо разбивать одно длинное выражение на несколько строк. Вот пример их использования:
nothing RandomUnit(integer pIndex) {
Sleep(1)
unit u; u = CreateUnit( Player(pIndex), \
GetRandomInt('H000', 'H009'),\
GetRandomReal(-100, 100), \
GetRandomReal(-100, 100), \
GetRandomReal(0, 360))
Sleep(2)
RemoveUnit(u)
}
Символ ; при трансляции заменяется на перенос строки, а символ \ сшивает строку с последующей.