Cosè un array
Array in Inglese significa schieramento, e in
informatica il significato è simile: un array è un insieme di variabili,
che vanno a formare unentità più vasta (avete letto la lezione
n. 6 sulle variabili, vero?).
Il Perl prevede due tipi di array: quelli scalari e quelli
associativi.
Array scalari
Supponiamo che stiate scrivendo un programma che calcola gli stipendi
della vostra azienda, che conta ben 10.000 dipendenti. Senza sapere
nulla degli array, potreste essere costretti ad usare 10.000 variabili
diverse! Invece di andarvene dallazienda sbattendo la porta,
potete definire un array in questo modo:
@dipendenti = ();
Invece del prefisso $ delle variabili
scalari, usiamo il @ che indica un array. Inoltre, in
modo simile alle variabili scalari, agli array possiamo assegnare
direttamente dei valori tramite una lista, che è appunto
una semplicissima lista di valori scalari (cioè tutto ciò che può
essere infilato in una variabile scalare), separati da virgole e
racchiusa tra parentesi. Nel nostro caso, larray inizialmente
è vuoto, perciò gli diamo una lista vuota, che sono due parentesi
vuote. Potevamo fare così:
@dipendenti = ( Mario
Rossi, Marco Verdi, Luca Bianchi);
e avremmo messo nel nostro array alcune stringhe di caratteri. Per
inciso, nulla vieta di mescolare numeri e stringhe, ma nel nostro
caso ha più senso avere solo stringhe.
Quando vogliamo riferirci ad un particolare elemento dellarray,
usiamo questa sintassi:
$dipendenti[2] = Giuseppe
Verdi;
Notate che abbiamo usato il simbolo $,
perché ci riferiamo ad un singolo valore scalare (nonostante sia
contenuto in un array). Per specificare esattamente quale elemento
vogliamo, mettiamo il suo indice tra parentesi quadre. Lindice
è il numero progressivo assegnato allelemento, partendo da
zero. Cioè, questa nostra ultima istruzione mette Giuseppe
Verdi al posto di Luca Bianchi, che è il terzo
elemento (quindi il n. 2, se si conta partendo da zero).
Possiamo anche fare una cosa del genere:
print @dipendenti[0..2];
che stamperà sullo schermo i primi tre valori contenuti nellarray
(nel nostro caso, tutto quanto). I due punti .. sono
loperatore range, che specifica un intervallo. Per
i più matematici tra voi, specifico che lintervallo è chiuso
(ci sono le parentesi quadre
), mentre per chi programma già
sarà bene chiarire che entrambi gli estremi sono inclusi. 0..2
significa gli elementi da 0 a 2 compresi. Notate che abbiamo messo
un @ per indicare che vogliamo un array (in effetti,
un sotto-array di quello originario). Mettendo $, avremmo
ottenuto solo un valore.
Un altro modo:
print @dipendenti[0,2];
che stamperà il primo e il terzo elemento, ma non il secondo (la
virgola serve a saltare gli elementi). Questo particolare modo di
affettare gli array si chiama slicing.
Naturalmente, gli elementi estratti da un array si possono mettere
dentro un altro array, oppure anche dentro una lista (un array in
fondo non è che una lista di variabili tutte con lo stesso nome
e un indice, scritto in forma abbreviata):
@a = @dipendenti[0,2];
($dip1, $dip2) = @dipendenti[0,2];
@a = (@dipendenti[0,2] , @b, @c[0..5]);
sono tutte assegnazioni valide. Nel terzo esempio abbiamo costruito
una lista a partire da tre array o pezzi di array. In questo modo
i tre array vengono espansi, e viene ricostruita una
lista che comprende tutti i valori specificati. Quindi questa lista
viene assegnata allarray @a.
Push e pop
Vi chiederete, ma i famosi 10.000 nomi come li metto dentro
allarray? Non andranno mica scritti uno per uno? No, gli array
possono essere manipolati in molti modi, e il Perl prevede moltissime
istruzioni apposite, ad esempio per riempire un array
a partire dai contenuti di un file (come vedremo nella prossima
lezione). Ecco alcuni esempi di istruzioni:
push @array, lista;
aggiunge una lista di elementi in fondo allarray (sostituite
@array con il nome del vostro array, e lista
con una lista di dati). La lista può anche essere un singolo dato,
in tal caso le parentesi tonde non servono.
pop
@array;
esegue il contrario di push, accorciando larray di un elemento
(lultimo). Il dato tagliato via viene restituito (o
ritornato, in una traduzione diretta dallInglese),
cioè viene reso disponibile come risultato dellistruzione.
Ad esempio, dopo le prime due istruzioni che riguardavano larray
@dipendenti, potremmo scrivere queste due:
$nome = pop @dipendenti;
print pop @dipendenti;
dopo queste istruzioni, $nome conterrà Giuseppe Verdi,
mentre listruzione print stamperà Marco Verdi,
e larray @dipendenti verrà ridotto ad un solo elemento, lonnipresente
Mario Rossi.
Quello che push e pop fanno alla parte finale dellarray, shift
e unshift lo fanno alla parte iniziale. Questo però lo vedremo nella
prossima puntata dove termineremo anche la trattazione degli array.
Torna all'indice Generale del corso di Corso di Perl di Software Planet