Differenze tra le versioni di "Strutture: dichiarazione ed uso"

Da Gambas-it.org - Wikipedia.
Riga 7: Riga 7:
  
 
Nell'esempio che segue, la ''Struttura'' modello avrà il nome: ''NomeStruttura'', mentre la variabile del tipo di quella ''Struttura'' la chiameremo: ''variabileStruttura'':
 
Nell'esempio che segue, la ''Struttura'' modello avrà il nome: ''NomeStruttura'', mentre la variabile del tipo di quella ''Struttura'' la chiameremo: ''variabileStruttura'':
  '''Public''' Struct <Font Color= #B22222>NomeStruttura</font>    <Font Color= #006400>' ''definiamo i campi della Struttura "modello"''</font>
+
  Public Struct <Font Color= #B22222>NomeStruttura</font>    <Font Color= #006400>' ''definiamo i campi della Struttura "modello"''</font>
 
   
 
   
 
  <Font Color= #006400>' ''Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto:''</font>
 
  <Font Color= #006400>' ''Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto:''</font>
Riga 13: Riga 13:
 
   valore2 As Byte    <Font Color= #006400>' ''il byte n° 4''</font>
 
   valore2 As Byte    <Font Color= #006400>' ''il byte n° 4''</font>
 
   valore3 as Integer  <Font Color= #006400>' ''dal byte n° 5 al byte n° 8''</font>
 
   valore3 as Integer  <Font Color= #006400>' ''dal byte n° 5 al byte n° 8''</font>
  '''End''' Struct
+
End Struct
 
   
 
   
 
  <Font Color= #006400>' ''Dichiariamo una variabile di tipo Struttura (composta a perfetta immagine della Struttura modello):''</font>
 
  <Font Color= #006400>' ''Dichiariamo una variabile di tipo Struttura (composta a perfetta immagine della Struttura modello):''</font>
    '''Private''' <Font Color= #0000FF>variabileStruttura</font> As New <Font Color= #B22222>NomeStruttura</font>
+
Private <Font Color= #0000FF>variabileStruttura</font> As New <Font Color= #B22222>NomeStruttura</font>
 
   
 
   
 
  <Font Color= #006400>' ''E' possibile anche usare la parola "'''Struct"''' invece di New:''
 
  <Font Color= #006400>' ''E' possibile anche usare la parola "'''Struct"''' invece di New:''
    Private variabileStruttura As '''Struct''' NomeStruttura</font>
+
Private variabileStruttura As '''Struct''' NomeStruttura</font>
 
    
 
    
 
   
 
   
Riga 56: Riga 56:
 
Esempio:
 
Esempio:
  
  '''Public''' Struct <Font Color= #B22222>StrutturaModello</font>
+
  Public Struct <Font Color= #B22222>StrutturaModello</font>
    arB[10] As Byte      <Font Color= #006400>' ''array monodimensionale definito''</font>
+
  arB[10] As Byte      <Font Color= #006400>' ''array monodimensionale definito''</font>
    arI As Integer[]      <Font Color= #006400>' ''array monodimensionale non definito''</font>
+
  arI As Integer[]      <Font Color= #006400>' ''array monodimensionale non definito''</font>
    mt$[10, 4] As String  <Font Color= #006400>' ''matrice''</font>
+
  mt$[10, 4] As String  <Font Color= #006400>' ''matrice''</font>
  '''End''' Struct
+
  End Struct
 
   
 
   
  '''Private''' <Font Color= #0000FF>variabileStruttura</font> As New <Font Color= #B22222>StrutturaModello</font>
+
Private <Font Color= #0000FF>variabileStruttura</font> As New <Font Color= #B22222>StrutturaModello</font>
 
   
 
   
 
   
 
   
Riga 110: Riga 110:
 
  <Font Color= #006400>' ''va dichiarata e definita innanzitutto la Struttura''
 
  <Font Color= #006400>' ''va dichiarata e definita innanzitutto la Struttura''
 
  ' ''che sarà contenuta nella Struttura principale:''</font>
 
  ' ''che sarà contenuta nella Struttura principale:''</font>
  '''Public''' Struct <Font Color= #FF0000>strutturaInterna</font>
