Tipos de datos

Forja es tipado estáticamente con inferencia de tipos. No necesitás declarar el tipo siempre, pero podés hacerlo si querés mayor claridad.

Tabla de tipos

Tipo ForjaTipo RustDescripciónEjemplo
Enteroi64Entero con signo (64 bits)42, -10
Decimalf64Punto flotante (64 bits)3.14, -0.5
TextoStringCadena UTF-8"Hola"
BooleanoboolValor lógicoverdadero, falso
nulo()Valor nulo / unitnulo
[T]Vec<T>Arreglo dinámico[1, 2, 3]
{K: V}HashMap<K, V>Mapa / diccionario{"clave": "valor"}
TipoenumAlgebraico (con tipo)Opcion = Algo | Nada

Booleanos en español

En lugar de true / false, Forja usa palabras en español:

🔘 Valores booleanos
variable activo = verdadero
variable inactivo = falso
variable es_mayor = edad >= 18  // resultado: verdadero o falso

Literales numéricos

🔢 Números
variable entero = 42       // Entero (i64)
variable decimal = 3.14    // Decimal (f64)
variable negativo = -10    // Entero negativo

Literales de texto

📝 Strings
variable saludo = "Hola mundo"

// Caracteres de escape
variable multilinea = "Línea 1\nLínea 2"
variable tabulado = "Col1\tCol2"

Arreglos

📦 Colecciones
variable numeros = [1, 2, 3, 4, 5]
variable nombres = ["Ana", "Juan", "Pedro"]

// Acceso por índice
numeros[0]  // → 1

// Longitud
numeros.length()  // → 5

// Modificar
numeros[2] = 99

Mapas (diccionarios)

🗺️ Mapas
variable persona = {"nombre": "Ana", "edad": 30}
// Acceso por clave
persona["nombre"]  // → "Ana"

// Modificar valor
persona["edad"] = 31

Tipos algebraicos (enums)

Forja permite definir tipos algebraicos con la palabra clave tipo. Son ideales para representar datos que pueden tomar diferentes formas.

📐 Sintaxis
tipo Nombre = Variante1 | Variante2 | Variante3(Tipo1, Tipo2)
🎯 Ejemplos
// Opción: puede ser Algo (con valor) o Nada
tipo Opcion = Algo | Nada

// Resultado: Exito con valor, o Error con mensaje
tipo Resultado = Exito(Entero) | Error(Texto)

// Color: variantes sin datos extra
tipo Color = Rojo | Verde | Azul

Anotaciones explícitas

Cuando querés ser específico con los tipos:

📝 Tipado explícito
variable nombre: Texto = "Ana"
variable edad: Entero = 25
variable altura: Decimal = 1.75
constante activo: Booleano = verdadero

Equivalencia con Rust

ForjaRust
Enteroi64
Decimalf64
TextoString
Booleanobool
nulo()
[valor, ...]vec![valor, ...]
{"k": v}HashMap
tipo X = A | Benum X { A, B }