record
record (ingl., letteralmente: «registrazione») in informatica, insieme di dati considerati come un’unica entità. Un record è una struttura ordinata di dati, individuata da un nome o da una chiave, che si riferisce univocamente a tutte le informazioni del record stesso, ed è formata da un insieme di elementi, detti campi. Ogni campo è destinato ad accogliere un particolare tipo di dato ed è contraddistinto da un nome che rende facilmente identificabili i diversi elementi del record. I record si distinguono in record fisici e record logici. Il primo tipo si riferisce alle modalità con cui l’elaboratore scrive fisicamente le informazioni in memoria, seguendo delle procedure controllate dal sistema operativo. Alla seconda categoria appartengono i record contenuti in un database e non collegati direttamente ai record fisici.
Dal punto di vista dei linguaggi di programmazione il record è un particolare tipo di dato. Per esempio, una voce di una rubrica telefonica può essere memorizzata come un record formato dai campi: cognome, nome, numero di telefono. L’insieme di più record forma una tabella, che costituisce la principale struttura dei dati su cui opera il database. Per evitare ambiguità e favorire la ricerca delle informazioni attraverso particolari interrogazioni del database, dette query, si inserisce nel record un campo numerico univoco e sequenziale. Nei linguaggi di programmazione, la dichiarazione di un dato di tipo record si realizza con una modalità simile a quella dell’esempio seguente (ciascun linguaggio utilizza sue specifiche parole e regole):
dove i campi del record di nome utente sono cognome, nome, telefono; i primi due sono stringhe lunghe al più venti caratteri (il tipo di dato è, quindi, string) mentre il terzo può essere considerato un generico numero naturale (integer). Nella dichiarazione si specificano i nomi delle variabili associate a ognuno dei campi e il tipo di dato cui appartengono. Il nome scelto per designare il particolare tipo record (in questo caso utente) indica un tipo, le cui caratteristiche particolari sono definite da chi programma, e non indica una variabile. Per questo, se si vuole utilizzare una variabile di tipo utente, occorrerà specificarla con un altro nome:
Per definire un tipo record in cui memorizzare una data che sia, per esempio, compresa tra il 1° gennaio 1950 e il 31 dicembre 2049 si scriverà allora (chiamando data questo tipo record e indicando con due puntini l’intervallo):
Definito il tipo data in questo modo, vi sono alcuni suoi elementi che non corrispondono a date effettive: per esempio il 31.2.1999, pur essendo di tipo data, non è una data.
Come esempio, si supponga di voler definire un tipo nominativo, quale un tipo record in cui sia possibile rappresentare ogni studente di una scuola, la sua data di nascita, la classe e la sezione frequentata. Si può allora utilizzare il tipo data definito nell’esempio precedente e quindi definire il tipo nominativo in questo modo:
Nella parte dichiarativa del programma va poi indicato il nome della variabile di tipo record; per esempio:
I campi di un record possono essere di qualunque tipo, compreso il tipo record (come nell’esempio precedente in cui il campo nascita è di tipo data, che a sua volta è un tipo record). Per accedere a una singola componente di un tipo record, per riconoscerla o per cambiarne il contenuto, occorre utilizzare una particolare notazione secondo la quale al nome della variabile record va fatto seguire (intervallato da un punto) il nome del campo al quale accedere. Se, per esempio, tutti gli studenti della classe 3a A sono promossi, eccettuato l’allievo di cognome Bianchi, allora l’anno successivo occorrerà modificare i record, scorrendoli tutti e facendo eseguire un’istruzione che ha una struttura come la seguente (ovviamente con le parole specifiche del linguaggio utilizzato):
In questo modo, l’esecutore verificherà che il campo cognome della variabile record studente abbia un contenuto diverso dalla stringa “Bianchi” e, in tale caso, incrementerà di 1 il campo classe della variabile studente. Se si devono fare più operazioni con un record, si può semplificare l’accesso ai singoli campi, dichiarando una volta per tutte che si vuole operare con una particolare variabile di tipo record.
L’istruzione precedente potrebbe allora essere scritta in questo modo:
La specifica con...fai... (nei linguaggi di programmazione spesso indicata come «with...do...») fa sì che l’insieme delle istruzioni successive si riferisca ai campi del record inizialmente dichiarato.
In generale, ha senso definire un tipo di dato record solo se si debbono memorizzare più variabili di tipo record, come nell’esempio dell’elenco degli studenti di una scuola. In tali casi i record vengono registrati su una memoria permanente quale quella di un hard disk, costruendo così un file di dati apposito, distinto da quello che contiene il programma. Tra questi due file si deve stabilire una sorta di comunicazione in modo tale che il file di programma lavori sui dati immagazzinati nel file di record. In ogni linguaggio di programmazione esistono opportune istruzioni che permettono di effettuare operazioni di comunicazione con un file esterno. In particolare, un file di dati (organizzati sotto forma di record) può costituire per il programma sia un particolare input (se occorre leggere dei dati dal file) sia un particolare output (se occorre scrivere o modificare i dati sul file). Le istruzioni che il linguaggio dovrà contenere per gestire un file esterno di record dovranno, quindi, permettere di fare almeno le seguenti operazioni:
• aprire un file: sapere cioè qual è il particolare file con cui stabilire una comunicazione (spesso questa istruzione è indicata con open);
• leggere da un file: leggere dati che, anziché essere immessi da tastiera, sono già scritti nell’apposito file (istruzioni indicate spesso con read o get);
• scrivere su un file: scrivere dati sull’apposito file, anziché su altri possibili output quali il monitor o la stampante (istruzioni indicate spesso con write o put);
• chiudere un file: registrare le variazioni effettuate sul file e chiudere la comunicazione tra il file di programma e il file “esterno” (istruzione spesso indicata con close).