Differenze tra le versioni di "Rendere vettore una variabile inizialmente di tipo Oggetto"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
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''.
+
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.
 
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.

Versione delle 17:28, 2 giu 2015

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
 

  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]

' 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)
  p = p + 4
  Print Int@(p)
  p = p + 4
  Print Int@(p)


' 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