Record (informatica)

tipo di dato strutturato
(Reindirizzamento da Record (tipo di dato))

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).

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

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 */

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]

Bibliografia

modifica
  • 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

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica