🔣 Operadores Customizáveis
Defina seus próprios operadores como Swift/Kotlin
Pipeline
// |> - Pipe (envia resultado para próxima função)
let result = [1,2,3]
|> map(fn(x) => x * 2)
|> filter(fn(x) => x > 2)
|> sum()
// Equivalente a: sum(filter(map([1,2,3], fn(x) => x * 2), fn(x) => x > 2))
Composition
// >> - Compose (compõe funções)
// f >> g = fn(x) => g(f(x))
let f = fn(x) => x + 1
let g = fn(x) => x * 2
let h = f >> g
h(5) // (5 + 1) * 2 = 12
// << - Compose reverso
// f << g = fn(x) => f(g(x))
Null-safe
// ?.- Null-safe property access
let user = {name: "John", address: null}
let city = user?.address?.city // null (não quebra)
// ?[] - Null-safe index
let arr = [1, 2]
let x = arr?[10] // null
// ?.() - Null-safe call
let fn: (fn) = null
fn?.() // null (não quebra)
Spaceship
// <=> - Spaceship (retorna -1, 0, ou 1)
5 <=> 3 // 1 (maior)
3 <=> 5 // -1 (menor)
5 <=> 5 // 0 (igual)
// Útil para sorting
sort_by(users, fn(a, b) => a.age <=> b.age)
Elvis
// ?: - Elvis (default value)
let name = user.name ?: "Guest"
let config = value ?: "default"
// ??= - Null-coalescing assignment
current_user ??= new_user
Method Reference
// :: - Method reference
let adder = Int::plus
adder(2, 3) // 5
// Property reference
let len = String::length
len("hi") // 2
// Passando como callback
let lengths = ["a", "bb"] |> map(String::length)