Vai al contenuto

ūüď£ sulla piattaforma e-learning di Codice Inutile sono disponibili i miei corsi: Introduzione alla programmazione e ūüÜē Introduzione all'Arte Generativa

Array: dichiarazione, inizializzazione e utilizzo

ūüď¨ Per rimanere aggiornato sui prossimi articoli e su altri contenuti di creative coding, puoi iscriverti a questa newsletter. Per farlo √® sufficiente inserire il tuo indirizzo e-mail nel campo qui sotto.

Puoi leggere l'archivio qui. Powered by TinyLetter

Avevo concluso l’ultimo post relativo alla programmazione orientata agli oggetti con una domanda:¬†se volessimo creare decine o centinaia di oggetti? Il copia incolla non sarebbe certamente la scelta pi√Ļ consona.

Abbiamo capito già da tempo che uno dei principi di base della programmazione è scrivere meno righe di codice possibile per ottenere il risultato sperato. Introduciamo oggi il concetto di array.

Cos’√® un Array?

Nel post dedicato alle variabili abbiamo parlato di come dichiararle e inizializzarle ma non ci siamo mai soffermati su una questione molto importante: una variabile può contenere un solo valore.

√ą vero che questo valore pu√≤ variare in base all’andamento del nostro programma ma non √® possibile, ad esempio, che una variabile¬†di tipo integer possa valere contemporaneamente 5 e 10.

Gli array risolvono questo problema perch√©¬†rappresentano una lista di valori: all’interno di un array io posso inserire una serie di valori, purch√© siano tutti dello stesso¬†data type.¬†Un altro importante vantaggio √® che ciascun elemento ha un ordine preciso all’interno della lista che √® identificato da un indice univoco.

√ą fondamentale ricordare che l’indice parte sempre da 0¬†di conseguenza se sto utilizzando un array che contiene 10 elementi,¬†l’ultimo valore avr√† un indice pari a 9.

Ricapitolo per chiarezza i punti chiave:

  • Un array rappresenta una lista di elementi
  • Gli elementi all’interno dell’array devono essere tutti dello stesso tipo
  • Gli elementi all’interno dell’array hanno un ordine preciso
  • Ciascun elemento √® identificato da un indice univoco che parte sempre da 0

Dichiarazione e creazione di un array

La sintassi per dichiarare un array è molto semplice: rispetto a quella utilizzata per le variabili, dobbiamo solo aggiungere delle parentesi quadre:

int[] myArray;

Con questa riga di codice ho dichiarato un array di nome myArray che conterrà al suo interno una lista di valori di tipo integer. Non ho ancora detto al mio programma quanti elementi conterrà questo array e, di conseguenza, la lista è ancora vuota.

Passiamo all’inizializzazione di myArray:

int[] myArray = new int[10];

Ho¬†creato un’istanza di un nuovo array e ho gli ho assegnato una dimensione: la lista sar√† composta da 10 elementi di tipo integer.

La grandezza dell’array pu√≤ essere¬†hard-coded come nell’esempio qui sopra, oppure pu√≤ essere una¬†variabile (di tipo integer) oppure un’espressione matematica che dia come risultato un¬†integer:

// Un array di integer con grandezza hard-coded
int[] myArray = new int[10];

// Un array di float con grandezza passata tramite variabile (integer)
int sizeOfArray = 5;
float[] mySecondArray = new float[sizeOfArray];

// Un array di oggetti "Car" con grandezza passata tramite funzione
Car[] cars = new Car[2+5];

Inserire valori in un array

Non ci resta che cominciare a riempire il nostro array di informazioni.

Una prima opzione √® quella di inserire le variabili specificando la posizione¬†indice di riferimento. Questa scelta, ovviamente, non √® la pi√Ļ funzionale.

// Dichiaro e inizializzo il mio array che conterrà 5 elementi di tipo integer
int[] myArray = new int[5];

myArray[0] = 5;   // Il primo elemento (indice = 0) sarà: 5
myArray[1] = 10;  // Il secondo elemento (indice = 1) sarà: 10
myArray[2] = 3;   // Il terzo elemento (indice = 2) sarà: 3
myArray[3] = 0;   // Il quarto elemento (indice = 3) sarà: 0
myArray[4] = 340; // Il quinto elemento (indice = 4) sarà: 340

Una seconda opzione √® quella di inserire tutti i valori, separati da virgole, all’interno di parentesi graffe:

// Dichiaro un array di tipo integer di nome myArray con all'interno i seguenti valori: 5, 10, 3, 0, 340

int[] myArray = {5, 10, 3, 0, 340};

Le due porzioni di codice qui sopra rappresentato, di fatto, la stessa identica lista.

Operazioni matematiche con gli array

Per capire se tutto è chiaro, proviamo ad analizzare un problema: se volessimo creare una lista di 500 elementi contenenti numeri random compresi tra 0 e 255?

Per prima cosa non dobbiamo dimenticare che la funzione random() restituisce valori di tipo float. Avendo già deciso che la nostra lista sarà composta da 500 elementi, possiamo anche inizializzare il nostro array:

float valori[] = new float[500];

Ora dobbiamo inserire tutti i valori; farlo uno ad uno sarebbe un massacro ma, per fortuna, abbiamo già studiato i cicli while e for il cui scopo è effettuare operazioni ripetitive.

Per comodit√† utilizzer√≤ un ciclo for: posso usare la variabile del ciclo per indicare l’indice dell’array nel quale inserire il valore random:

float valori[] = new float[500];

for(int i = 0; i < 500; i++) {
  valori[i] = random(255);
}

printArray(valori);

Array e ciclo for

Come si pu√≤ notare nell’immagine, grazie alla funzione printArray¬†nella console visualizzo tutti i valori e il relativo indice all’interno dell’array.

Ovviamente¬†√® possibile¬†accedere singolarmente a qualsiasi elemento indicando l’indice:

println("Il valore all'indice 306 è: "+ valori[306]);

Debugging degli array e .length

Un errore in cui si pu√≤ incorrere frequentemente quando si lavora con gli array √®:¬†ArrayIndexOutOfBoundsExceptions. Tale problema si verifica quando chiediamo al nostro programma di accedere a un valore ad un indice non presente nell’array.

Se modifichiamo il codice del ciclo for nel precedente esempio in questo modo:

for(int i = 0; i <= 500; i++)

riscontreremo proprio questo tipo di errore perch√© il ciclo si ripeter√† finch√© il valore di i sar√† uguale a 500. Il problema √® che la grandezza dell’array che ho dichiarato all’inizio √® pari a 500 ma, partendo da 0, l’ultimo valore dell’indice √® 499.

Per ovviare a questo problema possiamo usare una propriet√† degli array: .length. In pratica, anzich√© dover ricordarsi quant’√® la lunghezza di ogni array e, prossimamente, vedremo che questa potrebbe anche variare, diciamo al programma di capire da s√© quant’√® la lunghezza¬†della nostra lista e di comportarsi di conseguenza.

Ecco che il codice finito potrebbe essere:

float valori[] = new float[500];

for(int i = 0; i < valori.length; i++) {
  valori[i] = random(255);
}

printArray(valori);

Articolo precedente

Esercizio: Bouncing Ball, parte 3 (OOP)

Articolo successivo

Array di oggetti: Bouncing Ball, parte 4

Unisciti alla discussione

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.