Lasagna

Lasagna

Esercizio di apprendimento

Introduzione

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.

Variabili e assegnazione

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"

Costanti

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.

Operatori aritmetici

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)

Funzioni

Ci sono due modi comuni per definire una funzione con nome in Julia:

  1. 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.

  2. 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)

Convenzioni di denominazione

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.

Istruzioni

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.

1. Memorizza il tempo di cottura previsto in una costante

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

2. Calcola il tempo di preparazione in minuti

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

3. Calcola il tempo di cottura rimanente in minuti

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

4. Calcola il tempo di lavoro totale in minuti

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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Julia Exercism

Vuoi iniziare Lasagna?

Iscriviti a Exercism per imparare e padroneggiare Julia con 35 concetti128 esercizi e il mentoring di persone reali, tutto gratis.