+
  Public Struct <Font Color= #FF0000>strutturaInterna</font>
 
   sb As Byte
 
   sb As Byte
 
   sI As Integer
 
   sI As Integer
 
   s$ As String
 
   s$ As String
  '''End''' Struct
+
  End Struct
 
   
 
   
 
   
 
   
 
  <Font Color= #006400>' ''...quindi la Struttura principale, ossia quella che conterrà la Struttura secondaria interna.''
 
  <Font Color= #006400>' ''...quindi la Struttura principale, ossia quella che conterrà la Struttura secondaria interna.''
 
  ' ''In un suo campo verrà dichiarata la variabile di tipo della Struttura secondaria (che si intende appunto contenere in quella principale):''</font>
 
  ' ''In un suo campo verrà dichiarata la variabile di tipo della Struttura secondaria (che si intende appunto contenere in quella principale):''</font>
  '''Public''' Struct <Font Color= #0000FF>StrutturaPrincipale</font>
+
  Public Struct <Font Color= #0000FF>StrutturaPrincipale</font>
 
   prB As Byte
 
   prB As Byte
 
   prI As Integer
 
   prI As Integer
 
   <Font Color= #FFA500>internaStru</font> As Struct <Font Color= #FF0000>strutturaInterna</font>
 
   <Font Color= #FFA500>internaStru</font> As Struct <Font Color= #FF0000>strutturaInterna</font>
  '''End''' Struct
+
  End Struct
 
'''Private''' <Font Color= #1E90FF>struttVariab</font> As New <Font Color= #0000FF>StrutturaPrincipale</font>
 
 
   
 
   
 +
Private <Font Color= #1E90FF>struttVariab</font> As New <Font Color= #0000FF>StrutturaPrincipale</font>
 
   
 
   
 
   
 
   
Riga 181: Riga 180:
  
 
===1° esempio===
 
===1° esempio===
  '''Public''' Struct <Font Color= #B22222>strutturaModello</font>
+
  Public Struct <Font Color= #B22222>strutturaModello</font>
  prB As Byte
+
  prB As Byte
  prI As Integer
