# Lucia language overview

## Learning objective
- Understand the complete feature map of Lucia and where each concept fits.

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

## Examples
- Control flow: `if`, `else if`, `else`, `switch/case/default`, `while`, `for`, `do/while`, `for...in`.
- Declarations: `let`, `const`.
- Types: `int`, `float`, `bool`, `string`, `date`, `datetime`, `void`, `any`.
- Collections: `list<T>`, `dict<K, V>`, literals, indexing.
- OOP: `class`, `extends`, `constructor`, properties, methods, `this`.
- Modules: `import "./module.lucia";`.
- Expressions: arithmetic, logical, comparison, assignment, ternary, null coalescing `??`.
- Strings: interpolation with `${expr}`.

## What is commonly missed
- In class methods, peer methods can be called with or without `this`:
```lucia
func toString(): string {
	return obtenerNombreValor() + " " + obtenerNombrePalo();
}
```
- Field access may use `this.field` or implicit field names when there is no local shadowing.
- Empty collections can adopt the target type from context:
```lucia
let players: list<Jugador> = [];
players = [];

let scores: dict<string, int> = {};
scores = {};
```
- Indexed assignment is valid for list/dict targets:
```lucia
this.mazo[i] = this.mazo[j];
this.mazo[j] = temp;
```
- Use `len(listOrDict)` for size. Do not use `.length()`.

## Common mistakes
- Mixing concepts before mastering declarations and types.
- Ignoring diagnostics while learning new syntax.

## Suggested learning path
- Start with `examples/00_features.lucia` to cover declarations, collections, loops, and classes.
- Continue with `examples/10_inheritance_const.lucia` for inheritance and const fields.
- Then build a two-file mini project using `import`, one model class, and one runner script.

## Suggested practice
- Build a mini app that uses imports, classes, lists, conditionals, and interpolation.

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