# ShortLang
A programming language designed for code golfing
# ShortLang Documentation
Welcome to the official documentation for ShortLang, a fast and concise interpreted programming language designed for code golfing. ShortLang is implemented in Rust and boasts a performance that is 5 times faster than Python.
## Table of Contents
1. [Basic Data Types](#basic-data-types)
2. [Hello World](#hello-world)
3. [Operators](#operators)
4. [Variables](#variables)
5. [Arrays](#arrays)
6. [Functions](#functions)
- [Inline Function](#inline-function)
- [Multiline Function](#multiline-function)
7. [Comments](#comments)
8. [Conditional Statements](#conditional-statements)
9. [Loops](#loops)
## Basic Data Types
- `int`
- `float`
- `bool`
- `array`
- `nil`
## Hello World
To print "Hello World" to the standard output with a newline, use:
```
$"Hello World"
```
If you want to print without a newline, use:
```
$$"Hello World"
```
ShortLang provides `print` and `println` functions in the standard library for the same purpose.
For the sake of readability, we'll use `print` and `println` in the examples.
## Operators
| Operator | Description |
|----------|------------------------ |
| `+` | Addition |
| `-` | Subtraction |
| `*` | Multiplication |
| `/` | Division |
| `%` | Modulus |
| `++` | Increment |
| `--` | Decrement |
| `**` | Exponent |
| `<` | Less than |
| `>` | Greater than |
| `==` | Equal than |
| `<=` | Less than or equal to |
| `>=` | Greater than or equal to |
| `&&` | And |
| `\|\|` | Or |
## Variables
Variables can be created without a semicolon. For example:
```
var_name = value
```
```
number = 42
$("The number is: " + number)
```
## Arrays
The following code shows an example array
```
fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]
$("5th fibonacci number is " + fibonacci[5])
```
## Functions
### Inline Function
Similar to lambda function in python
```
add a b: a + b
println(add(10, 20)) // prints 30
```
### Multiline Function
```
add a b: {
println("You are adding: " + a + " and " + b)
a + b
}
println(add(10, 20))
```
The last expression in a multiline function is the return value.
You can also use `&` explicitly to denote the return value, if it is not at the end of the function.
```
max a b: {
a > b ? &a : &b
$"this line won't be printed"
}
```
## Comments
Comments start with `//`.
## Conditional Statements
Ternary operator for if-else:
```
a = 1
a == 1 ? println("The expression is true") : println("The expression is false")
```
Block execution:
```
true ? {
// code here will be executed
} : {
// if condition is false
}
```
The else block can be removed
```
a == 10 ? println("a is equal to 10")
```
## Loops
ShortLang currently supports a `while` loop:
```
>. condition {
// code to be executed while the condition is true
}
```
```
i = 0
>. i < 10 {
$("Value of i is: " + i)
i ++
}
```
This code prints:
```
Value of i is: 0
Value of i is: 1
Value of i is: 2
Value of i is: 3
Value of i is: 4
Value of i is: 5
Value of i is: 6
Value of i is: 7
Value of i is: 8
Value of i is: 9
```
## Misc
### Factorial function example
```
factorial x: x < 2 ? 1 : x * factorial(x - 1)
$factorial(30)
```
Prints
```
265252859812191058636308480000000
```