Differenze tra le versioni di "Strutture: dichiarazione ed uso"
Riga 56: | Riga 56: | ||
Esempio: | Esempio: | ||
− | ''' | + | '''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> | ||
Riga 65: | Riga 65: | ||
− | ''' | + | '''Public''' Sub Form_Open() |
Dim a, m As Byte | Dim a, m As Byte | ||
Riga 84: | Riga 84: | ||
− | ''' | + | '''Public''' Sub Button1_Click() |
Dim a, m As Byte | Dim a, m As Byte | ||
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 |
'''Private''' <Font Color= #FFA500>internaStru</font> As New <Font Color= #FF0000>strutturaInterna</font> | '''Private''' <Font Color= #FFA500>internaStru</font> As New <Font Color= #FF0000>strutturaInterna</font> | ||
Riga 120: | Riga 120: | ||
<Font Color= #006400>' ''...quindi la Struttura principale:''</font> | <Font Color= #006400>' ''...quindi la Struttura principale:''</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 186: | Riga 186: | ||
<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.'' | ||
' ''Sarà necessario inserire dopo "As" la parola "'''Struct'''":''</font> | ' ''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 220: | Riga 220: | ||
====Esempio <Font Color= #FF0000>'''2'''</font> (variabili Strutture array con numero di elementi definito)==== | ====Esempio <Font Color= #FF0000>'''2'''</font> (variabili Strutture array con numero di elementi definito)==== | ||
− | 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 276: | Riga 276: | ||
<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> |
Versione delle 17:37, 10 feb 2013
La Struttura similmente all'Array aggrega due o più elementi. Però, mentre l'Array 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: nuovaStruttura:
PUBLIC Struct NomeStruttura ' definisco i campi della Struttura "modello" ' Questa Struttura si riserverà, occupandola, 9 byte di memoria in tutto: valore1 As Integer ' dal byte n° 0 al n° 3 valore2 As Integer ' dal byte n° 4 al n° 7 valore3 as Byte ' il byte n° 8 END Struct ' dichiaro una variabile di tipo Struttura (composta a perfetta immagine della Struttura modello): Private nuovaStruttura As New NomeStruttura ' E' possibile anche usare la parola "Struct" invece di New: Private nuovaStruttura As Struct NomeStruttura Public Sub Form_Open() Dim variabValor as Byte variabValor = Inputbox("Immetto un valore per \"riempire\" il campo \"variabile\" di \"nuovaStruttura\": valore3 .") ' Attribuisco 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 ho immesso io con "InputBox"): nuovaStruttura.valore1 = 3 nuovaStruttura.valore2 = 6 nuovaStruttura.valore3 = variabValor End Public Sub Button1_Click() ' quindi opero con i valori contenuti dalla variabile "nuovaStruttura", ' per esempio li faccio mostrare in console: With nuovaStruttura Print .valore1 Print .valore2 Print .valore3 End With End
Indice
Strutture contenenti Array e Matrici
Le Strutture possono essere costituite da campi di variabili 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 strutturaVariabile As New StrutturaModello Public Sub Form_Open() Dim a, m As Byte strutturaVariabile.arI = New Integer[] For a = 0 To 9 With strutturaVariabile .arB[a] = a .arI.Add(a + a) For m = 0 To 3 .mt$[a, m] = Chr(strutturaVariabile.arI[a] + 70) Next End With Next End Public Sub Button1_Click() Dim a, m As Byte For a = 0 To 9 With strutturaVariabile 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 Private internaStru As New strutturaInterna ' ...quindi la Struttura 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() Dim a As Byte a = 1 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".
Esempio 1 (variabili Strutture array con numero di elementi definito)
Public Struct strutturaModello prB As Byte prI As Integer End Struct ' Dichiariamo la variabile della Struttura come array con numero di elementi definito. ' 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
Esempio 2 (variabili Strutture array con numero di elementi definito)
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 strutturaVariabile[a] = New StrutturaModello 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
Array di Strutture
E' possibile creare un array di Strutture. Avremo pertanto una variabile di tipo Struttura che conterrà nei suoi elementi altre variabili 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 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