Arrays y Colecciones
Achronyme tiene dos tipos de colecciones integrados: arrays (listas ordenadas) y mapas (diccionarios clave-valor). Ambos se asignan en el heap, son mutables y pueden contener cualquier tipo de valor.
Crea arrays con corchetes. Accede a los elementos por índice (basado en cero).
let arr = [10, 20, 30]assert(arr[0] == 10)assert(arr[2] == 30)
let mixed = [1, "two", true, nil]assert(mixed.len() == 4)
let nested = [[1, 2], [3, 4]]assert(nested[0][1] == 2)Modifica arrays con asignación por índice, .push() y .pop():
mut nums = [0, 0, 0]nums[0] = 10assert(nums[0] == 10)
mut items = [1, 2]items.push(3)assert(items.len() == 3)
let last = items.pop()assert(last == 3)assert(items.len() == 2)Métodos de Arrays
Sección titulada «Métodos de Arrays»| Método | Descripción |
|---|---|
.len() | Número de elementos |
.push(val) | Agregar al final |
.pop() | Eliminar y devolver el último elemento |
.map(fn) | Transformar cada elemento |
.filter(fn) | Seleccionar elementos que cumplan el predicado |
.reduce(init, fn) | Plegar en un solo valor |
.find(fn) | Primer elemento que cumpla el predicado |
.any(fn) | Verdadero si algún elemento cumple |
.all(fn) | Verdadero si todos los elementos cumplen |
.sort(fn) | Devolver copia ordenada |
.flat_map(fn) | Mapear y aplanar un nivel |
.zip(otra) | Emparejar elementos con otra lista |
.for_each(fn) | Iterar para efectos secundarios |
Consulta Métodos y Namespaces Estáticos para la referencia completa.
Crea mapas con llaves. Las claves pueden ser identificadores sin comillas o cadenas entre comillas.
let person = {name: "Alice", age: 30}assert(person.name == "Alice")assert(person["age"] == 30)
let m = {"hello": 1, "world": 2}assert(m["hello"] == 1)Accede a los valores con notación de punto o notación de corchetes. La notación de corchetes soporta claves dinámicas.
let key = "name"assert(person[key] == "Alice")
let nested = {a: {b: {c: 42}}}assert(nested.a.b.c == 42)Agrega o actualiza campos por asignación o con .set():
mut config = {}config.debug = trueconfig["port"] = 8080config.set("host", "localhost")assert(config.len() == 3)Métodos de Mapas
Sección titulada «Métodos de Mapas»| Método | Descripción |
|---|---|
.len() | Número de pares clave-valor |
.keys() | Lista de todas las claves |
.values() | Lista de todos los valores |
.entries() | Lista de pares [clave, valor] |
.contains_key(clave) | Verificar si la clave existe |
.get(clave, default) | Obtener valor con fallback |
.set(clave, valor) | Agregar o actualizar entrada |
.remove(clave) | Eliminar y devolver valor |
Consulta Métodos y Namespaces Estáticos para la referencia completa.
Iteración
Sección titulada «Iteración»Usa for..in para iterar sobre arrays directamente o sobre claves de mapas con .keys().
mut total = 0for x in [10, 20, 30] { total = total + x}assert(total == 60)
let scores = {math: 95, science: 88, english: 92}mut sum = 0for k in scores.keys() { sum = sum + scores[k]}assert(sum == 275)Patrones
Sección titulada «Patrones»Tabla de despacho — almacena funciones en un mapa para búsqueda dinámica:
let ops = { add: fn(a, b) { a + b }, sub: fn(a, b) { a - b }, mul: fn(a, b) { a * b }}assert(ops.add(10, 3) == 13)assert(ops["mul"](4, 5) == 20)Registros — usa mapas como structs ligeros:
fn make_point(x, y) { return {x: x, y: y}}let p = make_point(3, 4)assert(p.x == 3)Conteo de palabras — claves dinámicas para agregación:
mut counts = {}let words = ["apple", "banana", "apple", "cherry", "banana", "apple"]for w in words { if counts[w] == nil { counts[w] = 0 } counts[w] = counts[w] + 1}assert(counts.apple == 3)assert(counts.banana == 2)Pipelines funcionales — encadena métodos para transformar datos:
let result = [1, 2, 3, 4, 5, 6] .filter(fn(n) { n % 2 == 0 }) .map(fn(n) { n * 10 })assert(result == [20, 40, 60])Estructuras anidadas — arrays de mapas, mapas de arrays:
let people = [ {name: "Alice", age: 30}, {name: "Bob", age: 25}]assert(people[0].name == "Alice")
mut bag = {items: []}bag.items.push("sword")bag.items.push("shield")assert(bag.items.len() == 2)