Operators
The Alloy configuration syntax uses a standard set of operators. All operations follow the PEMDAS order of mathematical operations.
Arithmetic operators
| Operator | Description | 
|---|---|
| + | Adds two numbers. | 
| - | Subtracts two numbers. | 
| * | Multiplies two numbers. | 
| / | Divides two numbers. | 
| % | Computes the remainder after dividing two numbers. | 
| ^ | Raises a number to the specified power. | 
String operators
| Operator | Description | 
|---|---|
| + | Concatenate two strings or two secrets, or a string and a secret. | 
Comparison operators
| Operator | Description | 
|---|---|
| == | Returns truewhen two values are equal. | 
| != | Returns truewhen two values aren’t equal. | 
| < | Returns truewhen the left value is less than the right value. | 
| <= | Returns truewhen the left value is less than or equal to the right value. | 
| > | Returns truewhen the left value is greater than the right value. | 
| >= | Returns truewhen the left value is greater than or equal to the right value. | 
You can use the equality operators == and != with any operands.
The operands in ordering operators <, <=, >, and >= must be orderable and of the same type.
The results of these comparisons are:
- Boolean values are equal if both are either trueorfalse.
- Numerical (integer and floating-point) values are ordered in the usual way.
- String values are ordered lexically, byte-wise.
- Objects are equal if all their fields are equal.
- Arrays are equal if their corresponding elements are equal.
Logical operators
| Operator | Description | 
|---|---|
| && | Returns truewhen both the left and right values aretrue. | 
| || | Returns truewhen either the left or right value istrue. | 
| ! | Negates a boolean value. | 
Logical operators work with boolean values and return a boolean result.
Assignment operator
The Alloy configuration syntax uses = as the assignment operator.
An assignment statement can only assign a single value. Each value must be assignable to the attribute or object key.
- You can assign nullto any attribute.
- You can assign numerical, string, boolean, array, function, capsule, and object types to attributes of the corresponding type.
- You can assign numbers to string attributes with an implicit conversion.
- You can assign strings to numerical attributes if they represent a number.
- You can’t assign blocks.
Brackets
| Brackets | Description | 
|---|---|
| { } | Define blocks and objects. | 
| ( ) | Group and prioritize expressions. | 
| [ ] | Define arrays. | 
For example, the following code uses curly braces and square brackets to define an object and an array.
obj = { app = "alloy", namespace = "dev" }
arr = [1, true, 7 * (1+1), 3]Access operators
| Operator | Description | 
|---|---|
| [ ] | Access a member of an array or object. | 
| . | Access a named member of an object or an exported field of a component. | 
You can use the Alloy access operators to retrieve nested values. Use square brackets to access zero-indexed array elements or object fields by enclosing the field name in double quotes. Use the dot operator to access object fields without double quotes or component exports.
obj["app"]
arr[1]
obj.app
local.file.token.contentIf you use the [ ] operator to access a non-existent object member, the result is null.
If you use the . operator to access a non-existent named member of an object, an error occurs.







