Lasagna

Lasagna

Esercizio di apprendimento

Introduzione

Le basi

Variabili

Elixir è un linguaggio a tipizzazione dinamica: il tipo di una variabile viene controllato solo a runtime. Con l'operatore di corrispondenza =, possiamo associare un valore di qualsiasi tipo a un nome di variabile:

# Bound an integer value of 1
count = 1
# You may re-bind variables
count = 2

# You may re-bind any type to a variable
count = false

# Strings can be created by enclosing characters within double quotes
message = "Success!"

Moduli

Elixir è un linguaggio di programmazione funzionale e richiede che tutte le funzioni con nome siano definite all'interno di un modulo. La parola chiave defmodule serve a definire un modulo. Tutti i moduli sono disponibili per tutti gli altri moduli a runtime e non richiedono un modificatore di accesso per essere visibili alle altre parti del programma. Un modulo è analogo a una classe in altri linguaggi di programmazione.

defmodule Calculator do
  # ...
end

Funzioni con nome

Le funzioni con nome devono essere definite all'interno di un modulo. La parola chiave def serve a definire una funzione con nome pubblica.

Ogni funzione può avere zero o più argomenti. Il valore dell'ultima espressione di una funzione viene sempre restituito in modo implicito.

defmodule Calculator do
  def add(x, y) do
    x + y
  end
end

Chiamare una funzione significa specificarne il modulo e il nome e passare gli argomenti corrispondenti.

sum = Calculator.add(1, 2)
# => 3

La parola chiave defp può essere usata al posto di def per definire una funzione privata. Le funzioni private possono essere usate solo all'interno dello stesso modulo che le ha definite.

Quando si chiama una funzione all'interno dello stesso modulo in cui è definita, si può omettere il nome del modulo.

Puoi anche scrivere funzioni brevi con una sintassi su una sola riga (nota la virgola , e i due punti : attorno alla parola chiave do).

defmodule Calculator do
  def subtract(x, y) do
    private_subtract(x, y)
  end

  defp private_subtract(x, y), do: x - y
end

difference = Calculator.subtract(7, 2)
# => 5

difference = Calculator.private_subtract(7, 2)
# => ** (UndefinedFunctionError) function Calculator.private_subtract/2 is undefined or private
#       Calculator.private_subtract(7, 2)

L'arità delle funzioni

È comune riferirsi alle funzioni indicandone l'arità. L'arità di una funzione è il numero di argomenti che accetta.

# add/3 because this function has three arguments, thus an arity of 3
def add(x, y, z) do
  x + y + z
end

Convenzioni di denominazione

I nomi dei moduli dovrebbero usare PascalCase. Un nome di modulo deve iniziare con una lettera maiuscola A-Z e può contenere lettere a-zA-Z, numeri 0-9 e underscore _.

I nomi delle variabili e delle funzioni dovrebbero usare snake_case. Un nome di variabile o di funzione deve iniziare con una lettera minuscola a-z o un underscore _, può contenere lettere a-zA-Z, numeri 0-9 e underscore _, e può terminare con un punto interrogativo ? o un punto esclamativo !.

La libreria standard

Elixir ha una libreria standard molto ricca e ben documentata. La documentazione è disponibile online su hexdocs.pm/elixir. Salva questo link da qualche parte: ti servirà spesso!

La maggior parte dei tipi di dati predefiniti ha un modulo corrispondente che offre funzioni per lavorare con quel tipo di dati: ad esempio, c'è il modulo Integer per gli interi, il modulo String per le stringhe, il modulo List per gli array e così via.

Un modulo degno di nota è il modulo Kernel. Fornisce le capacità di base su cui è costruito il resto della libreria standard, come gli operatori aritmetici, le macro di controllo del flusso e molto altro. Le funzioni del modulo Kernel vengono importate automaticamente, quindi puoi usarle senza il prefisso Kernel..

I commenti nel codice

I commenti possono essere usati per lasciare note ad altri sviluppatori che leggono il codice sorgente. I commenti su una sola riga in Elixir sono preceduti da #.

Istruzioni

In questo esercizio scriverai del codice per aiutarti a cucinare una lasagna eccezionale dal tuo libro di cucina preferito.

Hai cinque attività, tutte legate al tempo che serve per cucinare la lasagna.

1. Definisci il tempo in forno previsto in minuti

Definisci la funzione Lasagna.expected_minutes_in_oven/0, che non accetta alcun argomento e restituisce per quanti minuti la lasagna deve stare in forno. Secondo il libro di cucina, il tempo in forno previsto è di 40 minuti:

Lasagna.expected_minutes_in_oven()
# => 40

2. Calcola il tempo rimanente in forno in minuti

Definisci la funzione Lasagna.remaining_minutes_in_oven/1, che accetta come argomento i minuti effettivi che la lasagna ha già passato in forno e restituisce quanti minuti deve ancora restare in forno, in base al tempo in forno previsto dell'attività precedente.

Lasagna.remaining_minutes_in_oven(30)
# => 10

3. Calcola il tempo di preparazione in minuti

Definisci la funzione Lasagna.preparation_time_in_minutes/1, che accetta come argomento il numero di strati che hai aggiunto alla lasagna e restituisce quanti minuti hai impiegato per prepararla, supponendo che ogni strato richieda 2 minuti di preparazione.

Lasagna.preparation_time_in_minutes(2)
# => 4

4. Calcola il tempo di lavoro totale in minuti

Definisci la funzione Lasagna.total_time_in_minutes/2, che accetta due argomenti: il primo è il numero di strati che hai aggiunto alla lasagna, il secondo è il numero di minuti che la lasagna ha passato in forno. La funzione deve restituire il numero totale di minuti che hai impiegato a cucinare la lasagna, cioè la somma del tempo di preparazione in minuti e del tempo che la lasagna ha passato in forno fino a quel momento.

Lasagna.total_time_in_minutes(3, 20)
# => 26

5. Crea una notifica per indicare che la lasagna è pronta

Definisci la funzione Lasagna.alarm/0, che non accetta alcun argomento e restituisce un messaggio che indica che la lasagna è pronta da mangiare.

Lasagna.alarm()
# => "Ding!"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Elixir Exercism

Vuoi iniziare Lasagna?

Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.