CSL te ofrece algunas herramientas “tipo arreglo” que cubren la mayoría de las necesidades de juego: arreglos fijos, slices y arreglos dinámicos. Esta página es la guía práctica para usarlos sin errores graves.
Glosario rápido
Arreglo fijo: [N]T — el tamaño se conoce en tiempo de compilación.
Slice / arreglo gestionado: []T — una vista sobre datos de arreglo (a menudo usado para parámetros).
Arreglo dinámico: [..]T — lista redimensionable con conteo y capacidad.
fixed:[4]int={1,2,3,4};view:[]int=fixed;// vista slicelist:[..]int;list->append(10);list->append(20);
Los métodos de arreglos dinámicos usan -> (p. ej. list->append(x)). Los campos usan . (p. ej. list.count).
Arreglos dinámicos ([..]T)
Los arreglos dinámicos son el tipo de “lista por defecto” para el código de juego.
Si sabes que agregarás muchos elementos, reserva primero para evitar realocaciones repetidas.
Eliminar elementos
Generalmente eliges entre eliminación rápida (el orden no importa) y eliminación ordenada (preserva el orden).
También puedes eliminar por índice:
Limpiar
Pasar arreglos a procedimientos
Muchas APIs aceptan []T (una slice/vista). Los arreglos dinámicos pueden pasarse donde []T se espera.
Patrones de iteración
Iterar elementos
Iterar índices (rangos inclusivos)
0..n-1 es común para bucles “estilo ranura”:
Los rangos son inclusivos. Si quieres un bucle típico “0 a count-1”, escribe 0..count-1.
Closures, callbacks y userdata (importante)
CSL no tienen closures. Las proc() { ... } definiciones en línea no pueden capturar variables circundantes.
Cuando necesites callbacks (manejadores de UI, hooks de muerte, etc.), empareja el callback con un userdata: Object campo.
Referencia de la API
Cada proyecto incluye una api_reference/ carpeta que contiene la superficie de la API central más reciente. Si estás intentando encontrar “¿qué métodos existen en este tipo?”, esa carpeta es la fuente de la verdad.
values: [..]int;
values->append(10);
values->append(20);
values->append(30);
values->unordered_remove_by_value(20); // intercambia con el último, rápido
values->ordered_remove_by_value(10); // desplaza, conserva el orden