sabato 14 febbraio 2026

GDScript - Array (parte 1), metodi di base

Godot - GDScript In GDScript, gli array sono strutture dati fondamentali che permettono di memorizzare più valori in un’unica variabile. Possono contenere diversi tipi di dati, come numeri, stringhe o oggetti, e sono dinamici, quindi possono crescere o ridursi durante l’esecuzione. Offrono metodi utili per aggiungere, rimuovere e accedere facilmente agli elementi. Nei giochi sono essenziali per gestire liste ordinate di dati, come l'inventario di un giocatore o i nemici in scena.

A cosa servono gli array

Ogni programma deve memorizzare dati, che normalmente vengono salvati in una o più variabili. Tuttavia, quando le informazioni aumentano, anche il numero di variabili necessarie cresce, rendendo il codice meno ordinato e più difficile da gestire. In questi casi, un array rappresenta una soluzione più pratica ed efficiente.

Un array può essere visto come un’unica variabile capace di contenere molti elementi. I dati vengono raccolti in una struttura organizzata, particolarmente utile quando condividono una caratteristica comune. Ad esempio, in un videogioco si può usare un array per memorizzare un inventario, un altro array per le armi disponibili al giocatore.

Gli array sono estremamente versatili e possono essere utilizzati in moltissime situazioni, a seconda del tipo di gioco che si sta sviluppando. Sono tra gli strumenti più comuni per l’archiviazione dei dati, insieme alle variabili singole. Per questo motivo è fondamentale imparare a crearli, popolarli e accedere correttamente ai loro elementi.

Creazione e struttura degli array, accesso agli elementi

Per definire un array si usa la seguente sintassi:

var nome_array = [elem_1, elem_2, ..., elem_n]

All'interno delle parentesi quadre si inseriscono gli elementi che costituiscono l'array separati da virgole. A differenza delle variabili comuni, in GDScript gli elementi di un array possono essere di qualsiasi tipo. Un array può essere immaginato come una fila di elementi, dove ciascun elemento occupa una posizione chiamata indice. L'array vuoto è rappresentato da una parentesi quadra aperta ed una chiusa, ossia [ ], non contiene elementi (quindi non ha posizioni valide).

Gli indici di un array sono numerati a partire 0, quindi un array ad n elementi ha n posizioni numerate da 0 a n-1; Il primo elemento dell'array ha indice 0, l'ultimo ha indice n-1; si possono usare numeri negativi per gli indici (è come percorrere l'array a partire dall'ultimo elemento): in questo caso l'ultimo elemento ha indice -1, il penultimo ha indice -2, ..., il primo ha indice -n.

Struttura array

Dato un array a di dimensione n:

  • se usiamo la numerazione positiva degli indici, allora a[0] è il primo elemento, a[1] è il secondo elemento, ..., a[n-1] è l'ultimo elemento;
  • se usiamo la numerazione negativa delgi indici, allora a[-1] è l'ultimo elemento, a[-2] è il penultimo elemento, ..., a[-n] è il primo elemento;
  • in generale a[i] è l'i-esimo elemento dell'array e per assegnargli un valore si usa la sintassi 
    a[i] = valore

ESEMPIO 1

Definizione array

OUTPUT dell'esecuzione (estendi l'area di testo se necessario):


ESEMPIO 2

Assegnazione di valori ad elementi dell'array

OUTPUT dell'esecuzione (estendi l'area di testo se necessario):


Array con tipi

A partire da Godot 4 è possibile dichiarare array tipizzati, ed è una pratica consigliata perché migliora leggibilità e controllo degli errori. In questo modo l’array potrà contenere solo elementi del tipo specificato: se si provano ad aggiungere un valore di tipo diverso, Godot segnalerà un errore. Per definire un array tipizzato si usa la seguente sintassi:

var nome_array: Array[tipo] = [elem_1, ..., elem_n]

NOTA: se si omette la parte [tipo] si definisce un array generico.

ESEMPIO

array con tipi

OUTPUT dell'esecuzione (estendi l'area di testo se necessario):


Chiamata di metodi da parte degli oggetti

Gli array sono oggetti, ossia istanze di una particolare classe definita in modo astratto. Le classi definiscono dei metodi, il nome con cui si identificano procedure o funzioni che eseguono compiti specifici; le variabili che rappresentano istanze di una certa classe classe possono usare i metodi in essa definiti. Si dice che un oggetto invoca un metodo quando è necessario eseguire sull'oggetto (o per conto di esso) elaborazioni specifiche.

La sintassi usata per l'invocazione di metodi è la "sintassi del punto":

nome_oggetto.nome_metodo(<eventuali parametri>)

Si scrive il nome della variabile oggetto, seguito da un punto ".", seguito dal nome del metodo invocato e due parentesi tonde, all'interno delle quali ci possono essere zero o più parametri. I parametri tra parentesi tonde sono dati necessari all'esecuzione del metodo.

Metodi di base degli array: size()resize() e fill()

I metodi di base per la costruzione e la gestione degli array sono:

  • size(), restituisce la dimensione dell'array (il numero totale di elementi contenuti in esso) come valore intero (int).
    Sintassi: nome_array.size()
  • resize(n), ridimensiona un array alla dimensione desiderata n.
    Sintassi: nome_array.resize(n)
  • fill(k), assegna il valore k a tutti gli elementi dell'array.
    Sintassi: nome_array.fill(k)

