Torna all'elenco delle lezioni I tipi di dati

di Daniele Forsi versione 0.2 del 30 gennaio 2000

Indice

Cosa è un "tipo"
Esempio
I tipi di REBOL
La conversione
Parole attinenti ai tipi di dati

Cosa è un "tipo" [Indice di questa lezione]

Ogni parola definita ha associato un valore e ogni valore ha associato uno specifico tipo di dati. Per conoscere il tipo di dati si usa la parola type? con argomento la parola del cui valore si vuol conoscere il tipo.
Se una parola non è associata ad un valore, non si può usare type? perché causerebbe un errore e la funzione value? dà il valore false.

Esempio [Indice di questa lezione]

Verificare l'esistenza di un dato indispensabile, se si teme che la parola che lo deve contenere non sia nemmeno definita.
either value? system/user/email [
    print [ "Il tuo indirizzo email è" system/user/email ]
] [
    print [ "Non è possibile inviare alcuna email perché manca il tuo indirizzo" ]
]

I tipi di REBOL [Indice di questa lezione]

Nella tabella seguente c'è l'elenco alfabetico delle parole che rappresentano i tipi di dato (parole di tipo datatype!) definiti nella versione 2.2 di REBOL.
Nella colonna "Tipo" sono elencate le parole che identificano tutti i tipi di dati di REBOL: sono parole che per convenzione terminano con un punto esclamativo. Nella colonna "Controllo" sono riportate tutte le parole che verificano il tipo dei valori: parole che per convenzione terminano con un punto interrogativo.
Queste due colonne sono molto simili, ma sono disitnte per enfatizzare il fatto che le parole che controllano i tipi di dati sono parole definite autonomamente dai tipi di dato che controllano e non il risultato dell'applicazione di un operatore.
È importante capire che il punto esclamativo e il punto interrogativo non sono simboli che REBOL interpreta autonomamente: sono convenzioni ortografiche che servono solo perché il programmatore capisca immediatamente il significato delle varie parole. Per facilitare la lettura dei programmi è utile mantenere la convenzione per cui il punto esclamativo è usato solo nelle parole che rappresentatno tipi di dati e il punto interrogativo è usato in tutte le parole (funzioni) che danno un risultato di tipo booleano (yes/no, true/false oppure on/off).
Tipo Controllo Descrizione
any-block! any-block? Uno pseudo-tipo che identifica tutti i tipi di blocco
any-function! any-function? Uno pseudo-tipo che identifica tutti i tipi di funzione
any-string! any-string? Uno pseudo-tipo che identifica tutti i tipi di stringa
any-type! any-type? Uno pseudo-tipo che identifica tutti i tipi
any-word! any-word? Uno pseudo-tipo che identifica tutti i tipi di parole
binary! binary? Una serie di dati in formato grezzo (racchiusi tra parentesi graffe precedute da "#")
bitset! bitset? Un insieme di valori, ciascuno rappresentato da un singolo bit dell'insieme
block! block? Un blocco di valori omogenei o eterogenei
char! char? Un singolo carattere
datatype! datatype? Un tipo di dati di questo elenco
date! date? Una data (l'ora è facoltativa)
decimal! decimal? Un numero con il punto o la virgola decimale
email! email? Un indirizzo di posta elettronica
error! error? Un oggetto che descrive un errore
file! file? Il nome di un file o di una directory (è preceduto dal carattere "%")
function! function? Una funzione
get-word! get-word? (è preceduto dal carattere ":")
hash! hash? Un blocco di tipo hash!
integer! integer? Un numero intero
issue! issue? Un numero di serie o di telefono (è preceduto dal carattere "#")
list! list? Un blocco di tipo list!
lit-path! lit-path? (è preceduto dal carattere "'")
lit-word! lit-word? (è preceduto dal carattere "'")
logic! logic? Un valore come true, false, on, off, yes, no
money! money? Un valore numerico che rappresenta una somma di denaro
native! native? Una funzione compresa nella parte compilata del linguaggio
none! none? Il valore "nessuno" che è usato come "segnaposto" quando non si vuol specificare alcun valore
number! number? Un valore di tipo decimal! o integer!
object! object? Un oggetto (un insieme di valori con un proprio contesto)
op! op? Un operatore logico o matematico
paren! paren? Un valore racchiuso tra parentesi tonde
path! path? Un valore assegnato ad u (non rappresenta il percorso di un file, anche se ha lo stesso aspetto)
port! port? Un valore che rappresenta un canale di comunicazione
refinement! refinement? Un parametro per una funzione
series! series? Identifica i tipi series money date object port time tuple any-function
set-path! set-path? (è seguito dal carattere ":")
set-word! set-word! (è seguito dal carattere ":")
string! string? Una serie di caratteri (è racchiusa tra virgolette o parentesi graffe)
symbol! (inesistente) .
tag! tag? (è racchiuso tra parentesi angolate, cioè minore e maggiore)
time! time? Un valore che rappresenta un orario o un lasso di tempo
tuple! tuple? Un gruppo di 2, 3 o 4 numeri separati da un punto
(inesistente) unset? Un valore il cui tipo è unset!
url! url? Un indirizzo Internet (Uniform Resource Locator)
word! word? Una parola
Note:
Non esiste una parola per verificare il tipo symbol!
Non esiste una parola che identifica il tipo unset!, nonostante tale tipo esista, come si può dimostrare scrivendo nella console:
>> type?
== unset!

La conversione [Indice di questa lezione]

Per convertire un valore da un tipo ad un altro si usa la parola 'to fornendo come primo parametro una parola che rappresenta un tipo di dati oppure un "esempio" sotto forma di un valore simile a quello che si vuole ottenere, e come secondo parametro il valore che si vuole convertire (o la parola il cui valore si vuole convertire). Se la conversione non è possibile viene generato un errore.

Parole attinenti ai tipi di dati [Indice di questa lezione]

to tipo argomento Tenta di convertire l'argomento in un valore del tipo specificato
type? argomento Ottiene il tipo di dati del valore dell'argomento
value? argomento Ritorna il valore true se la parola argomento ha un qualsiasi valore; ritorna il valore false se la parola non è definita nel contesto attuale


Per commenti su questa pagina o se vuoi collaborare scrivi a Daniele Forsi