Sequenze

Nella quinta lezione del tutorial sun su javaFX si parla di sequenze.
Una sequenza é una lista ordinata di oggetti. Un concetto simile all'enumerazione.

Al solito, se non si specifica il tipo della sequenza, ci pensa il compilatore ad inferirne uno. Ad esempio, queste due definizioni di sequenze costanti sono equivalenti:

def weekDays = ["Mon","Tue","Wed","Thu","Fri"];
def weekDays2: String[] = ["Mon","Tue","Wed","Thu","Fri"];

Si può usare una sequenza precedentemente definita per crearne un'altra. Queste due sequenze, definite come variabili sono perciò equivalenti - se weekDays é la sequenza definita qui sopra:

var days = [weekDays, ["Sat","Sun"]];
var days2 = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

Per creare sequenze che formino una serie aritmetica si può usare questa notazione semplificata:

def nums = [1..100];

Si può usare una espressione booleana (ovvero un predicato) per creare una nuova sequenza a partire da una esistente:

def evenNums = nums[n | (n mod 2) == 0];

La sequenza evenNums contiene tutti i valori che erano in nums tali che il resto della loro divisione per due sia uguale a zero, ovvero i numeri pari.

L'accesso agli oggetti contenuti in una sequenza può essere effettuato sulla base dell'indice dell'elemento, a partire dall'indice 0, come da convenzione ereditata dal linguaggio C:

println(days[0]); // "Mon"

L'operatore sizeof ci permette di vedere quanti elementi siano in una sequenza:

println(sizeof evenNums); // 50

Una sequenza può essere definita come variabile (var) o costante (def). Nel primo caso, quindi, può essere modificata. Si noti che, tecnicamente parlando, le sequenze sono immutabili, quello che succede quando variamo una sequenza é che la vecchia viene distrutta e una nuova, variata secondo la nostra richiesta, ci viene ritornata.

Per inserire un nuovo elemento in coda a una sequenza usiamo il costrutto insert into:

var days = ["Mon"];
insert "Tue" into days;
insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;

Possiamo inserire un nuovo elemento prima o dopo di un determinato indice con i costrutti insert before / insert after:

insert "Thu" before days[2];
insert "Wed" after days[1];

Per eliminare un elemento da una sequenza possiamo usare l'operatore delete in uno di questi due modi:

delete "Sun" from days;
delete days[0]; // "Mon"

Con delete posso anche rimuovere tutti gli elementi della sequenza in un colpo solo:

delete days;

Con l'operatore reverse posso creare una sequenza dove il primo elemento diventa l'ultimo e viceversa:

def count = [1..5];
var countdown = reverse count; // [5, 4, 3, 2, 1]

Per confrontare due sequenze si può usare l'operatore == che ritorna true solo nel caso le due sequenze abbiano lo stesso numero di elementi, e tutte le coppie di elementi nella stessa posizione siano uguali.

Nell'esempio a seguire le due sequenze sono considerate diverse:

def seq1 = [1,2,3,4,5];
def seq2 = [1,3,2,4,5];
println(seq1 == seq2);

Fare una sequenza a fette:

Con il costrutto seq[a..b] generiamo una partizione di sequenza che include i limiti passati:

def weekend = days[5..6];

Per definire un insieme aperto a destra usiamo seq[a..<>
def weekdays = days[0..<5];>
Possiamo non specificare il limite superiore, la sequenza conterrà tutti gli elementi a partire dal primo specificato con seq[a..]:

def weekend2 = days[5..];

Possiamo anche specificare che vogliamo includere tutti gli elementi a destra dell'elemento specificato tranne l'ultimo della sequenza originaria:

def days2 = days[0..<];

Nessun commento:

Posta un commento