Perl/Variabili vettori: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
BimBot (discussione | contributi)
m Template + Categoria
Nessun oggetto della modifica
Riga 8: Riga 8:
array - scalari : 0 1 2 3 4 ... 99
array - scalari : 0 1 2 3 4 ... 99


'''I NOMI'''
===I NOMI===


Come per le scalari i nomi degli array possono essere composti da lettere, numeri, "_" , "'" e d avere lunghezza fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.
Come per le scalari i nomi degli array possono essere composti da lettere, numeri, "_" , "'" e d avere lunghezza fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.


'''IL CONTENUTO'''
===IL CONTENUTO===


Il contenuto è un qualsiasi scalare.
Il contenuto è un qualsiasi scalare.
Riga 65: Riga 65:
'''NOTA''' se l'array ha un numero inferiore di elementi rispetto a quelli presenti , gli elementi che sono stati "aggiunti" hanno valore undef.
'''NOTA''' se l'array ha un numero inferiore di elementi rispetto a quelli presenti , gli elementi che sono stati "aggiunti" hanno valore undef.


=== Linerizzazione ===
Con questa parola intendo la "trasformazione" che il linguaggio opera automaticamente nel trattare nel contesto gli array.
Vediamo questo esempio:
@a = ( 2 , 3 , 4 );
@b = ( 1 , @a , 5 , 6 );
Nell'esempio trattato @b ha i valori ( 1 , 2 , 3 , 4 , 5 , 6 ) quindi al posto si @a ne sono stati messi i valori.
Quindi a @a non è stato messo il ''numero'' di elementi di @a '''ma''' gli elementi stessi che costituiscono il vettore.
Questo che può apparire strano in realtà è molto utile per "sommare" elementi e giuntarli.
Se si volesse mettere un array è necessario mettere un reference (e quindi uno scalare cioè lo scalare che punta alle informazioni di "tipo" array).
Se si volesse mettere il numero di elementi di un array è obbligatorio usare $#a.

===Notazione [ x , y , z ] e [ x .. y ]===
In Perl esiste la possibilità di estrarre o trattare contemporaneamente più informazioni da un array.
Questo è possibile perchè è possibile identificare sintatticamente più informazioni.
#nel caso della notazione [ x , y , z ] si indicano gli elementi alla posizione x,y,z (nell'esempio 3 ma possono essere di più o di meno!).
#nel caso della notazione [ x .. y ] si indicano tutti gli elementi che vanno all'elemento x a y.Se l'elemento x e Y sono numeri sono tutti i numeri (incrementati di 1) che intercorrono fra x e y.Nel caso di stringhe sono tutti i caratteri far una stringa e l'altra: 'a' .. 'f' equivale a a, b, c, d, e, f.

@alfabeto = ('A' .. 'Z');
@giorni_del_mese = ('01' .. '31');
@ACD = @alfabeto[0 , 2 ,3 ];
@s = ();
@s[2,3,5] = ( 'PIPPO' , 'pluto' , 'CIAO' );
@k[0 .. 1] = ( 'mario' , 'giuseppe' );

in @alfabeto ci saranno tutte le lettere dalla A alla Z
in giorni del mese ci saranno tutti i numeri da 01 a 31 (compreso 05, 11 , 21 etc)
in @ACD contiene ( 'A' , 'C' , 'D' );
in @s contiene ( undef , undef , 'PIPPO' , 'pluto' , undef , 'CIAO' )
in @k contiene ( 'mario' , 'giuseppe' )


ecco che inizia a delinearsi la possibilità di utilizzare in modo flessibile le informazioni senza dover utilizzare dei "cicli" per inserire dei valori.
[[Categoria:Linguaggio Perl|Le variabili:vettori]]
[[Categoria:Linguaggio Perl|Le variabili:vettori]]

Versione delle 11:52, 4 dic 2006

Template:Linguaggio Perl

I vettori o array si possono immaginare come un treno.Ogni treno ha un certo numero di vagoni. Analogamente gli array sono in insieme di scalari.Come nel treno le carrozze sono numerate , così negli array per identificare una informazione si usa un numero intero.La numerazione parte da 0 ed arriva fino al numero di elementi - 1.Cioè la prima carrozza ha il numero 0 (e non 1)

treno - vagoni  : 1 2 3 4 5 ... 100

array - scalari : 0 1 2 3 4 ... 99

I NOMI

Come per le scalari i nomi degli array possono essere composti da lettere, numeri, "_" , "'" e d avere lunghezza fino a 256 caratteri. Inoltre essendo un linguaggio "case sensitive" le lettere maiuscole e le lettere minuscole sono differenti.

IL CONTENUTO

Il contenuto è un qualsiasi scalare.

Vediamo la sintassi per creare un array:

