Operators


A. Arithmetic & Animation-Specific Operators


  1. +

    Object Number Text Color Coord List
    Object Object stacking

    The second object is stacked on top of the first object, and a composite object is returned.
    Number Numerical addition
    Text Text concatenation
    Color Color mixing

    Mixing two colors is defined as the resulting color when their red color values are averaged, their green color values are averaged, and their blue color values are averaged.

    NOTE: One of the operands must be explicitly declared as a Color to avoid text concatenation instead.
    Coordinates Coordinate addition

    The x-coordinate of the resulting coordinate pair is the sum of the x-coordinates of the operands. The y-coordinate of the resulting coordinate pair is the sum of the y-coordinates of the operands.
    List List concatenation

    Example:

    house: Object
    square = rectangle(33, 70, 50, 50)
    roof = triangle(30, 75, 58, 20, 86, 75)
    
    house = square + roof
    
    x = 100
    y = 3
    
    txt = "frame"
    new_txt = "Ani" + txt
    
    color1: Color = "#FFFF00"
    color2 = "rgb(0, 0, 255)"
    
    coord_a = {5, 6}
    
    list1 = ["a", "b", "c"]
    list2 = [1, 2, 3]
    
    list3 = list1 + list2
    
    info(x + y)
    info(new_txt)
    info(color1 + color2)
    info(coord_a + {6, 4})
    info(list3)
    
    house.draw(1, 1000)

    Output:

    103
    Aniframe
    rgb(127, 127, 127)
    (11, 10)
    [{'value': 'a', 'data_type': 'Text'}, {'value': 'b', 'data_type': 'Text'}, {'value': 'c', 'data_type': 'Text'}, {'value': 1, 'data_type': 'Number'}, {'value': 2, 'data_type': 'Number'}, {'value': 3, 'data_type': 'Number'}]


  2. -

    Object Number Text Color Coord List
    Object
    Number Numerical subtraction
    Text
    Color Color mixing with inverse

    The inverse of the second operand (color) is computed by subtracting the red, green, and blue values from 255. The inverse of the second operand is mixed with the first operand, and the resulting color is returned.

    NOTE: One of the operands must be explicitly declared as a Color to avoid subtraction of text, which is invalid.
    Coordinates Coordinate subtraction

    The x-coordinate of the resulting coordinate pair is the difference of the x-coordinates of the operands. The y-coordinate of the resulting coordinate pair is the difference of the y-coordinates of the operands.
    List

    Example:

    x = 100
    y = 3
    
    color1 = "#00FF00"
    color2: Color = "rgb(0, 0, 255)"
    
    coord_a = {5, 6}
    
    info(x - y)
    info(color1 - color2)
    info(coord_a - {6, 4})

    Output:

    97
    rgb(0, 127, 127)
    (-1, 2)


  3. *

    Object Number Text Color Coord List
    Object
    Number Numerical multiplication
    Text
    Color
    Coordinates Coordinate multiplication

    The x-coordinate of the resulting coordinate pair is the product of the x-coordinates of the operands. The y-coordinate of the resulting coordinate pair is the product of the y-coordinates of the operands.
    List

    Example:

    x = 100
    y = 3
    coord_a = {5, 6}
    coord_b = {6, 4}
    
    info(x * y)
    info(coord_a * coord_b)

    Output:

    300
    (30, 24)


  4. /

    Object Number Text Color Coord List
    Object
    Number Numerical division
    Text
    Color
    Coordinates Coordinate division

    The x-coordinate of the resulting coordinate pair is the quotient of the x-coordinates of the operands. The y-coordinate of the resulting coordinate pair is the quotient of the y-coordinates of the operands.
    List

    Example:

    x = 100
    y = 3
    coord_a = {5, 6}
    
    info(x / y)
    info(coord_a / {6, 4})

    Output:

    33.333333333333336
    (0.8333333333333334, 1.5)


  5. %

    Object Number Text Color Coord List
    Object
    Number Numerical modulo
    Text
    Color
    Coordinates
    List

    Example:

    x = 100
    y = 3
    
    info(x % y)

    Output:

    1


B. Compound Operators


+=, -=, *=, /=, and %= are supported.

Example:

x = 100
y = 3

x += y
info(x)

x -= y
info(x)

x *= y
info(x)

x /= y
info(x)

x %= y
info(x)

Output:

103
100  
300  
100.0
1


C. Relational Operators


<, <=, >, >=, !=, and == are supported.

These operations are defined for the following operands:

  1. Two numbers
  2. Two strings, in which case lexicographical ordering is followed
  3. Two coordinates, in which case the x-coordinates are compared first, followed by the y-coordinates

Example:

info(-48.3 <= 0)
info("banana" < "Aniframe")
info({5, 6} != {6, 4})

Output:

1
0
1


D. Logical Operators


&&, ||, and ! are supported. Short-circuiting is also enforced.

These operations are defined only when both operands are numbers (or, in the case of ||, if the sole operand is a number):

  1. && returns 1 only if both operands are nonzero; otherwise, 0 is returned
  2. || returns 0 only if both operands are 0; otherwise, 1 is returned
  3. ! returns 0 if the operand is nonzero; it returns 1 if the operand is 0

Example:

info(-48.3 && 0)
info(-48.3 || 0)
info(!(-48.3 && 0))

Output:

0
1
1


E. Operator Precedence


Note that:


Highest Precedence
() (grouping symbols), [] (enclosing symbols for List), {} (enclosing symbols for Coord)
.
+ (unary), - (unary), !
*, /, %
+ (binary), - (binary)
<, <=, >, >=, !=, ==,
&&
||
= (assignment)
Lowest Precedence