Ejemplos completos

Todos los ejemplos están en la carpeta examples/ y se ejecutan con:

⚡ Ejecutar un ejemplo
cargo run --release --bin forja -- run examples/.fa

1. Hola Mundo

El clásico de clásicos. Tu primer programa en Forja:

📄 examples/01_hola.fa
// Programa Hola Mundo en Forja
escribir("¡Hola, mundo desde Forja!")
💡 Output: ¡Hola, mundo desde Forja!

2. Variables y constantes

📄 examples/02_variables.fa
variable nombre = "Gaucho"
variable edad = 30
constante altura = 1.85

escribir("Nombre: " + nombre)
escribir("Edad: " + edad)

edad = 31
escribir("Nueva edad: " + edad)

// altura = 2.0  // ❌ ErrorDePropiedad (es constante)

3. Tipos explícitos

📄 examples/03_tipos.fa
variable nombre: Texto = "Gaucho"
variable edad: Entero = 30
variable altura: Decimal = 1.85
constante activo: Booleano = verdadero

// Sin tipo (inferido automáticamente)
variable ciudad = "Buenos Aires"

escribir("Edad: " + edad)
escribir("Altura: " + altura)

4. Funciones

📄 examples/07_funciones.fa
funcion suma(a, b) {
    retornar a + b
}

variable resultado = suma(3, 4)
escribir("Suma: " + resultado)

funcion saludo(nombre) {
    escribir("Hola, " + nombre + "!")
}

saludo("Mundo")
saludo("Forja")

5. Condicionales

📄 examples/05_condicionales.fa
variable x = 10
variable y = 5

si (x > y) {
    escribir("x es mayor que y")
} sino {
    escribir("x no es mayor que y")
}

// Anidados
variable nota = 85
si (nota >= 90) {
    escribir("Excelente!")
} sino {
    si (nota >= 70) {
        escribir("Buen trabajo!")
    } sino {
        escribir("Sigue intentando!")
    }
}

6. Bucles

📄 examples/06_bucles.fa
// Mientras
variable contador = 0
mientras (contador < 5) {
    escribir("Contador: " + contador)
    contador = contador + 1
}

// Para
para (variable i = 0; i < 3; i = i + 1) {
    escribir("i = " + i)
}

// Repetir
repetir (4) {
    escribir("Esto se repite 4 veces")
}

7. Clases y POO

📄 examples/10_clases.fa
clase Estudiante {
    nombre
    edad

    constructor(n, e) {
        este.nombre = n
        este.edad = e
    }

    funcion presentarse() {
        escribir("Hola, soy " + este.nombre +
                " y tengo " + este.edad + " años")
    }

    funcion esMayorDeEdad() -> Booleano {
        retornar este.edad >= 18
    }
}

variable alumno = nuevo Estudiante("Ana", 20)
alumno.presentarse()

si (alumno.esMayorDeEdad()) {
    escribir("Es mayor de edad")
} sino {
    escribir("Es menor de edad")
}

8. Pattern Matching

📄 examples/112_match_exhaustivo.fa
variable dia = 3

coincidir (dia) {
    caso 1 → {
        escribir("Lunes")
    }
    caso 2 → {
        escribir("Martes")
    }
    caso 3 → {
        escribir("Miércoles")
    }
    caso _ → {
        escribir("Otro día")
    }
}

9. Tipos algebraicos (enums)

📄 examples/111_match_enum.fa
tipo Resultado = Exito(Entero) | Error(Texto)

funcion dividir(a, b) {
    si (b == 0) {
        retornar Error("No se puede dividir por cero")
    } sino {
        retornar Exito(a / b)
    }
}

variable res = dividir(10, 2)

coincidir (res) {
    caso Exito(valor) → {
        escribir("Resultado: " + valor)
    }
    caso Error(msg) → {
        escribir("Error: " + msg)
    }
}
// → Resultado: 5

