# Mapa del lenguaje Lucia

## Objetivo de aprendizaje
- Entender el mapa completo de funcionalidades de Lucia y como conectarlas.

## Sintaxis clave
```lucia
let x: int = 10;
const title: string = "Lucia";
if (x > 0) { print(title); }
```

## Ejemplos
- Flujo de control: `if`, `else if`, `else`, `switch/case/default`, `while`, `for`, `do/while`, `for...in`.
- Declaraciones: `let`, `const`.
- Tipos: `int`, `float`, `bool`, `string`, `date`, `datetime`, `void`, `any`.
- Colecciones: `list<T>`, `dict<K, V>`, literales e indexacion.
- POO: `class`, `extends`, `constructor`, propiedades, metodos, `this`.
- Modulos: `import "./module.lucia";`.
- Expresiones: operadores, ternario y null coalescing `??`.
- Strings: interpolacion con `${expr}`.

## Caracteristicas que se suelen omitir
- En metodos de clase puedes llamar metodos hermanos con o sin `this`:
```lucia
func toString(): string {
	return obtenerNombreValor() + " " + obtenerNombrePalo();
}
```
- El acceso a campos tambien puede ser implicito cuando no hay sombreado local.
- Las colecciones vacias adoptan tipo por contexto:
```lucia
let jugadores: list<Jugador> = [];
jugadores = [];

let puntajes: dict<string, int> = {};
puntajes = {};
```
- Es valida la asignacion por indice:
```lucia
this.mazo[i] = this.mazo[j];
this.mazo[j] = temp;
```
- Para tamano usa `len(x)`, no `x.length()`.

## Errores comunes
- Intentar mezclar demasiados conceptos sin dominar tipos y declaraciones.
- Ignorar diagnosticos mientras se aprende sintaxis nueva.

## Ruta sugerida
- Inicia con `examples/00_features.lucia` para base del lenguaje.
- Continua con `examples/10_inheritance_const.lucia` para herencia y campos const.
- Luego arma un mini proyecto de 2 archivos con import, clase modelo y flujo de ejecucion.

## Practica sugerida
- Construye una mini app con imports, clases, listas, condicionales e interpolacion.

## Relacionados
- syntax-control-flow
- types-and-collections
- oop-and-modules
