Torna all'elenco delle lezioni Come scrivere un programma in REBOL

di Daniele Forsi versione 2.0 del 28 gennaio 2000

Indice

Con quale programma scrivere
Il primo programma (hello-world.r)
Come scrivere uno script
Esempio complicato
Usiamo l'interprete
Il secondo programma (scrivi.r)
Parole attinenti alla scrittura degli script

Con quale programma scrivere [Indice di questa lezione]

Per scrivere un programma in REBOL, che più precisamente viene chiamato script, è sufficiente un qualsiasi editor o programma di videoscrittura che permetta di salvare in formato testo puro, cioè senza stili o codici speciali; in più i caratteri di fine riga sono gestiti in modo da non dare problemi passando i programmi da un sistema operativo ad un altro. Questo permette di mantenere le proprie abitudini di scrittura ed iniziare subito a scrivere uno script per poi usarlo, immediatamente dopo, su qualsiasi altro computer con un interprete REBOL, in più permette di leggere il sorgente di qualsiasi script per capirne il funzionamento (questo è un vantaggio grandissimo per l'utente che si può rendere conto se il programma è dannoso, ma è uno svantaggio per il programmatore perché può svelare trucchi e procedimenti originali).
Il fatto che il significato delle parole dipenda dal contesto in cui si trovano, non rende molto utili quegli editor per programmatori che colorano le parole in modo diverso basandosi su criteri predefiniti: qui non ci sono parole chiave, ma parole definite dal nucleo del linguaggio che possono essere ridefinite dal programmatore con un significato e un tipo totalmente diversi, che non possono essere facilmente individuati da un programma di videoscrittura che non riproduca il funzionamento di gran parte dell'interprete REBOL.
Un automatismo utile è la ricerca delle coppie di parentesi quadre o graffe.
Le parole che possono essere distinte e quindi colorate in modo semplice sono quelle precedute o seguite da caratteri di punteggiatura con significati particolari, quelle inserite in commenti e stringhe, i numeri, le date, le ore e i caratteri di punteggiatura isolati, cioè in tutti i casi in cui è possibile stabilire la posizione sintattica di un valore, come negli esempi seguenti:
Sequenza di caratteri Tipo
'parola ; word!
:parola ; get-word!
parola: ; set-word!
a/b/c ; path!
; un commento ; nessuno dal punto e virgola a fine riga
http://www.rebol.com ; url!
luke@rebol.com ; email!
%dir/nomefile ; file!
una stringa ; string!
{stringa con "} ; string!
123 ; integer!
45.67 ; decimal!
1-1-2000 ; date!
21-Nov-1999/14:35:46+1:00 ; date!
1:23:45.67 ; time!
EUR$123 ; money!
+ ; op!
<html> ; tag!
Per quanto riguarda le parole che non sono vicine a nessun carattere speciale, non c'è nessun modo, salvo eseguire il programma, per saperne il valore.
Ad esempio, la parola now è predefinita per fornire in ogni momento la data e l'ora del sistema, cioè un valore di tipo date!, ma niente vieta che in un contesto particolare le sia assegnato un valore di tipo diverso, per cui la colorazione basata sul valore predefinito risulterebbe inconsistente.

Il primo programma (hello-world.r) [Indice di questa lezione]

Come tradizione, il primo programma che si scrive quando si impara un nuovo linguaggio mostra una breve frase sullo schermo, per cui non ci sottraiamo all'obbligo e copiamo le seguenti righe nel nostro programma di videoscrittura preferito e salviamo il file in formato solo testo con il nome Hello-World.r. L'estensione ".r" non è obbligatoria, ma può essere utile per distingure velocemente gli script REBOL dagli altri file e per associarli all'interprete per l'esecuzione; con Amiga è anche possibile usare i parametri dell'icona (Tool types) per eseguire gli script dal Workbench (quattro diverse icone sono fornite nell'archivio di REBOL).
REBOL [
    Title: "Il primo script in REBOL"
    Date: 21/11/1999
    File: %hello-world.r
    Author: "Daniele Forsi"
    Email: dforsi@montaperto.it
    Purpose: "Mostrare la struttura di un semplice script"
    Comment: "Realizzato per il corso"
]

Print "Hello world!"
; fine dello script
Per eseguire questo script su Amiga si può creare un'icona "Progetto" di nome "Hello-World.info" il cui programma associato sia REBOL (magari usando una di quelle fornite nel pacchetto di REBOL) oppure si può lanciare l'interprete e digitare:
do %hello-world.r
Con Windows è possibile associare l'estensione ".r" al programma REBOL in modo da eseguire lo script con un doppio click; questa l'associazione va fatta manualmente, una volta per tutte, ad esempio usando "Esplora Risorse", menu Modifica/Opzioni Cartella.

Come scrivere uno script [Indice di questa lezione]

Come abbiamo visto nel paragrafo precedente, uno script può iniziare con una intestazione che dà molte informazioni facoltative all'interprete REBOL e a chi legge il sorgente. Solo gli script che iniziano con una intestazione possono essere eseguiti usando la parola 'do, gli altri devono essere caricati tramite 'load.
Quello che segue è il risultato del comando print mold system/standard/script, che è consigliabile usare per verificare quali parole hanno un significato particolare nell'intestazione, perché future versioni dell'interprete potrebbero aggiungere altre parole a questo oggetto:
make object! [
    Title: "Untitled"    ; titolo dello script
    Date: none    ; la data dell'ultima modifica
    Name: none    ; nome di questo script
    Version: none    ; versione di questo script
    File: none    ; nome di questo file
    Home: none    ; pagina web relativa a questo script, oppure all'autore
    Author: none    ; nome dell'autore di questo script
    Owner: none    ; il proprietario di questo script
    Rights: none    ; informazioni di copyright
    Needs: none    ; minima versione di REBOL necessaria
    Tabs: none    ; numero di caratteri tra due tabulazioni
    Usage: none    ; esempi di utilizzo di questo script
    Purpose: none    ; qual è lo scopo di questo script
    Comment: none    ; annotazioni sull'uso di questo script
    History: none    ; la storia delle modifiche fatte
    Language: none    ; in quale lingua umana è redatto questo script
]
Altre parole in uso sono:
    email: none    ; l'indirizzo dell'autore
    charset: none    ; il set di caratteri usato per redigere questo script
Ogni parola è facoltativa e dal momento che l'intestazione è eseguita prima dello script vero e proprio, come se fosse un qualsiasi blocco di parole, non deve contenere errori, altrimenti l'esecuzione si interrompe.
A seconda dei casi, ad una parola possono essere assegnati in alternativa valori di tipo diverso, ad esempio valori singoli oppure blocchi di valori, e questi valori possono anche essere calcolati dinamicamente oppure convertiti da un formato umano ad uno più facilmente trattabile dal programma.
L'intestazione può contenere qualsiasi tipo di dati o di codice che però non sono accessibili al resto dello script, quindi è meglio limitarsi alle parole definite in system/standard/script.

La versione più corta possibile dell'intestazione è:
REBOL []
Un uso normale dell'intestazione comprende
    * il titolo (Title)
    * il nome dell'autore (Author) con il suo indirizzo di posta elettronica (Email)
    * la data di creazione (Date) e la versione dello script (Version)
    * una breve spiegazione dello scopo dello script (Purpose).

Esempio complicato [Indice di questa lezione]

Questo esempio mostra tecniche che di solito non sono usate; è inserito qui per aiutare a capire meglio il funzionamento dell'intestazione.

Se eseguiamo il seguente script, salvato con il nome intestazione.r
REBOL [
    File: %intestazione.r
    Author: "Daniele Forsi"
    print "Siamo nell'intestazione!"
    if confirm/with "Vuoi terminare l'esecuzione dell'intestazione? (s/N) " [ [ "S" "si" "sì" ] [ "n" ] ] [ break ] print "Abbiamo continuato fino a qui"
    x: 42        ; questa assegnazione non è visibile all'esterno di questo blocco
    Date: Now    ; questo script è stato fatto "ora"
    print [ "x vale" x ]
    print [ "Questo script è stato creato da" Author ]
]
print "Ora siamo all'interno dello script"
print [ "Questo script è stato creato da" Author ] ; ERRORE: Author non ha alcun valore
otteniamo questo risultato:
>> do %intestazione.r
Siamo nell'intestazione!
Vuoi terminare l'esecuzione dell'intestazione? (s/N) N
Abbiamo continuato fino a qui
x vale 42
Questo script è stato creato da Daniele Forsi
Script: "Untitled" (6-Jan-2000/22:30:30-1:00)
Ora siamo all'interno dello script
** Script Error: Author has no value.
** Where: Author
>>

Usiamo l'interprete [Indice di questa lezione]

È possibile scrivere istruzioni direttamente nell'interprete REBOL, senza prima scriverle in un file. Questa possibilità è molto utile perché permette di consultare la documentazione di (quasi) tutte le parole predefinite, usando la parola Help, e permette di fare esperimenti.
Digitando la parola Help da sola, viene mostrato un messaggio che ne spiega lo scopo e suggerisce di documentarsi sull'uso di altre parole importanti. Se invece dopo Help si scrive un'altra parola se ne possono vedere le caratteristiche, cioè ci viene detto se la parola non ha alcun valore, oppure ne viene mostrato il valore, se la parola contiene dati, oppure ne vengono mostrati i parametri o gli argomenti, con le eventuali spiegazioni, se la parola contiene una funzione.

Proviamo qualcosa di più complicato; limitandoci alla parola print, scriviamo direttamente nell'interprete, premendo il tasto "invio" alla fine di ogni riga:
print {Questo sulla prima riga.
Questo sulla seconda.
Questo sulla terza}
Si vedrà il seguente risultato:
>> print {Questo sulla prima riga.
Questo sulla seconda.
Questo sulla terza.}
Questo sulla prima riga.
Questo sulla seconda.
Questo sulla terza.
>>
Ora vediamo un'altra variante di print:
print [ "Oggi" "è il" Now ]
Riassumendo, la parola Print accetta un solo argomento che può essere di tre tipi:
    * stringa delimitata da doppie virgolette o da parentesi graffe
    * blocco di stringhe e/o parole separate da spazi
    * una parola contenente una stringa o un blocco

Il secondo programma (scrivi.r) [Indice di questa lezione]

Un banalissimo programma di videoscrittura può essere scritto con pochissime righe di codice.
REBOL [ ]

print {Inizia a scrivere. Scrivi "." da solo per terminare.}

blocco: []
forever [
    riga: ask "Scrivi> "
    if riga = "." [ areak ]
    append blocco riga
]

print blocco
Questo script non è molto utile perché ogni riga di testo può essere corretta solo fino a quando non si preme il tasto "Invio", tuttavia la sua potenza è enorme perché, senza nessuno sforzo il testo memorizzato nella parola Blocco può essere
    * salvato su disco: write %testo.txt blocco
    * trasferito tramite ftp : write ftp://user:password@my.site.com blocco
    * trasferito tramite qualsiasi altro protocollo disponibile (per il quale abbia senso trasferire file di testo), ad esempio http
    * modificato con gli strumenti messi a disposizone da REBOL, ad esempio messo in ordine alfabetico riga per riga: blocco: sort blocco
In modo analogo, un file di testo scritto da altri può essere letto facilmente e modificato. Se pensate che le pagine html sono file di testo, capite immediatamente le potenzialità del linguaggio.

Parole attinenti alla scrittura degli script [Indice di questa lezione]

do argomento Valuta l'argomento che può essere un file locale o remoto, oppure un valore
load argomento Interpreta un file o una stringa e colloca nel contesto globale i valori trovati
save file argomento Salva nel file specificato il valore dell'argomento


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