En esta página
Guía Rápida de Zolo
Variables¶
let x = 10 // inmutable
let mut y = 0 // mutable
const PI = 3.14 // constanteTipos¶
int f64 str bool nil
[int] // array
{str: int} // map
(int, str) // tupla
int? // opcional
fn(int) -> int // tipo de función
Map<str, int> // genéricoFunciones¶
fn add(a: int, b: int) -> int { a + b }
let double = |x| x * 2 // lambda
fn apply(f: fn(int) -> int, x: int) -> int { f(x) }Flujo de Control¶
if cond { } else if cond2 { } else { }
let x = if cond { a } else { b } // expresión if
if let Some(v) = opt { use(v) } // if let
match val { 0 => "zero", _ => "other" }Bucles¶
for i in 0..10 { } // rango exclusivo
for i in 0..=10 { } // rango inclusivo
for item in list { } // iterar
for (i, v) in pairs { } // desestructurar
while cond { }
while let Some(x) = iter() { } // while let
loop { break }Structs¶
struct Point { x: f64, y: f64 }
let p = Point { x: 1.0, y: 2.0 }
impl Point { fn dist(self) -> f64 { ... } }Enums¶
enum Color { Red, Green, Blue }
enum Shape { Circle(f64), Rect(f64, f64) }
let s = Shape::Circle(5.0)Traits¶
trait Display { fn show(self) -> str }
impl Display for Point { fn show(self) -> str { "..." } }Coincidencia de Patrones¶
match value {
0 => "zero",
n if n < 0 => "negative",
Shape::Circle(r) => "circle {r}",
Point { x, y } => "({x},{y})",
'a' | 'b' => "ab",
_ => "other",
}Operadores¶
// Aritméticos: + - * / % **
// Comparación: == != < > <= >=
// Lógicos: && || !
// Asignación: = += -= *= /= %=
// Pipe: |> a |> f() → f(a)
// Tap: &. a &. f() → f(a); a
// Opcional: ?. a?.b → nil si a es nil
// Coalescencia: ?? a ?? b → b si a es nil
// Propagación: ? expr? → retorno anticipado en error
// Spread: ... [...a, ...b]
// Rango: .. 0..10 (exclusivo)
// Rango incl: ..= 0..=10 (inclusivo)Cadenas¶
"Hello, {name}!" // interpolación
"""multiline""" // multilínea
sql"SELECT * FROM t WHERE id={x}" // plantilla con etiquetaDecoradores¶
@test fn test_it() { ... } // función de prueba
@memoize fn fib(n) { ... } // resultados en caché
@deprecated("msg") fn old() { } // advertencia de obsolescencia
@builder struct Config { ... } // patrón builderBiblioteca Estándar¶
// Cadena
string.trim(s) string.split(s, sep) string.contains(s, sub)
// Array
Array.map(a, f) Array.filter(a, f) Array.reduce(a, f, init)
Array.push(a, v) Array.len(a) Array.sort(a)
// Map
Map.new() Map.set(m, k, v) Map.get(m, k) Map.keys(m)
// Set
Set.from(arr) Set.add(s, v) Set.has(s, v) Set.union(a, b)
// Option
Option.Some(v) Option.None() Option.unwrap_or(o, def)
// Result
Result.Ok(v) Result.Err(e) Result.unwrap(r)
// Iterator
Iter.from(a) |> Iter.map(f) |> Iter.filter(f) |> Iter.collect()CLI¶
zolo run file.zolo # ejecutar
zolo compile file.zolo # mostrar salida Lua
zolo check file.zolo # solo verificar tipos
zolo test file.zolo # ejecutar funciones @test
zolo fmt file.zolo # formatear
zolo repl # REPL interactivoComparación con Lua¶
| Zolo | Lua |
|---|---|
let x = 10 |
local x = 10 |
fn f() { } |
function f() end |
|x| x * 2 |
function(x) return x*2 end |
arr[0] |
arr[1] |
if c { } |
if c then end |
a |> f() |
f(a) |
struct S { } |
tabla + metatabla |
enum E { A(x) } |
{__tag="A", x} |