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

Da Gambas-it.org - Wikipedia.
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 2: Riga 2:
  
 
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.
 
  
 
Si assegnerà, dunque, alla variabile ''Oggetto'' una variabile di qualsiasi tipo con la cura di <SPAN Syle="text-decoration:underline">porre quest'ultima all'interno di parentesi quadre</span>. 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.
 
Si assegnerà, dunque, alla variabile ''Oggetto'' una variabile di qualsiasi tipo con la cura di <SPAN Syle="text-decoration:underline">porre quest'ultima all'interno di parentesi quadre</span>. 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.
Riga 14: Riga 13:
 
   
 
   
 
   Print Object.Type(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[]'' .
+
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:
+
=Rendere una variabile di Classe ''Object'' un array di un tipo di dato nativo=
 +
Una variabile di Classe ''Object'' può essere resa un array di un tipo di dato nativo. Infatti, se la variabile fra le parentesi, assegnata a quella di tipo ''Oggetto'', non è di tipo ''Oggetto'', allora la variabile di tipo ''Object'', trasformata in vettore, assumerà il tipo di dato della variabile assegnata:
 
   Dim ob As Object
 
   Dim ob As Object
 
   Dim i As Integer
 
   Dim i As Integer
Riga 29: Riga 25:
 
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
 
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
 
  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'' .
+
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[]'':
+
Se alla originaria variabile di tipo ''Object'' vengono assegnati valori mediante una ''lista vettoriale'', contenente tipi di dati diversi, non omogenei, la nuova variabile vettoriale assume ovviamente il tipo "Variant[]":
 
   Dim ob As Object
 
   Dim ob As Object
  Dim i As Integer
 
 
  <FONT color=#B22222>ob = [i]</font>
 
 
   
 
   
 
   ob = [99, "testo"]
 
   ob = [99, "testo"]
Riga 43: Riga 35:
 
   
 
   
 
   Print Object.Type(ob)
 
   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[]'' .
+
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 qualsiasi valore numerico:
* se tra le parentesi quadre viene posto un quasiasi valore numerico:
 
 
   Dim ob As Object
 
   Dim ob As Object
 
   
 
   
 
   ob = [99]
 
   ob = [99]
allora la variabile originaria di tipo ''Object'' diventa una nuova variabile vettoriale di tipo ''Integer[]'' .
+
allora la variabile originaria di tipo ''Object'' diventa una nuova variabile vettoriale di tipo "Integer[]".
  
 
+
Analogamente, se tra le parentesi quadre viene posta una qualsiasi stringa:
* analogamente, se tra le parentesi quadre viene posta una quasiasi stringa:
 
 
   Dim ob As Object
 
   Dim ob As Object
 
   
 
   
Riga 59: Riga 49:
 
o anche solo le due virgolette:
 
o anche solo le due virgolette:
 
   ob = [""]
 
   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[]".
 
 
 
 
  
 
===Esempio pratico===
 
===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'':
 
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
 
   b As Byte
 
   s As String
 
   s As String
  '''End''' Struct
+
  End Struct
 
   
 
   
'''Private''' st As Struct Struttura
 
 
   
 
   
 +
Public Sub Main()
 
   
 
   
'''Public''' Sub Main()
+
 
 
 
   Dim ob1, ob2 As Object
 
   Dim ob1, ob2 As Object
 
   Dim i As Integer
 
   Dim i As Integer
 
   Dim p As Pointer
 
   Dim p As Pointer
 +
  Dim st As New Struttura
 
   
 
   
 
   <FONT color=#B22222>ob1 = [i]</font>
 
   <FONT color=#B22222>ob1 = [i]</font>
Riga 104: Riga 92:
 
   Print Object.Type(ob2)
 
   Print Object.Type(ob2)
 
   
 
   
  '''End'''
+
  End
 
 
 
 
  
==Creare un array multidimensionale con una variabile di tipo Oggetto==
+
=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.
 
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":
 
Mostriamo un esempio, nel quale viene caricato un vettore di tipo "Intero":
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim ii As Integer[] = [2, 22, 222, 2222, 22222, 222222, 2222222]
 
   Dim ii As Integer[] = [2, 22, 222, 2222, 22222, 222222, 2222222]
Riga 136: Riga 122:
 
   Print ob[1][1]
 
   Print ob[1][1]
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 07:53, 27 giu 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[]".

Rendere una variabile di Classe Object un array di un tipo di dato nativo

Una variabile di Classe Object può essere resa un array di un tipo di dato nativo. Infatti, se la variabile fra le parentesi, assegnata a quella di tipo Oggetto, non è di tipo Oggetto, allora la variabile di tipo Object, trasformata in vettore, assumerà il tipo di dato 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 alla originaria variabile di tipo Object vengono assegnati valori mediante una lista vettoriale, contenente tipi di dati diversi, non omogenei, la nuova variabile vettoriale assume ovviamente il tipo "Variant[]":

 Dim ob As Object

 ob = [99, "testo"]

 Print ob[1]

 Print Object.Type(ob)

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 qualsiasi 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 qualsiasi 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


Public Sub Main()

 
 Dim ob1, ob2 As Object
 Dim i As Integer
 Dim p As Pointer
 Dim st As New Struttura

 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