{"id":206,"date":"2009-12-25T02:30:00","date_gmt":"2009-12-25T02:30:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=206"},"modified":"2009-12-25T02:30:00","modified_gmt":"2009-12-25T02:30:00","slug":"didattica-gambas-i-vettori","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/didattica-gambas-i-vettori\/","title":{"rendered":"Didattica Gambas: I vettori"},"content":{"rendered":"<div><span><br \/><\/span><\/div>\n<div><span>Un <\/span><b><span>vettore<\/span><\/b><span> (o <\/span><b><span>array<\/span><\/b><span>) \u00e8 una <\/span><i><span>struttura dati<\/span><\/i><span> che pu\u00f2 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.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Un vettore pu\u00f2 essere immaginato come una serie di celle contigue tutte uguali accessibili mediante un indice che nella maggior parte dei casi \u00e8 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.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Gambas, come ogni altro linguaggio di programmazione, permette l&#8217;uso di vettori diversi per ogni tipo di dato che \u00e8 capace di interpretare. A differenza di altri linguaggi, per\u00f2, un array in Gambas non potr\u00e0 contenere mai pi\u00f9 di 64 elementi e perci\u00f2 una dichiarazione del tipo:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><i><span>hArray AS Integer [65] <\/span><\/i><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>provocher\u00e0 un errore del tipo <\/span><span><i><span>Too many arguments <\/span><span><span>(troppi argomenti)<\/span><\/span><\/i><\/span><span>. In casi come questi \u00e8 utile &#8220;spezzare&#8221; il vettore in due parti gestite tramite codice dal programmatore.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Iniziamo ora ad analizzare le <\/span><i><b><span>propriet\u00e0<\/span><\/b><\/i><span> degli array.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>BOUNDS<\/span><\/b><span> : letteralmente limiti; \u00e8 di sola lettura e restituisce una classe virtuale, di tipo .array.bounds, che rappresenta il limite di dimensione per ogni array.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>COUNT<\/span><\/b><span>  : di sola lettura; restituisce un intero che rappresenta il numero di elementi presenti nel vettore (come Length).<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>DATA<\/span><\/b><span> : restituisce un puntatore al dato indicato contenuto nel vettore. Per poter usare tale propriet\u00e0 il dato in questione non deve essere rimosso dal vettore altrimenti il puntatore perde il riferimento.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>DIM<\/span><\/b><span> : restituisce un intero che rappresenta la dimensione completa dell&#8217;array.<\/span><\/div>\n<div><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span>LENGTH<\/span><\/span><span><span> : di sola lettura; restituisce un intero che rappresenta il numero di elementi presenti nel vettore (come Count).<\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span>MAX<\/span><\/span><span><span> : di sola lettura; restituisce l&#8217;indice dell&#8217;ultimo valore dell&#8217;array. E&#8217; molto utile in fase di eliminazione dell&#8217;ultimo elemento o di gestione di cicli. <\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span>TYPE<\/span><\/span><span><span> : di sola lettura; restituisce un intero che indica il tipo di dato che pu\u00f2 essere inserito nell&#8217;array.<\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span>Si pu\u00f2 facilmente notare come ad esempio che la propriet\u00e0 max <\/span><span><b><span><span><span>pu\u00f2 essere ricavata da (array.count &#8211; 1) , ovvero il numero di elementi dell&#8217;array decrementato poich\u00e8 il primo di essi ha indice 0.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>Passiamo ora alla visualizzazione dei <\/span><\/span><span><i><span>metodi<\/span><\/i><\/span><span><span> applicabili ai vettori.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>ADD<\/span><\/span><span><span> : aggiunge un elemento a quelli gi\u00e0 esistenti nel vettore. Questo metodo crea appositamente per il dato una nuova &#8220;cella&#8221; e pertanto dopo l&#8217;uso di add l&#8217;array avr\u00e0 un elemento in pi\u00f9.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>CLEAR<\/span><\/span><span><span> : pulisce l&#8217;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.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>COPY<\/span><\/span><span><span> : restituisce una copia del vettore. E&#8217; possibile specificare anche se si vuole copiare solo un certo numero di elementi.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>DELETE<\/span><\/span><span><span> : rimuove uno o pi\u00f9 elementi dall&#8217;array e ne restituisce il puntatore.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>EXIST<\/span><\/span><span><span> : restituisce il booleano 1 (true) se il valore indicato \u00e8 contenuto in un elemento dell&#8217;array, altrimenti restituisce 0 (false).<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>EXTRACT<\/span><\/span><span><span> : svolge la stessa funzione di delete.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>FILL<\/span><\/span><span><span> : riempe il vettore con il valore specificato. Se nessun altro parametro e specificato allora riempe tutto l&#8217;array, se si specifica <\/span><i><span>start<\/span><\/i><span> imposta solo quel valore se si specifica anche <\/span><i><span>length<\/span><\/i><span> allora imposta tutti i valori a partire da start per una lunghezza pari a length.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>INSERT<\/span><\/span><span><span> : inserisce un array in un altro partendo dalla posizione indicata. Se tale valore non \u00e8 indicato allora l&#8217;array verr\u00e0 aggiunto di default alla fine.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>POP<\/span><\/span><span><span> : rimuove l&#8217;ultimo elemento dall&#8217;array e lo restituisce. Questa operazione ridimensiona l&#8217;array eliminando anche lo spazio occupato dall&#8217;elemento cancellato. Bisogna accertarsi che il vettore abbia almeno un elemento prima di usare pop poich\u00e9 un array vuoto provoca errore.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>PUSH<\/span><\/span><span><span> : inserisce un nuovo elemento alla fine dell&#8217;array allocando anche una nuova cella per esso. Si cos\u00ec un incremento dei numeri di elementi.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span>REMOVE<\/span><\/span><span><span> : rimuove uno o pi\u00f9 elementi dall&#8217;array ridimensionando anche la struttura con relativo decremento del numero di elementi.<\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><span><span><b><span><span><span><b><span><span><span><br \/><\/span><\/span><\/span><\/b><\/span><\/span><\/span><\/b><\/span><\/span><\/div>\n<div><b><span>RESIZE<\/span><\/b><span> : ridimensiona il numero di elementi dell&#8217;array e quindi lo spazio occupato in memoria. Se l&#8217;array viene ridotto allora gli elementi eliminati saranno quelli posti alla fine (quelli con indice pi\u00f9 alto), se l&#8217;array \u00e8 espanso allora gli elementi verranno posti alla fine e a loro sar\u00e0 dato un valore di default da inizializzare qualora serva.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>REVERSE<\/span><\/b><span> : capovolge l&#8217;ordine degli elementi dell&#8217;array. Molto utile nel caso di cambio di tipo di ordine in un array ordinato.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Questa \u00e8 una semplice vetrina di ci\u00f2 che Gambas pu\u00f2 fare con gli array. Questo ovviamente non pone freno alla fantasia di chi pu\u00f2, con due righe di codice, far fare molte pi\u00f9 cose a questo linguaggio.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Un vettore (o array) \u00e8 una struttura dati che pu\u00f2 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\u00f2 essere immaginato come una serie di celle contigue tutte uguali [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52,23,2,4],"tags":[],"class_list":["post-206","post","type-post","status-publish","format-standard","hentry","category-didattica","category-gambas","category-gnulinux","category-opencode"],"views":1374,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=206"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/206\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=206"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}