L'intero track di Julia ti richiederà di trattare la soluzione come una piccola libreria: dovrai definire funzioni, tipi e così via, che verranno poi eseguiti rispetto a una suite di test. Per questo motivo, introdurremo le funzioni con nome come primissimo concetto.
Julia è un linguaggio di programmazione dinamico e fortemente tipizzato. Lo stile di programmazione è principalmente funzionale, anche se con più flessibilità rispetto a linguaggi come Haskell.
Non è necessario dichiarare una variabile in anticipo. Basta assegnare un valore a un nome adatto:
julia> myvar = 42 # an integer
42
julia> name = "Maria" # strings are surrounded by double-quotes ""
"Maria"
Se un valore deve essere disponibile in tutto il programma, ma non si prevede che cambi, è meglio contrassegnarlo come costante.
Anteporre la parola chiave const a un'assegnazione permette al compilatore di generare codice più efficiente di quanto sia possibile per una variabile.
Le costanti aiutano anche a proteggerti dagli errori di programmazione.
Se provi a modificare per sbaglio il valore const, riceverai un avviso:
julia> const answer = 42
42
julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24
Nota che una const può essere dichiarata solo all'esterno di qualsiasi funzione.
In genere si troverà vicino all'inizio del file *.jl, prima delle definizioni delle funzioni.
Sono gli stessi di molti altri linguaggi:
2 + 3 # 5 (addition)
2 - 3 # -1 (subtraction)
2 * 3 # 6 (multiplication)
8 / 2 # 4.0 (division with floating-point result)
8 % 3 # 2 (remainder)
Ci sono due modi comuni per definire una funzione con nome in Julia:
Usare la parola chiave function
function muladd(x, y, z)
x * y + z
end
L'indentazione di 4 spazi è convenzionale per la leggibilità, ma il compilatore la ignora.
La parola chiave end è essenziale.
Nota che avremmo potuto scrivere return x * y + z.
Tuttavia, le funzioni di Julia restituiscono sempre l'ultima espressione valutata, quindi la parola chiave return è facoltativa.
Molti programmatori preferiscono includerla per rendere più esplicite le proprie intenzioni.
Usare la «forma di assegnazione»
muladd(x, y, z) = x * y + z
Si usa più comunemente per creare funzioni concise a espressione singola.
La parola chiave return non viene mai usata nella forma di assegnazione.
Le due forme sono equivalenti e si usano esattamente allo stesso modo: scegli quella che ti risulta più leggibile.
Per chiamare una funzione si specifica il suo nome e si passano gli argomenti per ciascuno dei parametri della funzione:
# invoking a function
muladd(10, 5, 1)
# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)
Come molti linguaggi, Julia richiede che i nomi (di variabili, funzioni e molte altre cose) inizino con una lettera, seguita da qualsiasi combinazione di lettere, cifre e trattini bassi.
Per convenzione, i nomi di variabili, costanti e funzioni sono in minuscolo, con i trattini bassi ridotti a un minimo ragionevole.
In questo esercizio scriverai del codice per aiutarti a cucinare una lasagna eccezionale dal tuo libro di cucina preferito.
Hai quattro compiti, tutti legati al tempo impiegato per cucinare la lasagna.
Definisci la costante expected_bake_time che restituisce quanti minuti deve cuocere la lasagna in forno.
Secondo il libro di cucina, la lasagna deve stare in forno per un totale di 60 minuti.
julia> expected_bake_time
60
Definisci la funzione preparation_time che prende come argomento il numero di strati che hai aggiunto alla lasagna e restituisce quanti minuti hai impiegato a prepararla, considerando che ogni strato richiede 2 minuti di preparazione.
julia> preparation_time(4)
8
Definisci la funzione remaining_time che prende come parametro i minuti effettivi che la lasagna è già stata in forno e restituisce quanti minuti deve ancora restare la lasagna in forno.
julia> remaining_time(50)
10
Definisci la funzione total_working_time che prende due argomenti: il primo è il numero di strati che hai aggiunto alla lasagna, il secondo è il numero di minuti che la lasagna è stata in forno.
La funzione deve restituire quanti minuti in totale hai lavorato per cucinare la lasagna, cioè la somma del tempo di preparazione in minuti e del tempo in minuti che la lasagna ha passato in forno fino a quel momento.
julia> total_working_time(3, 20)
26
Iscriviti a Exercism per imparare e padroneggiare Julia con 35 concetti128 esercizi e il mentoring di persone reali, tutto gratis.