ESEMPIO

Dimensione degli array

OUTPUT dell'esecuzione (estendi l'area di testo se necessario):

A partire da Godot 4, si può definire un array ad n elementi senza assegnare manualmente alcun valore: prima si crea un array vuoto e poi lo si ridimensiona ad una dimensione stabilita con la funzione resize(). Opzionalmente si possono impostare tutti gli elementi dell'array allo stesso valore usando la funzione fill(). Se non si assegna alcun valore, viene assegnato un valore predefinito:

  • se l'array non è tipizzato tutti gli elementi avranno valore null;
  • se l'array è tipizzato tutti gli elementi avranno valore:
    • 0 per gli int;
    • 0.0 per i float;
    • false per i bool;
    • la stringa vuota "" per String;
    • null per gli oggetti.

ESEMPIO

Funzioni resize() e fill()

OUTPUT dell'esecuzione (estendi l'area di testo se necessario):


Struttura in memoria degli array

Gli array sono strutture dati che memorizzano i loro elementi in locazioni di memoria contigue (cioè consecutive). Possono essere immaginati come elementi messi in fila, dove il primo elemento si chiama front (o testa, cioè l'elemento "frontale") e l'ultimo elemento si chiama back (o coda).

Struttura array in memoria

Questo tipo di organizzazione deve essere tenuto bene a mente, perché alcune operazioni sugli array possono avere un notevole costo computazionale a causa degli spostamenti in memoria di un numero potenzialmente elevato di elementi.

Aggiungere e rimuovere elementi dinamicamente

Aggiungere elementi

Il modo migliore di creare un array è sapere sin da subito il numero n di elementi di cui è costituito e crearlo direttamente con la dimensione appropriata, eventualmente usando il metodo resize(n) come abbiamo già visto (il popolamento dei singoli elementi può essere fatto in un secondo tempo).

Quando ciò non è possibile, si parte da un array inizialmente vuoto e si aggiungono gli elementi man mano che servono usando metodi specializzati:

  • i metodi append(elem) e push_back(elem) aggiungono un elemento in coda all'array. I due metodi sono sinomini (funzionano esattamente allo stesso modo): le due differenti denominazioni servono a facilitare alla vita degli sviluppatori che provengono da altri linguaggi di programmazione (append è preferito da chi è abituato a Python, push_back da chi proviene da C++ o linguaggi simili). L'aggiunta in coda è l'operazione meno onerosa dal punto di vista dell'efficienza, in quanto implica solo l'allocazione di una ulteriore locazione di memoria per l'elemento da aggiungere, ma non esegue spostamenti di elementi preesistenti;
  • il metodo push_front(elem) aggiunge un elemento in testa all'array). Dal punto di vista dell'efficienza è il più oneroso in quanto implica lo spostamento di tutti gli elementi già presenti nell'array (si veda, per esempio, l'inserzione dell'elemento 1 nell'array in figura che obbliga allo spostamento degli elementi 2, 4, 5 già presenti nell'array);
  • il metodo insert(index, elem) aggiunge un elemento elem come elemento di indice index di un array a, ossia in a[index]. Dal punto di vista dell'efficienza è più o meno oneroso a seconda di quanti elementi già presenti nell'array occorrerà spostare per inserire quello nuovo.
Inserimento di elementi in un array

ESEMPIO: creazione di un array a partire da un array vuoto.

Creazione di array per inserzione di elementi

OUTPUT dell'esecuzione (estendi l'area di testo se necessario):


Rimuovere elementi

Per la rimozione di elementi si usano metodi "inversi" a quelli dell'inserimento (eliminano elementi invece di aggiungerli):

  • il metodo pop_back() elimina l'elemento in coda all'array e lo ritorna come risultato dell'operazione. L'eliminazione in coda è l'operazione meno onerosa dal punto di vista dell'efficienza, in quanto libera solo la locazione di memoria dell'elemento da eliminare, ma non esegue spostamenti di elementi preesistenti;
  • il metodo pop_front() elimina l'elemento in testa all'array e lo ritorna come risultato dell'operazione. Dal punto di vista dell'efficienza è il più oneroso in quanto implica lo spostamento "in avanti" di tutti gli elementi già presenti nell'array;
  • il metodo pop_at(index) elimina l'elemento di indice index da un array a e lo ritorna come risultato dell'operazione. Quindi cancella il valore in a[index] e sposta gli elementi successivi. Dal punto di vista dell'efficienza è più o meno oneroso a seconda di quanti elementi già presenti nell'array occorrerà spostare.
  • il metodo remove_at(index) elimina l'elemento di indice index da un array a, ossia cancella il valore in a[index] e sposta gli elementi successivi. A differenza del precedente metodo pop_at() non ritorna l'elemento eliminato.

ESEMPIO

Eliminazione di elementi da array

OUTPUT dell'esecuzione (estendi l'area di testo se necessario):

Ci sono ovviamente molti altri metodi utili per eseguire operazione particolari sulgi array (ricerca, ordinamento, copia, ecc.). Per ulteriori informazioni sugli array ed i metodi ad essi applicabili, consultare la documentazione ufficiale: https://docs.godotengine.org/en/stable/classes/class_array.html 


Precedente Indice Successivo