TRASLOCO
Sempre mosso dalla voglia di allontanarmi da Google e dai suoi servizi, ho finalmente deciso che dopo diversi anni la piattaforma di questo piccolo spazio andava cambiata. Finalmente il blo cambia casa. Se volete trovarmi potete recarvi al nuovo indirizzo

venerdì 25 dicembre 2009

Didattica Gambas: I vettori


Un vettore (o array) è una struttura dati che può essere vista come un contenitore di dati tutti uguali accessibili mediante un indice. Un vettore, infatti, contiene dati dello stesso tipo accomunati da uno stesso nome ma catalogati con un indice diverso.

Un vettore può essere immaginato come una serie di celle contigue tutte uguali accessibili mediante un indice che nella maggior parte dei casi è numerico, i valori di tale indice sono consecutivi e il primo elemento del vettore ha solitamente indice pari a 0 o, in alcuni casi, 1.

Gambas, come ogni altro linguaggio di programmazione, permette l'uso di vettori diversi per ogni tipo di dato che è capace di interpretare. A differenza di altri linguaggi, però, un array in Gambas non potrà contenere mai più di 64 elementi e perciò una dichiarazione del tipo:

hArray AS Integer [65]

provocherà un errore del tipo Too many arguments (troppi argomenti). In casi come questi è utile "spezzare" il vettore in due parti gestite tramite codice dal programmatore.

Iniziamo ora ad analizzare le proprietà degli array.

BOUNDS : letteralmente limiti; è di sola lettura e restituisce una classe virtuale, di tipo .array.bounds, che rappresenta il limite di dimensione per ogni array.

COUNT : di sola lettura; restituisce un intero che rappresenta il numero di elementi presenti nel vettore (come Length).

DATA : restituisce un puntatore al dato indicato contenuto nel vettore. Per poter usare tale proprietà il dato in questione non deve essere rimosso dal vettore altrimenti il puntatore perde il riferimento.

DIM : restituisce un intero che rappresenta la dimensione completa dell'array.

LENGTH : di sola lettura; restituisce un intero che rappresenta il numero di elementi presenti nel vettore (come Count).

MAX : di sola lettura; restituisce l'indice dell'ultimo valore dell'array. E' molto utile in fase di eliminazione dell'ultimo elemento o di gestione di cicli.

TYPE : di sola lettura; restituisce un intero che indica il tipo di dato che può essere inserito nell'array.

Si può facilmente notare come ad esempio che la proprietà max può essere ricavata da (array.count - 1) , ovvero il numero di elementi dell'array decrementato poichè il primo di essi ha indice 0.

Passiamo ora alla visualizzazione dei metodi applicabili ai vettori.

ADD : aggiunge un elemento a quelli già esistenti nel vettore. Questo metodo crea appositamente per il dato una nuova "cella" e pertanto dopo l'uso di add l'array avrà un elemento in più.

CLEAR : pulisce l'array. Nel caso di vettori monodimensionali esso elimina il contenuto dello stesso e porta la sua dimensione a 0 mentre nel caso di array multidimensionali porta il valore di tutti gli elementi a 0 o NULL ma lascia inalterata la dimensione della struttura.

COPY : restituisce una copia del vettore. E' possibile specificare anche se si vuole copiare solo un certo numero di elementi.

DELETE : rimuove uno o più elementi dall'array e ne restituisce il puntatore.

EXIST : restituisce il booleano 1 (true) se il valore indicato è contenuto in un elemento dell'array, altrimenti restituisce 0 (false).

EXTRACT : svolge la stessa funzione di delete.

FILL : riempe il vettore con il valore specificato. Se nessun altro parametro e specificato allora riempe tutto l'array, se si specifica start imposta solo quel valore se si specifica anche length allora imposta tutti i valori a partire da start per una lunghezza pari a length.

INSERT : inserisce un array in un altro partendo dalla posizione indicata. Se tale valore non è indicato allora l'array verrà aggiunto di default alla fine.

POP : rimuove l'ultimo elemento dall'array e lo restituisce. Questa operazione ridimensiona l'array eliminando anche lo spazio occupato dall'elemento cancellato. Bisogna accertarsi che il vettore abbia almeno un elemento prima di usare pop poiché un array vuoto provoca errore.

PUSH : inserisce un nuovo elemento alla fine dell'array allocando anche una nuova cella per esso. Si così un incremento dei numeri di elementi.

REMOVE : rimuove uno o più elementi dall'array ridimensionando anche la struttura con relativo decremento del numero di elementi.

RESIZE : ridimensiona il numero di elementi dell'array e quindi lo spazio occupato in memoria. Se l'array viene ridotto allora gli elementi eliminati saranno quelli posti alla fine (quelli con indice più alto), se l'array è espanso allora gli elementi verranno posti alla fine e a loro sarà dato un valore di default da inizializzare qualora serva.

REVERSE : capovolge l'ordine degli elementi dell'array. Molto utile nel caso di cambio di tipo di ordine in un array ordinato.

Questa è una semplice vetrina di ciò che Gambas può fare con gli array. Questo ovviamente non pone freno alla fantasia di chi può, con due righe di codice, far fare molte più cose a questo linguaggio.