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

Da Gambas-it.org - Wikipedia.
(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...')
 
 
(12 versioni intermedie di uno stesso utente non sono mostrate)
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''.
  
Si potrà ottenere questo risultato assegnando 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.  
+
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.
  
Fatto ciò, si potrà usare la variabile di tipo ''Oggetto'' esattamente come fosse un <SPAN Syle="text-decoration:underline">vettore</span>:
+
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.
Dim ob As Object
+
 
 +
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 <SPAN Syle="text-decoration:underline">vettore</span>:
 +
  Dim ob As Object
 
   
 
   
 
   ob = [ob]
 
   ob = [ob]
 
   
 
   
 
   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[]".
  
 
+
=Rendere una variabile di Classe ''Object'' un array di un tipo di dato nativo=
===Particolarità con variabili inizialmente di tipo diverso da quello ''Oggetto''===
+
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:
Bisogna, però, far rilevare che:
+
  Dim ob As Object
 
+
  Dim i As Integer
* 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>
la variabile "ob" diventa una nuova variabile vettoriale di tipo 'Integer''. Questa circostanza può essere verificata mediante l'istruzione:
+
la variabile "ob" diventa una nuova variabile vettoriale di tipo ''Integer''. Questa circostanza può essere verificata mediante l'istruzione:
 
  Print Object.Type(ob)
 
  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
 
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 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[]":
* 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 ob As Object
 
Dim i As Integer
 
 
  <FONT color=#B22222>ob = [i]</font>
 
 
   
 
   
 
   ob = [99, "testo"]
 
   ob = [99, "testo"]
Riga 38: 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 quasiasi stringa:
+
Analogamente, se tra le parentesi quadre viene posta una qualsiasi stringa:
 
   Dim ob As Object
 
   Dim ob As Object
 
   
 
   
 
   ob = ["a"]
 
   ob = ["a"]
 
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 st As New Struttura
 
   
 
   
  <FONT color=#B22222>ob1 = [i]</font>
+
  <FONT color=#B22222>ob1 = [i]</font>
 
   
 
   
  Print ob1.Count
+
  Print ob1.Count
 
   
 
   
  ob1[0] = 9
+
  ob1[0] = 9
 
   
 
   
  ob1.Add(99)
+
  ob1.Push(99)
 
   
 
   
  ob1.Add(99999)
+
  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]
+
  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>
 +
  p = ob1.Data
 +
  Print Int@(p)
 +
  Print Int@(p + 4)
 +
  Print Int@(p + 8)
 
   
 
   
  ob2 = [st]
+
<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)
+
  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
 +
 +
<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>
 +
  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>
 +
  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, 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 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