CSL te ofrece algunas herramientas «similares a arrays» que cubren la mayoría de las necesidades de jugabilidad: arrays fijos, slices y arrays dinámicos. Esta página es la guía práctica para usarlos sin meter la pata.
Glosario rápido
Array fijo: [N]T — el tamaño se conoce en tiempo de compilación.
Slice / array gestionado: []T — una vista sobre datos de un array (a menudo se usa para parámetros).
Array 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 los arrays dinámicos usan -> (p. ej., list->append(x)). Los campos usan . (p. ej., list.count).
Arrays dinámicos ([..]T)
Los arrays dinámicos son el tipo de «lista predeterminado» para el código de jugabilidad.
Si sabes que vas a añadir muchos elementos, reserva primero para evitar reasignaciones repetidas.
Eliminación de elementos
Por lo general 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 arrays a procedimientos
Muchas API aceptan []T (una slice/vista). Los arrays dinámicos se pueden pasar donde []T se espera.
Patrones de iteración
Iterar elementos
Iterar índices (rangos inclusivos)
0..n-1 es común para bucles de tipo «slot»:
Los rangos son inclusivos. Si quieres un bucle típico de «0 a count-1», escribe 0..count-1.
Cláusulas cerradas, callbacks y userdata (importante)
CSL no tienen cláusulas cerradas. Las definiciones en línea proc() { ... } no pueden capturar variables del entorno.
Cuando necesites callbacks (manejadores de UI, ganchos 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 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, mantiene el orden