Rendere vettore una variabile inizialmente di tipo Oggetto

Da Gambas-it.org - Wikipedia.
Versione del 18 giu 2014 alle 08:52 di Vuott (Discussione | contributi) (Creata pagina con 'Il caso è quello in cui si ha una variabile di tipo ''Object'', che si intende rendere ''vettoriale'' successivamente, ossia via codice, senza l'uso della parola ''New''. Si...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Il caso è quello in cui si ha una variabile di tipo Object, che si intende rendere vettoriale successivamente, ossia via codice, senza l'uso della parola New.

Si potrà ottenere questo risultato assegnando 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.

Fatto ciò, 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
 

  ob1 = [i]

  Print ob1.Count

  ob1[0] = 9

  ob1.Add(99)

  ob1.Add(99999)
 
' Verifichiamo il contenuto degli elementi della variabile "ob":
  Print ob1[0], ob1[1], ob1[2]


  ob2 = [st]

' A scopo didattico mostriamo soltanto il tipo di variabile assunto dalla originaria variabile "ob2":
  Print Object.Type(ob2)

End