In informatica, un record (noto anche come struttura)[1] è un tipo di dato strutturato che comprende diversi elementi (detti campi o membri) di tipo eterogeneo. A differenza degli array, nei record il numero di campi è usualmente stabilito nella definizione del tipo e i campi hanno un nome. I record sono impiegati tipicamente nell'implementazione delle strutture dati.
Nei linguaggi di programmazione orientata agli oggetti, un oggetto è un record esteso grazie all'aggiunta di procedure e funzioni atte a manipolare i dati in esso immagazzinati; molti linguaggi OOP conservano comunque i tipi record (che spesso sono implementati come casi particolari di oggetti, ad esempio in C++), per questioni di retrocompatibilità o per consentire l'implementazione di strutture plain old data (POD).
Esempi
Ada
In Ada i record vengono dichiarati con la parola riservata record
, seguita da un elenco separato da punto e virgola dei nomi dei campi, per i quali viene specificato il tipo e facoltativamente un valore predefinito di inizializzazione. Le variabili di tipo strutturato possono essere inizializzate con una comprehension, e si accede ai campi con l'operatore punto.
type Libro is
record
Titolo: String(1..100) := "";
Editore: String(1..100) := "";
Autore: String(1..100) := "";
Integer: Anno_Pubblicazione := 0;
Positive: Numero_Pagine := 1;
end record
C
In C i record vengono chiamati strutture (struct) e vengono dichiarati con la parola riservata struct
, seguita da un elenco tra parentesi graffe dei nomi dei campi preceduti dal tipo e separati da punto e virgola (analogamente a delle dichiarazioni di variabili). L'inserimento del nome del tipo (nel caso dell'esempio, Libro
) è facoltativo e se si omette il tipo viene dichiarato anonimamente. Tra la graffa chiusa e il punto e virgola possono essere inseriti gli identificatori di variabili dichiarate con quel tipo. Se il tipo non è anonimo vi si può fare riferimento in seguito (per esempio nelle dichiarazioni) includendo la keyword struct
. L'inizializzazione avviene con un letterale composto, i cui elementi seguono l'ordine della dichiarazione. Si accede ai campi con l'operatore punto, o con l'operatore freccia nel caso di un puntatore a variabile di tipo struct (->
).
/* dichiarazione tipo strutturato */
struct Libro
{
char titolo[100];
char editore[100];
char autore[100];
int anno_pubblicazione;
unsigned int numero_pagine;
} divina_commedia, decameron; /* variabili di tipo struct Libro */
/* altra variabile di tipo struct Libro, con inizializzazione */
struct Libro canzoniere = {"Canzoniere", "Vindelino da Spira", "Francesco Petrarca", 1470, 257u};
struct Libro *puntatore = &canzoniere;
canzoniere.titolo == puntatore->titolo; /* accesso ai membri */
C++
In C++ i record ereditano la sintassi del C estendendola, per cui le strutture di un programma C generalmente sono valide anche in C++ ma non è valido in generale il contrario. Nelle struct C++ è infatti possibile utilizzare gli stessi membri di una classe, come costruttori e metodi, e la differenza rispetto al costrutto class
è nel fatto che per i membri di una classe il modificatore di accesso predefinito è private
, mentre nelle struct è public
.[2]
Note
Bibliografia
- Matthias Felleisen, Robert Bruce Findler, Matthew Flatt e Shriram Krishnamurthi, How to Design Programs, MIT Press, 2001.
- Bjarne Stroustrup, The C++ Programming Language, 4ª ed., Addison-Wesley, 2013.
Altri progetti