10. Módulos (importar)

📄 main + modulos/utilidades.fa
// main.fa
importar "modulos/utilidades"

escribir(sumar(5, 3))
escribir(restar(10, 4))
📄 modulos/utilidades.fa
funcion sumar(a, b) {
    retornar a + b
}

funcion restar(a, b) {
    retornar a - b
}

11. Arreglos

📄 examples/08_arrays.fa
variable numeros = [10, 20, 30, 40, 50]
escribir("Primer elemento: " + numeros[0])
escribir("Cantidad: " + numeros.length())

// Modificar elementos
numeros[2] = 99
escribir("Elemento modificado: " + numeros[2])

12. Strings

📄 examples/09_strings.fa
// Concatenación
variable saludo = "Hola"
variable nombre = "Mundo"
escribir(saludo + ", " + nombre + "!")

// Strings con números
variable edad = 25
escribir("Tengo " + edad + " años")

13. Mapas (diccionarios)

📄 examples/11_mapas.fa
variable persona = {"nombre": "Ana", "edad": 30}
escribir("Nombre: " + persona["nombre"])
escribir("Edad: " + persona["edad"])

// Modificar valores
persona["edad"] = 31
escribir("Nueva edad: " + persona["edad"])

14. Entrada de usuario

📄 examples/12_input.fa
escribir("¿Cómo te llamás?")
variable nombre = leer()
escribir("Hola, " + nombre + "!")

15. Juego: Adivina el número

📄 examples/14_adivina.fa
// Juego completo: adiviná el número secreto
escribir("🎯 Adiviná el número (1-100)")

variable secreto = 42
variable intento = 0
variable adivinado = falso

mientras (!adivinado) {
    escribir("Tu intento: ")
    variable guess = leer()
    intento = intento + 1

    si (guess < secreto) {
        escribir("📈 Más alto")
    } sino si (guess > secreto) {
        escribir("📉 Más bajo")
    } sino {
        escribir("🎉 Correcto! Lo lograste en " + intento + " intentos")
        adivinado = verdadero
    }
}

16. Traits y polimorfismo

📄 examples/91_trait_simple.fa
trait Volador {
    funcion volar() → Texto
}

clase Pajaro {
    nombre
    constructor(n) { este.nombre = n }
}

implementa Volador para Pajaro {
    funcion volar() → Texto {
        retornar "este.nombre  está volando"
    }
}

17. Concurrencia

📄 examples/70_concurrencia.fa
variable tx, rx = canal()

hilo {
    tx.enviar("Hola desde el hilo")
}

variable msg = rx.recibir()
escribir(msg) // → Hola desde el hilo

18. GUI nativa

📄 examples/204_login_final.fa
importar "gui"

funcion login() {
    si (usuario && clave) {
        escribir("Ingresando...")
    }
}

funcion main() {
    columna(
        etiqueta("Iniciar sesión"),
        entrada_texto("usuario"),
        entrada_texto("clave"),
        boton("Ingresar", &login)
    )
}

Probarlos todos

Ejecutá cualquiera de estos ejemplos con:

⚡ Lista de ejemplos disponibles
# Básicos (01-09)
forja run examples/01_hola.fa
forja run examples/02_variables.fa
forja run examples/03_tipos.fa
forja run examples/04_operaciones.fa
forja run examples/05_condicionales.fa
forja run examples/06_bucles.fa
forja run examples/07_funciones.fa
forja run examples/08_arrays.fa
forja run examples/09_strings.fa

# Intermedios (10-14)
forja run examples/10_clases.fa
forja run examples/11_mapas.fa
forja run examples/12_input.fa
forja run examples/13_errores.fa
forja run examples/14_adivina.fa

# Avanzados (traits, concurrencia, GUI)
forja run examples/91_trait_simple.fa
forja run examples/70_concurrencia.fa
cargo run --features gui --bin forja -- run --native examples/204_login_final.fa