En esta página
Operadores
Operadores Aritméticos¶
| Operador | Descripción | Ejemplo |
|---|---|---|
+ |
Suma | 3 + 2 → 5 |
- |
Resta | 10 - 4 → 6 |
* |
Multiplicación | 3 * 4 → 12 |
/ |
División | 10 / 3 → 3 |
% |
Módulo | 10 % 3 → 1 |
** |
Exponenciación | 2 ** 8 → 256 |
Operadores de Comparación¶
| Operador | Descripción | Ejemplo |
|---|---|---|
== |
Igual | x == 5 |
!= |
Diferente | x != 0 |
< |
Menor que | x < 10 |
> |
Mayor que | x > 0 |
<= |
Menor o igual | x <= 100 |
>= |
Mayor o igual | x >= 1 |
Operadores Lógicos¶
| Operador | Descripción | Ejemplo |
|---|---|---|
&& |
Y lógico | a && b |
|| |
O lógico | a || b |
! |
NO lógico | !flag |
Operadores de Asignación¶
| Operador | Descripción | Ejemplo |
|---|---|---|
= |
Asignación | x = 10 |
+= |
Sumar y asignar | x += 5 |
-= |
Restar y asignar | x -= 3 |
*= |
Multiplicar y asignar | x *= 2 |
/= |
Dividir y asignar | x /= 4 |
%= |
Módulo y asignar | x %= 3 |
Operador Pipe |>¶
El operador pipe pasa la expresión de la izquierda como el primer argumento a la función de la derecha. Esto crea un flujo de datos natural de arriba hacia abajo:
// Without pipe — hard to read (inside-out)
let result = collect(filter(map(list, |x| x * 2), |x| x > 5))
// With pipe — natural flow
let result = list
|> map(|x| x * 2)
|> filter(|x| x > 5)
|> collect()Cómo Funciona¶
a |> f(b, c) se transforma en f(a, b, c) — el lado izquierdo se convierte en el primer argumento.
" Hello World "
|> string.trim()
|> string.split(" ")
|> Array.map(|s| string.to_upper(s))
|> Array.join(", ")Pipe con Marcador de Posición _¶
Cuando el valor pasado por el pipe no debe ser el primer argumento:
users
|> sort(_, by: .name)
|> group(_, key: |u| u.age)Operador Tap &.¶
Ejecuta un efecto secundario sin interrumpir la cadena — el valor original pasa sin cambios. Perfecto para depuración y logging:
list
|> sort()
&. print() // prints the sorted list, passes it along
|> filter(|x| x > 0)
&. |x| log(x) // debug log
|> collect()Cómo Funciona¶
a &. f() llama a f(a) por su efecto secundario y luego devuelve a sin cambios.
Encadenamiento Opcional ?.¶
Accede de forma segura a campos en valores que podrían ser nil:
let city = user?.address?.city // nil if any part is nilSin encadenamiento opcional, necesitarías verificaciones anidadas de nil:
// Equivalent without ?.
let city = if user != nil {
if user.address != nil {
user.address.city
} else { nil }
} else { nil }Coalescencia Nula ??¶
Proporciona un valor por defecto cuando el lado izquierdo es nil:
let name = user?.name ?? "Anonymous"
let port = config?.port ?? 8080Combinando con Encadenamiento Opcional¶
let city = user?.address?.city ?? "unknown"Propagación de Error ?¶
Propaga errores hacia arriba en la pila de llamadas, similar a Rust:
fn read_config(path: str) -> Result<Config, Error> {
let text = fs.read(path)? // returns early on error
let config = json.parse(text)?
Result.Ok(config)
}Cuando ? se aplica a un Result.Err, la función retorna inmediatamente con ese error. Cuando se aplica a Result.Ok(value), desenvuelve a value.
Operadores de spread¶
Zolo usa dos grafías de forma intencional:
...valorexpande un array dentro de un literal de array...valorcopia campos dentro de un literal de struct nombrado.
let a = [1, 2, 3]
let b = [0, ...a, 4, 5]
print(b)
struct User {
name: str,
age: int,
}
let alice = User { name: "Alice", age: 30 }
let bob = User { name: "Bob", ..alice }
print("{bob.name} tiene {bob.age} años")Salida:
[0, 1, 2, 3, 4, 5]
Bob tiene 30 añosLos campos nombrados tienen prioridad sobre los campos copiados, por lo que
name: "Bob" reemplaza alice.name. Una copia pura es User { ..alice }.
Los literales de mapa usan #{ clave: valor }; { ...map } no es sintaxis de
spread de mapas.
Operadores de Rango¶
| Operador | Descripción | Ejemplo |
|---|---|---|
.. |
Rango exclusivo | 0..10 → 0 a 9 |
..= |
Rango inclusivo | 0..=10 → 0 a 10 |
for i in 0..5 { // 0, 1, 2, 3, 4
print(i)
}
for i in 0..=5 { // 0, 1, 2, 3, 4, 5
print(i)
}Precedencia de Operadores¶
De mayor a menor:
- Unario:
-x,!x - Exponenciación:
** - Multiplicativo:
*,/,% - Aditivo:
+,- - Rango:
..,..= - Comparación:
<,>,<=,>= - Igualdad:
==,!= - Y lógico:
&& - O lógico:
|| - Coalescencia nula:
?? - Pipe:
|> - Tap:
&. - Asignación:
=,+=,-=,*=,/=,%=