Código Canónico
Tour de Sintaxis: Claridad, Seguridad y Expresividad
Diseñado para eliminar ambigüedades. Joss prescinde del clásico if/else, switch y for heredado de C, adoptando ternarios de bloque, match exhaustivo, foreach con rangos nativos, referencias seguras y guard/defer.
1. Inferencia Estricta & Tipado
var infiere tipos fijos e inmutables. Usa mixed para dinamismo voluntario explícito y const para constantes inmutables.
// Inferencia fija inmutable (int)
var $puerto = 8080
// Tipado explícito
string $servidor = "Astriom Node"
// Dinamismo voluntario explícito
mixed $dato = "inicial"
$dato = [1, 2, 3] // Permitido
// Constantes estrictas
const int $MAX_WORKERS = 64
2. Control de Flujo Funcional
Sin if/else tradicional ni switch. Ternarios con bloque retornables, match exhaustivo y foreach con rangos 1..5.
// Ternario con bloque funcional
($activo) ? {
echo "Servicio operando"
} : {
echo "Servicio en pausa"
}
// Evaluación con match
var $msg = match ($status) {
200 => "Petición exitosa",
404 => "Recurso no existe",
default => "Error interno"
}
// Rango nativo en bucle
foreach (1..5 as $intento) {
echo "Reintento #" . $intento
}
3. Concurrencia con Canales
Tareas asíncronas no bloqueantes con async/await y paso de mensajes mediante canales con make_chan, send y recv.
// Canal con buffer tipado
var $canal = make_chan(10)
// Tarea asíncrona concurrente
var $futuro = async {
return "Reporte analizado con IA"
}
// Espera no bloqueante y paso de mensajes
var $resultado = await $futuro
send($canal, $resultado)
echo "Recibido: " . recv($canal)
4. Clases, Records & Init
Constructor canónico Init, clases nominales con visibilidad estricta y tipos inmutables record con campos constantes automáticos.
// Record inmutable de datos
public record TokenAuth(string $hash, int $expira)
// Clase nominal con constructor
public class ServicioSeguridad {
public string $dominio = ""
Init(string $dominio) {
$this->dominio = $dominio
}
public func auditar(): bool {
return len($this->dominio) > 0
}
}
5. Funciones & Referencias (`ref`)
Parámetros tipados obligatorios (JOSS-TYPE-011), aritmética decimal exacta y paso por referencia mutable seguro no escapable (ref).
// Función pura con decimal exacto
public func calcularTotal(decimal $monto, decimal $tasa): decimal {
return $monto * (1.0m + $tasa)
}
// Referencia mutable segura no escapable
public func incrementar(ref int $contador, int $paso): void {
$contador = $contador + $paso
}
int $visitas = 10
incrementar(ref $visitas, 5) // $visitas = 15
6. Guard, Defer LIFO & Errores
guard para validaciones tempranas con salida obligatoria, y defer garantizado al salir del marco en orden LIFO.
public func procesarCobro(string? $token, decimal $monto): string {
// Salida temprana canónica con guard
guard ($token != null) : {
return "Error: Token requerido"
}
// Cleanup diferido garantizado (LIFO)
defer {
echo "Cierre de sesión de auditoría"
}
return "Cobro de $" . $monto . " aprobado"
}