Documentazione di Gambas
Application Repository
Come...
Componenti
Da fare
Documentazione Sviluppatori
Documenti
Indice del linguaggio
LEGGIMI
Lessico
Licenza dello Wiki
Messaggi di errore
Panoramica del linguaggio
Array nativi
Assegnazione
Classi contenitore native
Costanti
Costanti predefinite
Dichiarazione di Array (o Matrice)
Dichiarazione di enumerazione
Dichiarazione di metodi
Dichiarazione di struttura
Dichiarazione di una proprietà
Dichiarazione di variabili locali
Dichiarazioni di costanti
Dichiarazioni di variabili
Espressioni
Eventi dichiarazioni
Eventi gestione
Eventi globali gestione
Formati definiti dall'utente
Funzioni aritmetiche
Funzioni di conversione
Funzioni di formattazione
Funzioni di localizzazione e traduzione
Funzioni di manipolazione dei bits
Funzioni di Stream e Input/Output
Funzioni di test sui caratteri
Funzioni intrinsiche
Funzioni logaritmi ed esponenziali
Funzioni numeriche casuali
Funzioni stringa
Funzioni su file e directory
Funzioni sui tipi di dati
Funzioni temporali
Funzioni trigonometriche
Funzioni varie
Gestione degli errori
Gestione dei Processi
Gestione delle classi e degli oggetti
Gestione delle funzioni esterne
Il modello a oggetti di Gambas
Loop degli eventi
Metodi di comparazione
Metodi speciali
Metodo Call
Numeri complessi
Numeri Interi
Numeri in virgola mobile
Operatori aritmetici
Operatori di assegnamento
Operatori logici
Operatori ordine di valutazione
Operatori stringa
Percorsi di File e Directory
Rappresentazione binaria dei dati
Sintassi della modalità file
Strutture di controllo e funzioni
Strutture di controllo sui cicli
Strutture di controllo varie
Tipi di dati
Uso di parole chiave riservate come identificatori
Registrazione
Ultime modifiche
Wiki Manual

Dichiarazione di struttura

PUBLIC STRUCT Identificatore
Campo 1 AS [ Tipo di dato ] Campo 2 AS [ Tipo di dato ] . . . Campo n AS [ Tipo di dato ]
END STRUCT

Questa parola chiave dichiara una struttura.

Internamente, una struttura è esattamente come una classe che contiene al suo interno solo variabili pubbliche; ma che puoi dichiarare come strutture incorporate o matrici di strutture incorporate, come spiegato di seguito.
Quando si utilizzano strutture incorporate o matrici di strutture incorporate, l'interprete deve creare oggetti temporanei in modo da poterli manipolare come oggetti reali. E questo è più lento!

Di conseguenza, NON USARE STRUTTURE, A MENO CHE TU NON LO DEBBA FARE! Ad esempio, per comunicare con una funzione di libreria C condivisa che richiede strutture in C.

Se dichiari la stessa struttura in due classi diverse, le strutture devono avere esattamente gli stessi campi, altrimenti l'interprete genererà un errore.

Array incorporati

Nelle strutture puoi utilizzare array incorporati.

PUBLIC STRUCT Identificatore ... Campo k [ Dichiarazione di array incorporato ] AS [ Tipo di dato ] ... END STRUCT

Allineamento dei campi:

Le strutture non sono compattate, per esempio i campi sono allineati in un idirizzo di memoria che è un multiplo della sua lunghezza nella memoria stessa:

L'ordine delle dichiarazioni è rispettato, conseguentemente è possibile che la struttura abbia dei buchi di memoria non utilizzati. Per esempio, se dichiarate un campo byte e subito dopo un campo intero avrete un buco di tre bytes.

Attenzione! Vi è poi un problema: quando si compila il codice sorgente in C, il compilatore C potrebbe riordinare i campi della struttura. E, per quanto se ne sa, questo processo non è ben documentato.

Una soluzione potrebbe essere in futuro l'utilizzo della libreria libffi usata da Gambas. A quanto pare, questa libreria può inviare una struttura ad una funzione C prendendo in considerazione questo problema. Ma questa libreria è molto meno documentata da Gambas, per poter vedere le difficoltà!

Strutture incorporate:

Una struttura può essere incorporata all'interno di una classe (classe) o in un'altra struttura, dichiarando una variabile con la seguente sintassi:

[ PRIVATE | PUBLIC ] Identificatore AS STRUCT NomeStruttura

Esempio

' Gambas class file

PUBLIC STRUCT Braccio
  Lunghezza AS Float
  NumeroDita AS Integer
  HaUnGuanto AS Boolean
END STRUCT

PUBLIC STRUCT Gamba
  Lunghezza AS Float
  NumeroDita AS Integer
  HaCalzino AS Boolean
  HaScarpa AS Boolean
END STRUCT

PUBLIC STRUCT Uomo
  Nome AS String
  COGNOME AS String
  Eta AS Integer
  Occhi AS String
  BraccioSinistro AS STRUCT Braccio
  BraccioDestro AS STRUCT Braccio
  LunghezzaGamba AS STRUCT Gamba
  GambaDestra AS STRUCT Gamba
END STRUCT

Array di strutture:

Identificatore [ Dimensione ] AS STRUCT NomeStruttura

Le strutture sono incorporate, per esempio il loro contenuto è direttamente assegnato all'interno della matrice. Array di questo tipo non sono matrici reali, hanno solo alcuni metodi della classe matrice originale:
  • Sono accessibili da indice.

  • Possono essere enumerati.

  • Potete ottenere informazioni circa la lunghezza e la dimensione.

Questo è tutto!

Attenzione! potete creare solo array di strutture incorporate.

Vedi anche