+
  prI As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
 
  <Font Color= #006400>' ''Dichiariamo la variabile della Struttura come array con numero di elementi definito.''
 
  <Font Color= #006400>' ''Dichiariamo la variabile della Struttura come array con numero di elementi definito.''
 
  ' ''In questo tipo di esempio sarà necessario inserire dopo "As" la parola "'''Struct'''":''</font>
 
  ' ''In questo tipo di esempio sarà necessario inserire dopo "As" la parola "'''Struct'''":''</font>
  '''Private''' <Font Color= #0000FF>strutturaVariabile[10]</font> As '''Struct''' <Font Color= #B22222>StrutturaModello</font>
+
Private <Font Color= #0000FF>strutturaVariabile[10]</font> As '''Struct''' <Font Color= #B22222>StrutturaModello</font>
 
   
 
   
 
   
 
   
Riga 221: Riga 220:
  
 
===2° esempio===
 
===2° esempio===
  '''Public''' Struct <Font Color= #B22222>strutturaModello</font>
+
  Public Struct <Font Color= #B22222>strutturaModello</font>
  prB As Byte
+
  prB As Byte
  prI As Integer
+
  prI As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
 
  <Font Color= #006400>' ''Dichiariamo la variabile della Struttura come array con numero di elementi definito.''
 
  <Font Color= #006400>' ''Dichiariamo la variabile della Struttura come array con numero di elementi definito.''
 
  ' ''In questo caso sarà necessario inserire dopo "As" la parola "'''New'''":''</font>
 
  ' ''In questo caso sarà necessario inserire dopo "As" la parola "'''New'''":''</font>
  '''Private''' <Font Color= #0000FF>strutturaVariabile</font> As '''New''' <Font Color= #B22222>StrutturaModello[10]</font>
+
Private <Font Color= #0000FF>strutturaVariabile</font> As '''New''' <Font Color= #B22222>StrutturaModello[10]</font>
 
   
 
   
 
   
 
   
Riga 267: Riga 266:
  
 
Nell'esempio che segue dichiariamo una variabile array di tipo ''Struttura'' con numero di elementi uguale a 3. Successivamente varieremo più volte detto numero portandolo complessivamente a 6:
 
Nell'esempio che segue dichiariamo una variabile array di tipo ''Struttura'' con numero di elementi uguale a 3. Successivamente varieremo più volte detto numero portandolo complessivamente a 6:
  '''Public''' Struct esempio
+
  Public Struct esempio
  b As Byte
+
  b As Byte
  i As Integer
+
  i As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
  <FONT color=#006400>' ''Viene dichiarata una variabile vettoriale (array) del tipo della "Struttura"''
+
  <FONT color=#006400>' ''Viene dichiarata una variabile vettoriale (array) del tipo della "Struttura" denominata "Esempio",''
  ' denominata "esempio", e contestualmente viene impostato ad esempio a 3 il numero iniziale degli elementi''
+
  ' ''e contestualmente viene impostato ad esempio a 3 il numero iniziale degli elementi che si provvederà a variare successivamente:''</font>
' che si provvederà a variare successivamente:</font>
+
  Private eV As New Esempio[<FONT color=B22222>3</font>]
  '''Private''' eV As New Esempio[<FONT color=B22222>3</font>]
 
 
   
 
   
 
   
 
   
Riga 331: Riga 329:
  
 
Esempio:
 
Esempio:
  '''Public''' Struct <Font Color= #B22222>strutturaModello</font>
+
  Public Struct <Font Color= #B22222>strutturaModello</font>
  prB As Byte
+
  prB As Byte
  prI As Integer
+
  prI As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
 
  <Font Color= #006400>' ''Dichiariamo la variabile della Struttura come array con numero di elementi indefinito.''
 
  <Font Color= #006400>' ''Dichiariamo la variabile della Struttura come array con numero di elementi indefinito.''
 
  ' ''In questo caso sarà necessario inserire dopo "As" la parola "'''New'''":''</font>
 
  ' ''In questo caso sarà necessario inserire dopo "As" la parola "'''New'''":''</font>
  '''Private''' <Font Color= #0000FF>prima</font> As '''New''' <Font Color= #B22222>StrutturaModello[]</font>
+
Private <Font Color= #0000FF>prima</font> As '''New''' <Font Color= #B22222>StrutturaModello[]</font>
 
   
 
   
 
   
 
   
Riga 386: Riga 384:
  
 
Nell'esempio che segue dichiariamo una variabile array di tipo ''Struttura'' senza definire preventivamente il numero dei suoi elementi. Esso verrà impostato solo successivamente portandolo complessivamente a 6:
 
Nell'esempio che segue dichiariamo una variabile array di tipo ''Struttura'' senza definire preventivamente il numero dei suoi elementi. Esso verrà impostato solo successivamente portandolo complessivamente a 6:
  '''Public''' Struct esempio
+
  Public Struct esempio
  b As Byte
+
  b As Byte
  i As Integer
+
  i As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
  <FONT color=#006400>' ''Viene dichiarata una variabile vettoriale (array) del tipo della "Struttura" denominata "esempio",''
+
  <FONT color=#006400>' ''Viene dichiarata una variabile vettoriale (array) del tipo della "Struttura" denominata "Esempio",''
  ' ''e contestualmente viene impostato ad esempio a 3 il numero iniziale degli elementiche si provvederà a variare successivamente:</font>
+
  ' ''e contestualmente viene impostato ad esempio a 3 il numero iniziale degli elementi che si provvederà a variare successivamente:''</font>
  '''Private''' eV As Esempio<FONT color=B22222>[]</font>
+
  Private eV As Esempio<FONT color=B22222>[]</font>
 
   
 
   
 
   
 
   
Riga 453: Riga 451:
 
==Variabile vettoriale di tipo ''Struttura'' con numero di elementi definito==
 
==Variabile vettoriale di tipo ''Struttura'' con numero di elementi definito==
 
Nel caso in cui la ''Struttura'' contenga uno o più campi rappresentati da variabili vettoriali di tipo ''Struttura'' con numero di elementi definito, si procederà nel seguente modo:
 
Nel caso in cui la ''Struttura'' contenga uno o più campi rappresentati da variabili vettoriali di tipo ''Struttura'' con numero di elementi definito, si procederà nel seguente modo:
  '''Public''' Struct <FONT color=Red>Struttura_Secondaria</font>
+
  Public Struct <FONT color=Red>Struttura_Secondaria</font>
 
   a As Byte
 
   a As Byte
 
   b As Integer
 
   b As Integer
  '''End''' Struct
+
  End Struct
 
    
 
    
 
   
 
   
 
  <FONT color=gray>' ''Quindi la "Struttura" sarà rappresentata all'interno della Struttura principale''
 
  <FONT color=gray>' ''Quindi la "Struttura" sarà rappresentata all'interno della Struttura principale''
 
  ' ''dalla sua relativa variabile vettoriale, denominata "str_sec", usando le parole "As Struct":''</font>
 
  ' ''dalla sua relativa variabile vettoriale, denominata "str_sec", usando le parole "As Struct":''</font>
  '''Public''' Struct <FONT color=Blue>Struttura_Principale</font>
+
  Public Struct <FONT color=Blue>Struttura_Principale</font>
 
   primo_campo As Integer
 
   primo_campo As Integer
 
   secondo_campo As Integer
 
   secondo_campo As Integer
 
  <FONT color=gray>' ''Dichiariamo mediante la parola "Struct" la variabile vettoriale di tipo della Struttura denominata "Struttura_Secondaria":''</font>
 
  <FONT color=gray>' ''Dichiariamo mediante la parola "Struct" la variabile vettoriale di tipo della Struttura denominata "Struttura_Secondaria":''</font>
 
   <FONT color=Green>str_sec['''n''']</font> As Struct <FONT color=Red>Struttura_Secondaria</font>
 
   <FONT color=Green>str_sec['''n''']</font> As Struct <FONT color=Red>Struttura_Secondaria</font>
  '''End''' Struct
+
  End Struct
  
  
 
====Esempio pratico====
 
====Esempio pratico====
  '''Public''' Struct Struttura_Secondaria
+
  Public Struct Struttura_Secondaria
  a As Byte
+
  a As Byte
  b As Integer
+
  b As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
 
   
 
   
  '''Public''' Struct Struttura_Principale
+
  Public Struct Struttura_Principale
  primo_campo As Integer
+
  primo_campo As Integer
  secondo_campo As Integer
+
  secondo_campo As Integer
  str_sec[3] As Struct Struttura_Secondaria
+
  str_sec[3] As Struct Struttura_Secondaria
  '''End''' Struct
+
  End Struct
 
   
 
   
 
   
 
   
Riga 500: Riga 498:
 
==Variabile vettoriale di tipo ''Struttura'' con numero di elementi indefinito==
 
==Variabile vettoriale di tipo ''Struttura'' con numero di elementi indefinito==
 
Nel caso in cui la ''Struttura'' contenga uno o più campi rappresentati da variabili vettoriali di tipo ''Struttura'' con numero di elementi non definito, si procederà nel seguente modo:
 
Nel caso in cui la ''Struttura'' contenga uno o più campi rappresentati da variabili vettoriali di tipo ''Struttura'' con numero di elementi non definito, si procederà nel seguente modo:
  '''Public''' Struct <FONT color=Red>Struttura_Secondaria</font>
+
  Public Struct <FONT color=Red>Struttura_Secondaria</font>
 
   a As Byte
 
   a As Byte
 
   b As Integer
 
   b As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
 
   
 
   
 
  <FONT color=gray>' ''Quindi la "Struttura" sarà rappresentata all'interno della Struttura principale dalla sua relativa variabile vettoriale, denominata "str_sec":''</font>
 
  <FONT color=gray>' ''Quindi la "Struttura" sarà rappresentata all'interno della Struttura principale dalla sua relativa variabile vettoriale, denominata "str_sec":''</font>
  '''Public''' Struct <FONT color=Blue>Struttura_Principale</font>
+
  Public Struct <FONT color=Blue>Struttura_Principale</font>
 
   primo_campo As Integer
 
   primo_campo As Integer
 
   secondo_campo As Integer
 
   secondo_campo As Integer
 
  <FONT color=gray>' ''Dichiariamo la variabile vettoriale di tipo della Struttura denominata "Struttura_Secondaria[]":''</font>
 
  <FONT color=gray>' ''Dichiariamo la variabile vettoriale di tipo della Struttura denominata "Struttura_Secondaria[]":''</font>
 
   <FONT color=Green>str_sec</font> As <FONT color=Red>Struttura_Secondaria[]</font>
 
   <FONT color=Green>str_sec</font> As <FONT color=Red>Struttura_Secondaria[]</font>
  '''End''' Struct
+
  End Struct
  
  
 
====Esempio pratico====
 
====Esempio pratico====
  '''Public''' Struct Struttura_Secondaria
+
  Public Struct Struttura_Secondaria
  a As Byte
+
  a As Byte
  b As Integer
+
  b As Integer
  '''End''' Struct
+
  End Struct
 
   
 
   
 
   
 
   
  '''Public''' Struct Struttura_Principale
+
  Public Struct Struttura_Principale
  primo_campo As Integer
+
  primo_campo As Integer
  secondo_campo As Integer
+
  secondo_campo As Integer
  str_sec As Struttura_Secondaria[]
+
  str_sec As Struttura_Secondaria[]
  '''End''' Struct
+
  End Struct
 
   
 
   
 
   
 
   

Versione delle 07:04, 5 ott 2014

La Struttura similmente al vettore (Array) aggrega due o più elementi. Però, mentre il vettore aggrega elementi del medesimo tipo (per esempio tutti valori di tipo Integer, o di tipo Byte, etc), la Struttura aggrega solitamente (ma non necessariamente) elementi di tipo diverso.

In Gambas3 la Struttura, analogamente ad un oggetto, può essere considerata una Classe senza metodi, che, come nel C, definisce e si riserva una porzione di memoria.

Dichiariamo una Struttura con dei campi, che dovranno essere riempiti con dei valori. Tale Struttura avrà un proprio nome e farà da modello alle particolari variabili di tipo Struttura che saranno effettivamente utilizzate per contenere valori.


Nell'esempio che segue, la Struttura modello avrà il nome: NomeStruttura, mentre la variabile del tipo di quella Struttura la chiameremo: variabileStruttura:

Public Struct NomeStruttura    ' definiamo i campi della Struttura "modello"

' Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto:
  valore1 As String   ' dal byte n° 0 al n° 3
  valore2 As Byte     ' il byte n° 4
  valore3 as Integer  ' dal byte n° 5 al byte n° 8
End Struct

' Dichiariamo una variabile di tipo Struttura (composta a perfetta immagine della Struttura modello):
Private variabileStruttura As New NomeStruttura

' E' possibile anche usare la parola "Struct" invece di New:
Private variabileStruttura As Struct NomeStruttura
 


Public Sub Form_Open()

 Dim variabValor as Byte

  var$ = Inputbox("Immettiamo un numero per \"riempire\" il campo \"valore3\" di \"variabileStruttura\": valore3 .")

' Attribuiamo un valore a ciascun campo variabile della variabile di tipo Struttura
' (in questo esempio i valori sono due già definiti (3 e 6) ed il terzo che abbiamo immesso con "InputBox"):
  variabileStruttura.valore1 = "Esempio sulle Strutture"
  variabileStruttura.valore2 = 6
  variabileStruttura.valore3 = Val(var$)

End


Public Sub Button1_Click()

' quindi operiamo con i valori contenuti dalla variabile "variabStruttura",
' per esempio li facciamo mostrare in console:
  With variabileStruttura
    Print .valore1
    Print .valore2
    Print .valore3
  End With

End


Strutture contenenti Vettori e Matrici

Le Strutture possono essere costituite da campi di variabili vettoriali (Array) e Matrici.

Esempio:

Public Struct StrutturaModello
  arB[10] As Byte       ' array monodimensionale definito
  arI As Integer[]      ' array monodimensionale non definito
  mt$[10, 4] As String  ' matrice
End Struct

Private variabileStruttura As New StrutturaModello


Public Sub Form_Open()

 Dim a, m As Byte

  variabileStruttura.arI = New Integer[]

  For a = 0 To 9
    With variabileStruttura
      .arB[a] = a
      .arI.Add(a + a)
        For m = 0 To 3
         .mt$[a, m] = Chr(variabileStruttura.arI[a] + 70)
        Next
   End With
 Next

End


Public Sub Button1_Click()

 Dim a, m As Byte

  For a = 0 To 9
   With variabileStruttura
    Print .arB[a]
    Print .arI[a]
    For m = 0 To 3
      Print .mt$[a, m]
    Next
   End With
 Next

End


Strutture che contengono altre Strutture

Le Strutture possono contenere, come proprio elemento, altre Strutture. Da tenere presente che è necessario dichiarare e definire la Struttura, che sarà contenuta nella Struttura principale, prima della dichiarazione della Struttura principale contenente.

Esempio:

' va dichiarata e definita innanzitutto la Struttura
' che sarà contenuta nella Struttura principale:
Public Struct strutturaInterna
  sb As Byte
  sI As Integer
  s$ As String
End Struct


' ...quindi la Struttura principale, ossia quella che conterrà la Struttura secondaria interna.
' In un suo campo verrà dichiarata la variabile di tipo della Struttura secondaria (che si intende appunto contenere in quella principale):
Public Struct StrutturaPrincipale
  prB As Byte
  prI As Integer
  internaStru As Struct strutturaInterna
End Struct

Private struttVariab As New StrutturaPrincipale


Public Sub Form_Open()

 Dim a As Byte

  a = 1

' Assegnamo i valori alle variabili contenute nei campi della variabile Struttura principale:
 With struttVariab
   .prB = 10
   .prI = 1000
   .internaStru.sb = a
   .internaStru.sI = struttVariab.prI + a
   .internaStru.s$ = "prova " & Str(a)
 End With

End


' Andiamo a mostrare i risultati in console:
Public Sub Button1_Click()
 
 With struttVariab
   Print .prB
   Print .prI
   Print .internaStru.sb
   Print .internaStru.sI
   Print .internaStru.s$
 End With

End

Il risultato in console sarà:
10
1000
1
1001
prova 1


Variabili array di tipo "Struttura"

E' infine possibile realizzare variabili array di tipo "Struttura".

La dichiarazione di variabili vettoriali di tipo Struttura può avvenire:
- mediante la parola Struct. Tale dichiarazione è Statica;
- mediante la parola New. Tale dichiarazione è Dinamica.


Vettori con numero di elementi definito

Possiamo dichiarare e creare variabili array di tipo Struttura con numero di elementi definito.

1° esempio

Public Struct strutturaModello
  prB As Byte
  prI As Integer
End Struct

' Dichiariamo la variabile della Struttura come array con numero di elementi definito.
' In questo tipo di esempio sarà necessario inserire dopo "As" la parola "Struct":
Private strutturaVariabile[10] As Struct StrutturaModello


Public Sub Form_Open()

 Dim a As Byte

' Assegnamo i valori agli elementi della variabile array di tipo Struttura:
 For a = 0 To 9
   With strutturaVariabile[a]
     .prB = a
     .prI = 1000 + a
   End With
 Next

End


' Andiamo a mostrare i risultati in console:
Public Sub Button1_Click()

 Dim a As Byte

For a = 0 To 9
 With strutturaVariabile[a]
   Print .prB
   Print .prI
 End With
Next

End

2° esempio

Public Struct strutturaModello
  prB As Byte
  prI As Integer
End Struct

' Dichiariamo la variabile della Struttura come array con numero di elementi definito.
' In questo caso sarà necessario inserire dopo "As" la parola "New":
Private strutturaVariabile As New StrutturaModello[10]


Public Sub Form_Open()

Dim a As Byte

' Assegnamo i valori agli elementi della variabile array di tipo Struttura:
  For a = 0 To 9

    With strutturaVariabile[a] = New StrutturaModello
      .prB = a
      .prI = 1000 + a
    End With

  Next

End


' Andiamo a mostrare i risultati in console:
Public Sub Button1_Click()

 Dim a As Byte

 For a = 0 To 9
   With strutturaVariabile[a]
     Print .prB
     Print .prI
   End With
 Next

End


Variazione successiva del numero degli elementi già definito

E' possibile variare successivamente, anche in modo ricorsivo, il numero degli elementi di una variabile vettoriale (array) di tipo Struttura, purché il numero dei suoi elementi, preliminarmente dichiarati, sia maggiore di zero.

Nell'esempio che segue dichiariamo una variabile array di tipo Struttura con numero di elementi uguale a 3. Successivamente varieremo più volte detto numero portandolo complessivamente a 6:

Public Struct esempio
  b As Byte
  i As Integer
End Struct

' Viene dichiarata una variabile vettoriale (array) del tipo della "Struttura" denominata "Esempio",
' e contestualmente viene impostato ad esempio a 3 il numero iniziale degli elementi che si provvederà a variare successivamente:
Private eV As New Esempio[3]


Public Sub Form_Open()

 Dim j, k As Byte

' Il ciclo imposta volta per volta,  incrementandolo, il valore del numero degli elementi
' della variabile vettoriale di tipo "Struttura":
  For k = 4 To 6

    eV = New Esempio[k]

  Next

  For j = 0 To eV.Max
' Viene creata, quindi, la nuova variabile,
' e vengono assegnati dei valori ai suoi campi:
      With eV[j] = New Esempio
        .b = j
        .i = j + 1
      End With
 
  Next
 
' Si verifica il numero complessivo finale
' degli elementi della variabile vettoriale:
  Print "eV.Count = "; eV.Count
 
End


Public Sub Button1_Click()

 Dim j As Byte

' Si verifica quindi il valori contenuti dai campi
' di ciascuna variabile creata:
 For j = 0 To eV.Max

   With eV[j]
     Print "b = "; .b
     Print "i = "; .i
   End With
 
 Next

End


Vettori con numero di elementi indefinito

E' possibile creare una variabile array di tipo Struttura avente numero di elementi non predefinito. Si potranno quindi aggiungere gli elementi alla variabile vettore ogni qual volta le si attribuisce una semplice variabile di tipo Struttura.

Poiché, come si è avuto modo già di precisare, la dichiarazione di un vettore di tipo Struttura mediante la parola New conferisce dinamicità alla variabile vettoriale medesima, si farà uso di tale parola per consentire l'incremento degli elementi della variabile vettoriale di tipo Struttura.

Esempio:

Public Struct strutturaModello
  prB As Byte
  prI As Integer
End Struct

' Dichiariamo la variabile della Struttura come array con numero di elementi indefinito.
' In questo caso sarà necessario inserire dopo "As" la parola "New":
Private prima As New StrutturaModello[]


Public Sub Form_Open()

  Dim a As Byte

' Dichiariamo un'altra variabile del tipo della Struttura modello:
  Dim seconda As StrutturaModello

' Assegnamo i valori agli elementi della variabile normale di tipo Struttura:
  For a = 0 To 9

' Va prevista ovviamente la creazione di ogni variabile di tipo Struttura:
    seconda = New StrutturaModello

    With seconda
     .prB = a
     .prI = 1000 + a
    End With

' La variabile Struttura array vuole una variabile Struttura (non array) del tipo "StrutturaModello":
    prima.Add(seconda)

  Next

End


' Andiamo a mostrare i risultati in console:
Public Sub Button1_Click()

 Dim a As Byte

 For a = 0 To 9
   With prima[a]
     Print .prB
     Print .prI
   End With
  Next

End


Impostazione successiva del numero di elementi

E' possibile impostare successivamente il numero di elementi di una variabile vettoriale dichiarata priva di un numero definito di elementi.

Nell'esempio che segue dichiariamo una variabile array di tipo Struttura senza definire preventivamente il numero dei suoi elementi. Esso verrà impostato solo successivamente portandolo complessivamente a 6:

Public Struct esempio
  b As Byte
  i As Integer
End Struct

' Viene dichiarata una variabile vettoriale (array) del tipo della "Struttura" denominata "Esempio",
' e contestualmente viene impostato ad esempio a 3 il numero iniziale degli elementi che si provvederà a variare successivamente:
Private eV As Esempio[]


Public Sub Form_Open()

 Dim j, k As Byte

' Il ciclo imposta volta per volta, incrementadolo sino al valore stabilito,
il numero degli elementi della variabile vettoriale di tipo "Struttura":
  For k = 1 To 6

' Viene variato il numero degli elementi della variabile vettoriale
' del tipo della Struttura denominata "esempio":
    eV = New Esempio[k]

  Next

  For j = 0 To eV.Max
' Viene creata, quindi, la nuova variabile,
' e vengono assegnati dei valori ai suoi campi:
      With eV[j] = New Esempio
        .b = j
        .i = j + 1
      End With
 
  Next
 
' Si verifica il numero complessivo finale
' degli elementi della variabile vettoriale:
  Print "eV.Count = "; eV.Count
 
End


Public Sub Button1_Click()

 Dim j As Byte

' Si verifica quindi il valori contenuti dai campi
' di ciascuna variabile creata:
 For j = 0 To eV.Max

   With eV[j]
     Print "b = "; .b
     Print "i = "; .i
   End With
 
 Next

End


Strutture che contengono variabili vettoriali di tipo Struttura

Le Strutture possono contenere campi rappresentati da variabili vettoriali (array), o anche matrici, di tipo Struttura. Gli elementi di tali variabili vettoriali, o matrici, possono essere sia definiti che indefiniti, e dunque in quest'ultimo caso incrementabili nelle modalità viste nel paragrafo precedente.
In ogni caso la sintassi seguirà le forme viste in precedenza.


Variabile vettoriale di tipo Struttura con numero di elementi definito

Nel caso in cui la Struttura contenga uno o più campi rappresentati da variabili vettoriali di tipo Struttura con numero di elementi definito, si procederà nel seguente modo:

Public Struct Struttura_Secondaria
  a As Byte
  b As Integer
End Struct
 

' Quindi la "Struttura" sarà rappresentata all'interno della Struttura principale
' dalla sua relativa variabile vettoriale, denominata "str_sec", usando le parole "As Struct":
Public Struct Struttura_Principale
  primo_campo As Integer
  secondo_campo As Integer
' Dichiariamo mediante la parola "Struct" la variabile vettoriale di tipo della Struttura denominata "Struttura_Secondaria":
  str_sec[n] As Struct Struttura_Secondaria
End Struct


Esempio pratico

Public Struct Struttura_Secondaria
  a As Byte
  b As Integer
End Struct


Public Struct Struttura_Principale
  primo_campo As Integer
  secondo_campo As Integer
  str_sec[3] As Struct Struttura_Secondaria
End Struct


Public Sub Main()

 Dim sp As New Struttura_Principale


  sp.str_sec[0].a = 9
  sp.str_sec[1].a = 10
   
  
  Print sp.str_sec[0].a
  Print sp.str_sec[1].a

End


Variabile vettoriale di tipo Struttura con numero di elementi indefinito

Nel caso in cui la Struttura contenga uno o più campi rappresentati da variabili vettoriali di tipo Struttura con numero di elementi non definito, si procederà nel seguente modo:

Public Struct Struttura_Secondaria
  a As Byte
  b As Integer
End Struct


' Quindi la "Struttura" sarà rappresentata all'interno della Struttura principale dalla sua relativa variabile vettoriale, denominata "str_sec":
Public Struct Struttura_Principale
  primo_campo As Integer
  secondo_campo As Integer
' Dichiariamo la variabile vettoriale di tipo della Struttura denominata "Struttura_Secondaria[]":
  str_sec As Struttura_Secondaria[]
End Struct


Esempio pratico

Public Struct Struttura_Secondaria
  a As Byte
  b As Integer
End Struct


Public Struct Struttura_Principale
  primo_campo As Integer
  secondo_campo As Integer
  str_sec As Struttura_Secondaria[]
End Struct


Public Sub Main()

 Dim sp As New Struttura_Principale
 Dim s1, s2, s3 As New Struttura_Secondaria

  s1.a = 99
  s2.a = 100
  s3.a = 101


  sp.str_sec = New Struttura_Secondaria[]

  sp.str_sec.Add(s1)
  sp.str_sec.Add(s2)
  sp.str_sec.Add(s3)

  Print sp.str_sec[0].a
  Print sp.str_sec[1].a
  Print sp.str_sec[2].a

End