Un primo programma
Un file e una funzione main: basta questo per iniziare.
Per scrivere il tuo primo programma Heroes basta un file con una funzione main. Non servono file di progetto né librerie da importare per stampare un risultato.
Il programma, tutto quanto
function main()
print((2 + 3) * 4)
$ heroes run examples/gallery/00-first.hero
20
function main() definisce il punto di partenza del programma. Non riceve argomenti e non restituisce un valore, quindi dopo le parentesi non compare un tipo di ritorno. Una funzione che restituisce un numero intero lo indica con -> i64. print è una funzione predefinita: stampa gli argomenti uno dopo l’altro, poi va a capo.
Che cosa non c’è, in quel file
Il file contiene solo il codice necessario al programma. Queste regole riducono le informazioni da cercare altrove:
- Nessuna riga di import o include.
print,lene gli altri nomi predefiniti ci sono e basta. - Non serve una classe per contenere le funzioni né un namespace, cioè un blocco che raggruppa i nomi. Li raggruppa già il file.
- Niente punto e virgola e niente parentesi graffe. Le istruzioni sono separate dagli a capo. I rientri indicano quali righe appartengono a un blocco.
- Nessun file di configurazione del progetto e nessuno script per compilarlo. Al compilatore basta il nome del file sorgente.
- Nessuna dichiarazione anticipata. L’ordine delle dichiarazioni non conta mai, quindi due funzioni possono chiamarsi a vicenda senza che nessuna delle due vada annunciata prima.
L’indentazione è la struttura
Ogni blocco richiede un rientro di quattro spazi rispetto alla riga che lo apre. La regola vale a ogni livello. Un rientro diverso produce questo errore:
$ heroes check hello.hero
error[indentation_not_multiple_of_4]: indentation must be exactly 4 spaces per level; found 2
at hello.hero:2:1
|
2 | print("hi")
| ^^
Anche i tab producono un errore, con un messaggio specifico. Un rientro uniforme rende più facile confrontare due versioni dello stesso file. heroes fmt stampa il codice nel formato standard del linguaggio. I file già formattati restano identici, byte per byte.
La regola è più vecchia di quanto sembri. Non l’ha inventata Python: l’ha presa da ABC, un linguaggio didattico nato nello stesso laboratorio, e lo dice Guido van Rossum in persona nella documentazione di Python, dove chiama ABC l’origine di molte caratteristiche di Python, compreso l’uso dell’indentazione per raggruppare le istruzioni. Heroes prende la stessa idea e la rende più rigida, perché una regola con una sola grafia è una regola che un modello non può sbagliare di poco: esattamente quattro spazi, mai un tab.
La documentazione sta nei commenti
La documentazione si scrive nei commenti. # inizia un commento che termina a fine riga e può contenere Markdown, un formato testuale per titoli, elenchi e altri elementi. ## apre una sezione:
## Points
#
# Records, their constructors, and UFCS. Every field is named at the call
# site, always — `Point(3, 4)` does not exist.
Un commento subito sopra una dichiarazione la documenta, senza altri simboli:
# A position on the integer grid.
record Point
x: i64
y: i64
Un file è un modulo
Quando ti servono più file, puoi organizzarli in moduli. use rende disponibile un altro modulo:
use eval
Questa riga associa il nome eval al file eval.hero nella stessa cartella. Per usare una sua funzione, aggiungi quel nome davanti: eval.calculate(text, env). Ogni modulo richiede una riga use; non esiste un import con l’asterisco per importare tutti i nomi insieme. Puoi rinominare un modulo con as, come mostra il capitolo 12. Il prefisso e la riga use indicano sempre quale file consultare.
I verbi
Il comando heroes comprende questi sottocomandi, ciascuno con una funzione precisa:
$ heroes check program.hero # nomi e tipi, senza produrre un binario
$ heroes run program.hero # compila ed esegue
$ heroes build program.hero # compila e basta
$ heroes test program.hero # esegue i test del file
$ heroes fmt program.hero # stampa la forma canonica
I test fanno parte del linguaggio. Il file dei punti mostrato sopra ne contiene due:
$ heroes test examples/gallery/01-points.hero
ok "the 3-4-5 triangle"
ok "a rectangle keeps its size when it moves"
2 tests, all passed
Poi: Errori, dove impari a raggruppare i dati e a nominare gli argomenti delle chiamate. Torna all’elenco dei capitoli.
Esegui un programma tuo: bastano quattro comandi. Oppure prendi tutto il linguaggio in un file solo, e tutti i programmi già scritti.