Operators
Operators are the base commands each programming language is built on. They provide ability to perform basic mathematical and logical operations.
Requirements
To understand this article, you should read the following articles:
Terms
- Operand
- An operand is any value given to an operator.
- Expression
- An expression is basically any code that returns a value. Read Expression for more information.
- Unary Operator
- An unary operator is an operator that requires only one operand.
- Unary operation:
operator expression
- Binary Operator
- A binary operator is an operator that requires two operands.
- Binary operation:
expression operator expression
Assignment Operators
Assignment operators are used to assign values to a variable. OFP's scripting language provides only one assignment operator.
Assignment:
identifier = expression
Example 1:
a = b
You might think that this operator compares a and b, but that is not the case. '=' simply sets the left value to be the right one. There don't exist any other assignment operators like '+=', '-=' etc., that can be found in other programming languages.
Example 2:
a = b*c
Arithmetic Operators
Remember arithmetic operations from school? These work just the same way.
All operands of arithmetic operations must be Numbers. Arithmetic operations always return a Number.
Operator | Name | Example |
---|---|---|
- | Negation | -a |
Operator | Name | Example |
---|---|---|
+ | Addition | a + b |
- | Substraction | a - b |
* | Multiplication | a * b |
/ | Division | a / b |
% | Modulo | a % b |
^ | Raise to the power of | a ^ b |
Modulo returns the remainder of the division a / b.
Logical Operators
Logical operators evaluate Boolean values. All operands of logical operations are Booleans.
A logical operation always returns a Boolean.
Operator | Name | Example |
---|---|---|
! | Not | !a |
not | Not | not a |
The Not-operator always returns the inverse Boolean value. If a Boolean a is true, !a returns false and vice versa.
Operator | Name | Example |
---|---|---|
&& | And | a && b |
and | And | a and b |
|| | Or | a || b |
or | Or | a or b |
- && only returns true if both operands are true
- || returns true if one or both operands are true
There is no Xor, Nor and Nand operator. Those can be simulated using the basic operators though:
Name | Combination |
---|---|
Xor | (a || b) && !(a && b)) |
Nor | !(a || b) |
Nand | !(a && b) |
Comparison Operators
Comparison operators compare two values. Operands of comparisons may be Numbers and Strings.
Comparisons always return a Boolean: true if the comparison matches, false if not.
Operator | Name | Example |
---|---|---|
== | Equal | a == b |
!= | Not equal | a != b |
< | Less than | a < b |
> | Greater than | a > b |
<= | Less or equal | a <= b |
>= | Greater or equal | a >= b |
Note: You can't compare Boolean values. Comparing a Boolean value with true is the same as the value itself. Comparing a Boolean value with false is the same as the inverse value.
a == true // invalid, but equal to a
a == false // invalid, but equal to !a
Array Operators
The scripting language offers own operators to deal with arrays. All operands, of course, have to be of type Array.
The return value of an array operation is an Array.
Operator | Name | Example |
---|---|---|
+ | Copy | +myArray |
Normally arrays are assigned by reference. That means, if you assign array a to array b and change a afterwards, also b is changed. Use the copy operator to avoid this otherwise useful feature.
Example 1:
_arrayA = [1,2]; _arrayB = _arrayA; _arrayA set [1,5]; _arrayA => [5,2] _arrayB => [5,2]
Example 2:
_arrayA = [1,2]; _arrayB = +_arrayA; _arrayA set [1,5]; _arrayA => [5,2] _arrayB => [1,2]
Operator | Name | Example |
---|---|---|
+ | Concatenation | myArray1 + myArray2 |
- | Removal | myArray1 - myArray2 |
- + adds the second operand on the end of the first operand
- - removes all elements of the second operand from the first operand
Example 1:
_arrayA = [1,2]; _arrayB = [3,2,4]; _arrayC = _arrayA + _arrayB; _arrayC => [1,2,3,2,4]
Example 2:
_arrayA = [1,2,3,2,4]; _arrayB = [2,3]; _arrayC = _arrayA - _arrayB; _arrayC => [1,4]
String Operators
The scripting language offers one single string operator to concatenate strings. Both operands must be Strings.
The return value of a string operation is a String.
Expressions
Every expression is created from operands and operators. Operators call interpreter what it should do with operands. For example: AKMagazines * AmmoPerMagazine says: "multiple value in variable AKMagazines with value in variable AmmoPerMagazine". We evaluate expressions for obtain outcomes. If you want to store it, you must evaluate statement. For example: AllAKAmmo = AKMagazines * AmmoPerMagazine. It's order to interpreter to multiple value in variable AKMagazines with value in variable AmmoPerMagazine and prouuct store in variable AllAKAmmo (if there is any value, it will be rewritten). You need to know that expressions are evaluated from left side to right side, in statements is evaluated right expression first and outcome is stored in variable in left side. Another typical statement is VictorSide = side Victor or CarDamage = damage car.
Evaluating for outcome or side effects
When interpreter evaluates expression, gives you its outcome. Im most of cases it gives to you nothing, but it change something in game. (
PrivateHonka setDamage 1
increase global IQ of all army solders (kill him) ;-) ).
Operators
Operators in ArmA SL are implemented as commands (as everything). More important that previous information is that outcome of expression with arithmetic operators is number, when logical operators are used, its logical value (true or false (it's also commands which returns logical values. In other scripting languages (Python, etc.) is this value part of interpreter. (it's only small different, if you learn ArmA SL principles, you will be able to learn any other language (Python) easily). There you can see Arma SL has commands for everything.), it's data type is bool).
- Arithmetical operators
- Logical operators
Changing variable type
This operation is there limited, you can only retype to string with help of format command. Its primary function is similar to printf command in C - it replace %1, %2, %3... if occur in string given as 0. element of given array with outcome of expressions in first (%1), second(%2)... array elements - there is one different: it returns created array, not print it.
text = format ["Player side: %1 - Human players on that side: %2", side player, playersNumber side player]
Now we have string about situation in game. If you are confused you don't see expression in our example, know that 'value of expression where is only variable or number without operators is the same as variable or number value, howgh'.
What's next?
control structures