@a;           #Ho definito un array ma non l'ho riempito
@a = ();      #Ho definito un array ed è vuoto
# PRIMO ARRAY
@a = ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 );
              #Ho definito un array ed è riempito con  9 valori da 1 a 9 
              #     che occupano le posizioni da 0 a 8 ! 
# SECONDO ARRAY
@b = ( 4 , "pippo" , 1 , "pluto" , 2 , "paperino" , 3 , "minni" , 4 );
              #Ho definito un array ed è riempito con  9 valori fra stringhe e numeri 
              #     che occupano le posizioni da 0 a 8 ! 
# TERZO ARRAY
$lun = "lunedì";
$mar = "martedì"
@c = ( $lun , $mar , "mercoledì" , "giovedì" , "venerdì" , "sabato" , "domenica" );
              #Ho definito un array ed è riempito con  7 valori di stringhe 
              #     che occupano le posizioni da 0 a 6 ! 

Per poter usare i valori dell'array occorre poter selezionare il dato singolo.Per far questo si utilizza il metodo dell'indice.L'indice rappresenta la posizione del dato. Nel nostro caso la sintassi prevede l'uso delle parantesi quadre come identificatore dell'indice. Vediamo ora se volessi scrivere il terzo valore dell'array (è alla posizione 2 perchè si conta da 0):

print "posizione 3 primo array :$a[2]\n"; 
print "posizione 3 secondo array :$b[2]\n"; 
print "posizione 3 terzo array :$c[2]\n"; 

questo scriverà : 3 per il primo array, 1 per il secondo array, mercoledì per il terzo array.

Notate che la gestione dei simboli è corretta: se intendo gestire l'array nella sua "totalità" uso il simbolo @ mentre se ne voglio uno scalare allora uso $ il nome e l'identificatore della posizione racchiuso fra parentesi quadre.

Il Perl ha adottato la particolarità del contesto per sapere di quanti elementi è composto un array:

$numero_elementi = @a;
print "numero di elementi di primo array e' : $numero_elementi\n";

Tuttavia esiste una sintassi specifica per sapere il valore dell'ultimo indice o per "forzare" la quantità di elementi di un array:

$numero_elementi = $#a;
print "numero di elementi di primo array e' : $numero_elementi\n";

Mentre se si usa l'istruzione:

$#a = 10; 

Ora @a ha ben 10 elementi.

NOTA se l'array ha un numero inferiore di elementi rispetto a quelli presenti , gli elementi che sono stati "aggiunti" hanno valore undef.

Linerizzazione

Con questa parola intendo la "trasformazione" che il linguaggio opera automaticamente nel trattare nel contesto gli array. Vediamo questo esempio:

@a = ( 2 , 3 , 4 );
@b = ( 1 , @a , 5 , 6 );

Nell'esempio trattato @b ha i valori ( 1 , 2 , 3 , 4 , 5 , 6 ) quindi al posto si @a ne sono stati messi i valori. Quindi a @a non è stato messo il numero di elementi di @a ma gli elementi stessi che costituiscono il vettore. Questo che può apparire strano in realtà è molto utile per "sommare" elementi e giuntarli. Se si volesse mettere un array è necessario mettere un reference (e quindi uno scalare cioè lo scalare che punta alle informazioni di "tipo" array). Se si volesse mettere il numero di elementi di un array è obbligatorio usare $#a.

Notazione [ x , y , z ] e [ x .. y ]

In Perl esiste la possibilità di estrarre o trattare contemporaneamente più informazioni da un array. Questo è possibile perchè è possibile identificare sintatticamente più informazioni.

  1. nel caso della notazione [ x , y , z ] si indicano gli elementi alla posizione x,y,z (nell'esempio 3 ma possono essere di più o di meno!).
  2. nel caso della notazione [ x .. y ] si indicano tutti gli elementi che vanno all'elemento x a y.Se l'elemento x e Y sono numeri sono tutti i numeri (incrementati di 1) che intercorrono fra x e y.Nel caso di stringhe sono tutti i caratteri far una stringa e l'altra: 'a' .. 'f' equivale a a, b, c, d, e, f.
@alfabeto = ('A' .. 'Z');
@giorni_del_mese = ('01' .. '31');
@ACD = @alfabeto[0 , 2 ,3 ];
@s = ();
@s[2,3,5] = ( 'PIPPO' , 'pluto' , 'CIAO' );
@k[0 .. 1] = ( 'mario' , 'giuseppe' );

in @alfabeto ci saranno tutte le lettere dalla A alla Z in giorni del mese ci saranno tutti i numeri da 01 a 31 (compreso 05, 11 , 21 etc) in @ACD contiene ( 'A' , 'C' , 'D' ); in @s contiene ( undef , undef , 'PIPPO' , 'pluto' , undef , 'CIAO' ) in @k contiene ( 'mario' , 'giuseppe' )


ecco che inizia a delinearsi la possibilità di utilizzare in modo flessibile le informazioni senza dover utilizzare dei "cicli" per inserire dei valori.