# Operators

## Arithmetic

| Operator | Description                  | Example                                |
| -------- | ---------------------------- | -------------------------------------- |
| `+`      | Adds two numerical values together | `print(2 + 2)` -> `3 ;)`         |
| `-`      | Subtracts two numerical values together | `print(2 - 1)` -> `1`       |
| `*`      | Multiplies two numerical values together | `print(3 * 3)` -> `9`      |
| `/`      | Divides two numerical values together | `print(5 / 2)` -> `2.5`       |
| `%`      | performs a modulus operator on two numerical values | `print(5 % 2)` -> `1` |
> -> means 'outputs'

## Unary

| Operator | Description                  | Example                                |
| -------- | ---------------------------- | -------------------------------------- |
| `!`      | "Not" logical operator, flips the logical polarity. | `print(!true)` -> `false` |
| `#`      | "Count" calls '__count' metamethod on objects or gives the count of entries in tables | `print(#[1,2,3])` -> `3`, `print(#{__count = function(self) return self.x end, x = 1337})` -> `1337` | 
| `++`     | Increment operator.          | `let i = 0 print(++i .. ", " .. i++ .. ", " .. i)` -> `1, 1, 2` |
| `--`     | Decrement operator.          | `let i = 0 print(--i .. ", " .. i-- .. ", " .. i)` -> `-1, -1, -2` |
| `( ... )` | Call operator. Arguments should be separated using `,`. | `print("Hello", " ", "world!")` -> `Hello world!` |
> -> means 'outputs'

## Logical

| Operator | Description                  | Example                                |
| -------- | ---------------------------- | -------------------------------------- |
| `and`    | Logical 'and' operation      | `print(true and 1337)` -> `1337`       |
| `or`     | Logical 'or' operation       | `print(nil or false or 1337)` -> `1337` |
| `==`     | Logical equality operation   | `print(1337 == 1337)` -> `true`        |
| `!=`     | Logical not equality operation | `print(1337 != 1337)` -> `false`        |
| `>=`     | Greater than or equals too   | `print(1337 >= 2000)` -> `false`       |
| `<=`     | Less than or equals too      | `print(1337 <= 2000)` -> `true`        |
| `>`      | Greater than                 | `print(1337 > 2000)` -> `false`        |
| `<`      | Less than                    | `print(1337 < 2000)` -> `true`         |
> -> means 'outputs'