Operators compute values and may have side effects. They are not different in this respect from functions.
Unlike function names, the operator names are not aime identifiers, but instead are composed of signs such as ‘+’ and ‘*’.
aime operators have one, two or three operands. The expression syntax has the one operand operators preceding their operand and the two operands operators appearing in between the operands, hence the prefix unary operator and infix binary operator terms.
Unary operators include the arithmetic negation ‘-’, the no operation ‘+’ and the logical negation ‘!’.
-a +7 +(a * 2) -(-b + 3) !0 !c
Binary operators include the arithmetic ‘+’, ‘-’, ‘*’ and ‘/’, the assignment ‘=’, the comparison ‘<’ and ‘>’.
1 + 2 d * 4 .5 / e + f g < h 303 > 505 i = i - 1
Ternary operators include the C-ish ‘?’‘:’ value selector.
1 ? 2 : 3 a ? a : 4 b < c ? "beta" : "gamma" d == e ? d / 2 : d * e
aime operators are strict. All their operands are evaluated before the operators are applied.
Like function parameters, the operands of an operator have a defined type. aime defines the ‘integer’ addition operator on two ‘integer’ operands and evaluating to an ‘integer’ value. Unlike for functions, there are no implicit convertions for operator operands. The aime ‘integer’ on ‘integer’ addition operator does not add numbers of types other than ‘integer’. The name of operators are nonetheless not unique, and there are defined eight more operators adding numbers of the numerical intrinsic types (‘real’ with ‘real’, ‘integer’ with ‘real’, ‘real’ with ‘integer’, etc).
See The Intrinsic Types.
Operators associate a priority or precedence value that dictates the order in which they are applied. The ‘*’ multiplication operators have a precedence higher than that of the ‘+’ addition operators. In both
a * b + c
c + b * a
expressions, the multiplication of a and b occurs before the addition with c.
Parantheses change the order of operators application, with those inside applied before those outside. The
(a + b) * c
expression has a and b added before their sum is multiplied by c.
Operators also define an associativity order that dictates their application order when their precedence fails to define one. With the exception of assignment operators that asssociate right to left, all operators associate left to right.
a + b + c
has a summed with b before being summed with c.
a = b = c
has the value of c being assigned to b before being assigned to a.
|• The Prefix Unary Operators:|
|• Binary Operator Syntax:|
|• The Binary Operators:|
|• Binary Operators Precedence Table:|
|• Ternary Operator Syntax:|
|• The Ternary Operators:|