Jam supports a large set of standard operations. These operations link directly to methods defining their behaviour.
There are two kinds of operators, binary and unary. Binary operations require exactly two values, while unary require exactly one.
Binary Operator | Meaning |
---|---|
== |
Equality |
!= |
Inverse Equality |
< |
Smaller than |
<= |
Smaller than or equal to |
> |
Larger than |
>= |
Larger than or equal to |
is |
Identity Equivalence |
!is |
Inverse Identity Equivalence |
+ |
Addition |
- |
Subtraction |
* |
Multiplication |
/ |
Division |
// |
Integer Division |
** |
Exponentiation |
% |
Modulo |
in |
Containment |
!in |
Inverse Containment |
&& |
Logical And |
|| |
Logical Or |
^^ |
Logical Exclusive Or |
& |
Bitwise And |
| |
Bitwise Or |
^ |
Bitwise Exclusive Or |
: |
Type of |
Unary Operator | Meaning |
---|---|
! |
Logical Not |
~ |
Bitwise Inverse |
For Binary Operations, Order of Operations is ranked using the PEDMAS system. The operations in descending rank order are Parenthesis, Exponents, Division, Multiplication, Addition, Subtraction. A group of operations of the same rank will be executed from left to right.
Indexing is an operation on a value that maps one or more values to another value. This includes using an integer to map the index of an element in an array to the element itself.
The “Type of” operation is a constraint on the type system that the LHS must be of the type given on the RHS. This can be used to override type inference for Variables.
UnaryOperator ::= "~" | "!" MathematicalOperator ::= "+" | "-" | "*" | "/" | "//" | "**" | "%" EquivalenceOperator ::= "==" | "!=" RelationalOperator ::= "<" | "<=" | ">" | ">=" IdentityOperator ::= "is" | "!is" ContainmentOperator ::= "in" | "!in" LogicalOperator ::= "&&" | "||" | "^^" BitwiseOperator ::= "&" | "|" | "^" ComparisonOperator ::=EquivalenceOperator
|RelationalOperator
|IdentityOperator
ComparisonOperation ::=Value
[ComparisonOperator
Value
]+ Operator ::=MathematicalOperator
|ComparisonOperator
|ContainmentOperator
|LogicalOperator
|BitwiseOperator
BinaryOperation ::=ComparisonOperation
| (Value
BinaryOperator
Value
) UnaryOperation ::= [UnaryOperator
]Value
IndexOperation ::=Value
"[" [Value
"," ]*Value
"]" Operation ::=UnaryOperation
|BinaryOperation
|IndexOperation
# Addition
size = 5 + 3 #=> 8
total_volume = 6.8 + 2.3 #=> 9.1
# Subtraction
size = 3 - 5 #=> -2
total_volume = 6.8 - 2.3 #=> 4.5
# Multiplication
area = 5 * 3 #=> 15
depreciation_rate = 2 * -5.3 #=> -10.6
# Division
ratio = 5.0 / 2.0 #=> 2.5
# Integer Division
portion = 10 // 3 #=> 3
half = 8 // 4 #=> 2
# Exponentiation
y_coord = x_coord**2
decay_rate = 2**-2 #=> 0.25
# Modulo
TODO
# Equality
if num_sides == 4
puts("Shape is a square")
end
# Inverse Equality
if num_eyes != 2
puts("Not human")
end
# Smaller than
while count < 10
puts(count)
count += 1
end
# Smaller than or equal to
#TODO
# Larger than
if score > high_score
high_score = score
end
# Larger than or equal to
#TODO
# Identity Equivalence
#TODO
# Inverse Identity Equivalence
#TODO
#TODO
# And
if total_score >= 50 && final_exam_score >= 50
return true #passed
else
return false #failed
end
# Or
if rank > 5 || difficulty_setting == 2
difficulty = 2
end
# Exclusive Or
#TODO
# Logical Not
#TODO
# And
#TODO
# Or
#TODO
# Exclusive Or
#TODO
# Bitwise Inverse
TODO
# Arrays
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
fifth_prime = primes[4]
# Associative Arrays
emergency_numbers = {
$AUS -> "000"
$USA -> "911"
}
aus_emergency_number = emergency_numbers[$AUS]
result:Int = long_math_function() # Ensures `result` is of type `Int`