Differenze tra le versioni di "Rendere vettore una variabile inizialmente di tipo Oggetto"
Riga 9: | Riga 9: | ||
Fatto ciò, dunque, si potrà usare la variabile di tipo ''Oggetto'' esattamente come fosse un <SPAN Syle="text-decoration:underline">vettore</span>: | Fatto ciò, dunque, si potrà usare la variabile di tipo ''Oggetto'' esattamente come fosse un <SPAN Syle="text-decoration:underline">vettore</span>: | ||
− | + | Dim ob As Object | |
ob = [ob] | ob = [ob] | ||
Riga 21: | Riga 21: | ||
* se la variabile fra le parentesi, assegnata a quella di tipo ''Oggetto'' da trasformare, non è di tipo ''Oggetto'', allora la variabile trasformata in vettore, che originariamente era di tipo ''Oggetto'', assumerà il tipo della variabile assegnata: | * se la variabile fra le parentesi, assegnata a quella di tipo ''Oggetto'' da trasformare, non è di tipo ''Oggetto'', allora la variabile trasformata in vettore, che originariamente era di tipo ''Oggetto'', assumerà il tipo della variabile assegnata: | ||
− | + | Dim ob As Object | |
− | + | Dim i As Integer | |
<FONT color=#B22222>ob = [i]</font> | <FONT color=#B22222>ob = [i]</font> | ||
Riga 33: | Riga 33: | ||
* se, nonostante l'assegnazione alla originaria variabile ''Oggetto'' di un ben determinato tipo di variabile, vengono poi ad essa assegnati valori direttamente mediante una lista vettoriale, si è constatato che la nuova variabile vettoriale assume il tipo ''Variant[]'': | * se, nonostante l'assegnazione alla originaria variabile ''Oggetto'' di un ben determinato tipo di variabile, vengono poi ad essa assegnati valori direttamente mediante una lista vettoriale, si è constatato che la nuova variabile vettoriale assume il tipo ''Variant[]'': | ||
− | + | Dim ob As Object | |
− | + | Dim i As Integer | |
<FONT color=#B22222>ob = [i]</font> | <FONT color=#B22222>ob = [i]</font> | ||
Riga 47: | Riga 47: | ||
* se tra le parentesi quadre viene posto un quasiasi valore numerico: | * se tra le parentesi quadre viene posto un quasiasi valore numerico: | ||
− | + | Dim ob As Object | |
ob = [99] | ob = [99] | ||
Riga 58: | Riga 58: | ||
ob = ["a"] | ob = ["a"] | ||
o anche solo le due virgolette: | o anche solo le due virgolette: | ||
− | + | ob = [""] | |
allora la variabile originaria di tipo ''Object'' diventa una nuova variabile vettoriale di tipo ''String[]'' . | allora la variabile originaria di tipo ''Object'' diventa una nuova variabile vettoriale di tipo ''String[]'' . | ||
Riga 66: | Riga 66: | ||
Mostriamo un esempio generico in cui due variabili iniziali di tipo ''Oggetto'' divengono rispettivamente una variabile vettoriale di tipo ''Intero'' ed una variabile vettoriale di tipo ''Struttura'': | Mostriamo un esempio generico in cui due variabili iniziali di tipo ''Oggetto'' divengono rispettivamente una variabile vettoriale di tipo ''Intero'' ed una variabile vettoriale di tipo ''Struttura'': | ||
'''Public''' Struct Struttura | '''Public''' Struct Struttura | ||
− | + | b As Byte | |
− | + | s As String | |
'''End''' Struct | '''End''' Struct | ||
Riga 77: | Riga 77: | ||
Dim ob1, ob2 As Object | Dim ob1, ob2 As Object | ||
Dim i As Integer | Dim i As Integer | ||
− | + | Dim p As Pointer | |
− | + | <FONT color=#B22222>ob1 = [i]</font> | |
− | + | Print ob1.Count | |
− | + | ob1[0] = 9 | |
− | + | ob1.Push(99) | |
− | + | ob1.Push(99999) | |
<FONT color=gray>' ''Verifichiamo il contenuto degli elementi della variabile "ob":''</font> | <FONT color=gray>' ''Verifichiamo il contenuto degli elementi della variabile "ob":''</font> | ||
− | + | Print ob1[0], ob1[1], ob1[2] | |
<FONT color=gray>' ''Comportandosi la variabile di tipo Oggetto "ob1" come un vettore, si potranno ottenere i valori da essa contenuti anche così:''</font> | <FONT color=gray>' ''Comportandosi la variabile di tipo Oggetto "ob1" come un vettore, si potranno ottenere i valori da essa contenuti anche così:''</font> | ||
− | + | p = ob1.Data | |
− | + | Print Int@(p) | |
− | + | Print Int@(p + 4) | |
− | + | Print Int@(p + 8) | |
− | |||
− | |||
− | |||
<FONT color=gray>' ''Ora assegnamo la Struttura alla variabile di tipo Oggetto "ob2":''</font> | <FONT color=gray>' ''Ora assegnamo la Struttura alla variabile di tipo Oggetto "ob2":''</font> | ||
− | + | ob2 = [st] | |
<FONT color=gray>' ''A scopo didattico mostriamo soltanto il tipo di variabile assunto dalla originaria variabile "ob2":''</font> | <FONT color=gray>' ''A scopo didattico mostriamo soltanto il tipo di variabile assunto dalla originaria variabile "ob2":''</font> | ||
− | + | Print Object.Type(ob2) | |
'''End''' | '''End''' | ||
Riga 122: | Riga 119: | ||
<FONT color=gray>' ''Inseriamo il vettore "ii[]" nella variabile "ob" di tipo "Oggetto", che così viene resa anch'essa una vettore (contenente oggetti, vettori):''</font> | <FONT color=gray>' ''Inseriamo il vettore "ii[]" nella variabile "ob" di tipo "Oggetto", che così viene resa anch'essa una vettore (contenente oggetti, vettori):''</font> | ||
− | + | ob = [ii] | |
<FONT color=gray>' ''Assegnamo alcuni valori ai membri dell'altro vettore di tipo "Intero":''</font> | <FONT color=gray>' ''Assegnamo alcuni valori ai membri dell'altro vettore di tipo "Intero":''</font> | ||
− | + | With nn | |
− | + | .Push(3) | |
− | + | .Push(333) | |
− | + | .Push(33333) | |
− | + | End With | |
<FONT color=gray>' ''Inseriamo anche il vettore "nn[]" nella variabile vettoriale di tipo "Oggetto":''</font> | <FONT color=gray>' ''Inseriamo anche il vettore "nn[]" nella variabile vettoriale di tipo "Oggetto":''</font> | ||
− | + | ob.Push(nn) | |
− | <FONT color=gray>' ''Andiamo a vedere i valori. Gli indici "0" e "1" della prima dimensione si riferiscono rispettivamente all'oggetto vettore "ii[]", che è zero, | + | <FONT color=gray>' ''Andiamo a vedere i valori. Gli indici "0" e "1" della prima dimensione si riferiscono rispettivamente all'oggetto vettore "ii[]", che è zero, poiché è il primo inserito, ed all'oggetto vettore "nn[]", che è uno, poiché è 1, poiché è il secondo inserito. L'indice della seconda dimensione si riferisce all'elemento del vettore, contenuto dalla variabile "ob", di cui si intende leggere il valore:''</font> |
− | + | Print ob[0][2] | |
− | |||
− | |||
− | + | Print ob[1][1] | |
'''End''' | '''End''' |
Versione delle 08:40, 5 apr 2023
Il caso è quello in cui si ha una variabile ordinaria di tipo Object, che si intende rendere vettoriale successivamente, ossia via codice, senza l'uso della parola New.
Se si intende caricare nella variabile di tipo "Oggetto" due o più variabili, le successive alla prima variabile caricata devono essere tutte del tipo identico a quello della prima variabile.
Si assegnerà, dunque, alla variabile Oggetto una variabile di qualsiasi tipo con la cura di porre quest'ultima all'interno di parentesi quadre. Bisogna tenere conto che all'atto di tale assegnazione la variabile di tipo Oggetto avrà inizialmente un numero di elementi uguale ad 1. Tale elemento avrà comunque un valore pari a zero, se la variabile assegnata per la trasformazione non possiede un valore diverso da zero o Null, altrimenti avrà il valore già posseduto da quella varibile utilizzata.
Questa modalità consentirà di caricare una variabile in una variabile di tipo "Oggetto" come fosse quest'ultimo un vettore.
Fatto ciò, dunque, si potrà usare la variabile di tipo Oggetto esattamente come fosse un vettore:
Dim ob As Object ob = [ob] Print Object.Type(ob)
in questo caso la nuova variabile "ob" sarà un vettore di tipo Oggetto. Infatti la verifica restituisce in console: Object[] .
Particolarità con variabili inizialmente di tipo diverso da quello Oggetto
Bisogna, però, far rilevare che:
- se la variabile fra le parentesi, assegnata a quella di tipo Oggetto da trasformare, non è di tipo Oggetto, allora la variabile trasformata in vettore, che originariamente era di tipo Oggetto, assumerà il tipo della variabile assegnata:
Dim ob As Object Dim i As Integer ob = [i]
la variabile "ob" diventa una nuova variabile vettoriale di tipo Integer. Questa circostanza può essere verificata mediante l'istruzione:
Print Object.Type(ob)
In questo caso, ovviamente, la nuova variabile vettoriale ob riceverà nei suoi elementi soltanto valori di tipo Integer. Infatti, se si verifica il tipo di valori che la varibile vettoriale ob è capace di assumere nei suoi elementi
Print ob.Type
si otterrà il valore " 4 ", ossia la costante che rappresenta appunto il tipo di dato Intero (Integer), e che corrisponde in Gambas alla definizione del tipo di dato: gb.Integer .
- se, nonostante l'assegnazione alla originaria variabile Oggetto di un ben determinato tipo di variabile, vengono poi ad essa assegnati valori direttamente mediante una lista vettoriale, si è constatato che la nuova variabile vettoriale assume il tipo Variant[]:
Dim ob As Object Dim i As Integer ob = [i] ob = [99, "testo"] Print ob[1] Print Object.Type(ob)
in questo caso il valore stringa del secondo elemento viene regolarmente accettato, e la verifica mediante il metodo Object.Type() restituisce in console il risultato: Variant[] .
- se tra le parentesi quadre viene posto un quasiasi valore numerico:
Dim ob As Object ob = [99]
allora la variabile originaria di tipo Object diventa una nuova variabile vettoriale di tipo Integer[] .
- analogamente, se tra le parentesi quadre viene posta una quasiasi stringa:
Dim ob As Object ob = ["a"]
o anche solo le due virgolette:
ob = [""]
allora la variabile originaria di tipo Object diventa una nuova variabile vettoriale di tipo String[] .
Esempio pratico
Mostriamo un esempio generico in cui due variabili iniziali di tipo Oggetto divengono rispettivamente una variabile vettoriale di tipo Intero ed una variabile vettoriale di tipo Struttura:
Public Struct Struttura b As Byte s As String End Struct Private st As Struct Struttura Public Sub Main() Dim ob1, ob2 As Object Dim i As Integer Dim p As Pointer ob1 = [i] Print ob1.Count ob1[0] = 9 ob1.Push(99) ob1.Push(99999) ' Verifichiamo il contenuto degli elementi della variabile "ob": Print ob1[0], ob1[1], ob1[2] ' Comportandosi la variabile di tipo Oggetto "ob1" come un vettore, si potranno ottenere i valori da essa contenuti anche così: p = ob1.Data Print Int@(p) Print Int@(p + 4) Print Int@(p + 8) ' Ora assegnamo la Struttura alla variabile di tipo Oggetto "ob2": ob2 = [st] ' A scopo didattico mostriamo soltanto il tipo di variabile assunto dalla originaria variabile "ob2": Print Object.Type(ob2) End
Creare un array multidimensionale con una variabile di tipo Oggetto
Con le modalità analoghe al precedente paragrafo è possibile creare array multidimensionale con una ordinaria variabile di tipo Oggetto.
Mostriamo un esempio, nel quale viene caricato un vettore di tipo "Intero":
Public Sub Main() Dim ii As Integer[] = [2, 22, 222, 2222, 22222, 222222, 2222222] Dim nn As New Integer[] Dim ob As Object ' Inseriamo il vettore "ii[]" nella variabile "ob" di tipo "Oggetto", che così viene resa anch'essa una vettore (contenente oggetti, vettori): ob = [ii] ' Assegnamo alcuni valori ai membri dell'altro vettore di tipo "Intero": With nn .Push(3) .Push(333) .Push(33333) End With ' Inseriamo anche il vettore "nn[]" nella variabile vettoriale di tipo "Oggetto": ob.Push(nn) ' Andiamo a vedere i valori. Gli indici "0" e "1" della prima dimensione si riferiscono rispettivamente all'oggetto vettore "ii[]", che è zero, poiché è il primo inserito, ed all'oggetto vettore "nn[]", che è uno, poiché è 1, poiché è il secondo inserito. L'indice della seconda dimensione si riferisce all'elemento del vettore, contenuto dalla variabile "ob", di cui si intende leggere il valore: Print ob[0][2] Print ob[1][1] End