Glossary
Tip: CTRL/⌘ + F and type in the symbol or operator you want to look up.
&
(ampersand)
The &
(ampersand) symbol has several uses.
Reference
If an expression starts with the &
(ampersand) symbol, it creates a reference.
References may also be authorized if the &
symbol is preceded by auth
(otherwise the reference is unauthorized).
Authorized references have the auth
modifier, along with the set of entitlements to which the reference is authorized,
i.e. the full syntax is auth(E, F) &T
, whereas unauthorized references do not have a modifier.
Logical Operator
It can be also used as a logical operator (AND),
by appearing twice in succession (i.e. &&
):
@
(at)
The @
(at) symbol before a type is used to annotate whether the type is a resource.
The @
symbol must appear at the beginning of the type, not inside.
For example, an array of NFT
s is @[NFT]
, not [@NFT]
.
This emphasizes the whole type acts like a resource.
:
(colon)
The :
(colon) symbol has several uses.
Type Declaration
If a :
(colon) follows a variable/constant/function declaration, it is used to declare its type.
Ternary Conditional Operator
The :
(colon) is also be used in ternary operations to represent the "otherwise" section,
such as the following:
=
(equals)
The =
(equals) symbol has several uses.
Variable Declaration
Assignment
!
(exclamation mark)
The !
(exclamation mark) symbol has a different effect whether it precedes or succeeds a variable.
When it immediately precedes a boolean-type variable, it negates it.
When it immediately succeeds an optional variable, it force-unwraps it. Force-unwrapping returns the value inside an optional if it contains a value, or panics and aborts the execution if the optional has no value, i.e. the optional value is nil.
/
(forward slash)
The /
(forward slash) symbol has several uses.
Division Operator
Inbetween two expressions, the forward slash acts as the division operator.
Path separator
In a Path, the forward slash separates the domain (e.g. storage
, private
, public
) and the identifier.
<-
(lower than, hyphen) (Move operator)
The move operator <-
is like the assignment operator =
,
but must be used when the value is a resource.
To make assignment of resources explicit, the move operator <-
must be used when:
- The resource is the initial value of a constant or variable,
- The resource is moved to a different variable in an assignment,
- The resource is moved to a function as an argument
- The resource is returned from a function.
<-!
(lower than, hyphen, exclamation mark) (Force-assignment move operator)
The force-assignment move operator <-!
moves a resource value to an optional variable.
If the variable is nil
, the move succeeds.
If it is not nil, the program aborts.
<->
(lower than, hyphen, greater than) (Swap operator)
The swapping operator <->
swaps two resource between the variables to the left and right of it.
+
(plus), -
(minus), *
(asterisk), %
(percentage sign)
These are all typical arithmetic operators:
- Addition:
+
- Subtraction:
-
- Multiplication:
*
- Remainder:
%
?
(question mark)
The ?
(question mark) symbol has several uses.
Optional
If a ?
(question mark) follows a variable/constant, it represents an optional.
An optional can either have a value or nothing at all.
Ternary Conditional Operator
The ?
(question mark) is also be used in ternary operations to represent the "then" section,
such as the following:
Nil-Coalescing Operator
The ?
(question mark) is also used in the nil-coalescing operator ??
.
It returns the value inside the optional, if the optional contains a value, or returns an alternative value if the optional has no value, i.e., the optional value is nil.
_
(underscore)
The _
(underscore) symbol has several uses.
Names
The _
(underscore) can be used in names, e.g. in variables and types.
Number Literals
The _
(underscore) can also be used to split up numerical components.
Argument Labels
The _
(underscore) can also be to indicate that a parameter in a function has no argument label.