Operators
Topic · Markdown · JSON · original wiki page
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
Operators
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. Other assignment operators like +=, -= that can be found in other programming languages do not exist in SQF/SQS.
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.
Unary arithmetic operators (in order of precedence)
| Operator | Name | Example |
|---|---|---|
| - | Negation | -a |
| + | Duplication | +a |
| ( | Bracket | (expression) |
Binary arithmetic operators
| Operator | Name | Example |
|---|---|---|
| + | Addition | a + b |
| - | Subtraction | a - b |
| * | Multiplication | a * b |
| / | Division | a / b |
| % | Modulo | a % b |
| mod | Modulo | a mod b |
| ^ | Raise to the power of | a ^ b |
Note
See also Math Commands.
Logical Operators
Logical operators evaluate Boolean values. All operands of logical operations are Booleans. A logical operation always returns a Boolean.
Unary logical operators
| 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.
Binary logical operators
| Operator | Name | Example |
|---|---|---|
| && | And | a && b |
| and | And | a and b |
| || | Or | a || b |
| or | Or | a or b |
Andonly returnstrueif both operands aretrueOrreturnstrueif one or both operands aretrue
There is no Xor, Nor and Nand operator. Those can be simulated using the basic operators though:
Combined logical operators
| Name | Combination |
|---|---|
| Xor | ((a || b) && !(a && b)) |
| Nor | !(a || b) |
| Nand | !(a && b) |
Xorreturnstrueif exactly one of both values istrueNorreturnstrueif none of both values istrueNandreturnstrueif not both values aretrueat the same time
Comparison Operators
Comparison operators compare two values. Operands of comparisons may be of type Number, Side, String, Object, Group, Structured Text, Config, Display or Control for == and !=, and Number for < > >= <=.
Comparisons always return a Boolean: true if the comparison matches, false if not.
Comparison operators
| 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
invalid before Arma 3 v2.00 valid in all versions a == trueaa == false!aYou could not compare Boolean values with == before Arma 3 v2.00 (in Arma 3 before that, use isEqualTo).
Comparing a Boolean value withtrueis the same as the value itself.
Comparing a Boolean value withfalseis the same as the inverse value.
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.
Unary array operators
| 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 [0,5];
// _arrayA => [5,2]
// _arrayB => [5,2]
Example 2:
_arrayA = [1,2];
_arrayB = +_arrayA;
_arrayA set [0,5];
// _arrayA => [5,2]
// _arrayB => [1,2]
Binary array operators
| 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.
Binary string operators
| Operator | Name | Example |
|---|---|---|
| + | Concatenation | myString1 + myString2 |
+adds the second operand on the end of the first operand
Example:
_stringA = "Hello ";
_stringB = "World!";
_stringC = _stringA + _stringB;
// _stringC => "Hello World!"
Config Operators
Config operators
| Operator | Name | Example |
|---|---|---|
| += | Append Array | myProperty[] += {element_1, element_2}; |
Example:
class B_Soldier_F;
class MySoldier: B_Soldier_F
{
RespawnItems[] += {"FirstAidKit"}; //Adds additional FAK
};
/*
Original RespawnItems[] array in config viewer:
RespawnItems[] = {"FirstAidKit"};
Modified RespawnItems[] array in config viewer:
RespawnItems[] = {"FirstAidKit","FirstAidKit"};
*/
Order of Precedence
Order of operations, also called operator precedence, is a set of rules specifying which procedures should be performed first in a mathematical expression.
Precedence Overview
Note
- Highest precedence means highest priority
- Associativity is (then) done from left to right, for example
3 + 5 + 8will be processed as((3 + 5) + 8)
| Precedence | Type of Operator | Examples |
|---|---|---|
| 11 | Nular operators (commands with no arguments): - commandName |
- Variables - Values - () / [] / {} / "" / '' -enclosed expressions |
| 10 | Unary operators (commands with 1 argument): - commandName a |
- +a - -a - +array - ! b - not b |
| 9 | Hash-select operator | - array # index |
| 8 | Power operator | - a ^ b |
| 7 | - Number multiplication, division and remainder - atan2 - Config access (/) |
- a * b - a / b - a % b - a mod b - a / b - a atan2 b |
| 6 | - Number addition and subtraction - Array addition and subtraction - String addition - min and max commands |
- a + b - a - b - arr1 + arr2 - arr1 - arr2 - str1 + str2 - a min b - a max b |
| 5 | - else (if-then-else structure) | N/A |
| 4 | Binary operators (commands with 2 arguments): - a commandName b |
- setDir - switch colon (:) |
| 3 | - == and != comparisons - Number comparisons - Config access (>>) |
- a == b - a != b - a > b - a < b - a >= b - a <= b - config >> name |
| 2 | Logical and operator | - && - and |
| 1 | Logical or operator | - || - or |
Examples
| Input | Process | Comment |
|---|---|---|
1 + 2 * 3 |
1 + (2 * 3) |
result equals 7, and not 9 (see also PEMDAS) |
sleep 10 + random 20 |
(sleep 10) + random 20 |
sleep 10 will return Nothing, then + random 20 will be calculated but not used.sleep (10 + random 20) should be used instead |