Track
/
Ruby
Ruby
/
Esercizi
/
Lasagna
Lasagna

Lasagna

Esercizio di apprendimento

Introduzione

Questo esercizio ti insegnerà i mattoni fondamentali di Ruby. Copre molti argomenti, ma non preoccuparti se ti sembra troppo: approfondiremo ogni cosa molto più nel dettaglio man mano che proseguiamo lungo il percorso.

Una delle cose fondamentali da capire su Ruby è che è un linguaggio orientato agli oggetti e che in Ruby tutto è un oggetto. Numeri, stringhe, array: sono tutti oggetti.

Variabili e costanti

Di solito usiamo gli oggetti assegnando loro dei nomi, tramite variabili o costanti.

Le variabili si scrivono sempre in snake case. Una variabile può fare riferimento a oggetti diversi nel corso della sua esistenza. Ad esempio, my_first_variable può essere definita e ridefinita molte volte usando l'operatore =:

my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new

Le costanti, invece, sono pensate per essere assegnate una sola volta. Devono iniziare con la lettera maiuscola e di norma si scrivono tutte in maiuscolo, con le parole separate da underscore. Ad esempio:

MY_FIRST_CONSTANT = 10

# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"

Classi

Ruby è organizzato in classi. Le classi si definiscono usando la parola chiave class seguita dal nome della classe. Gli oggetti vengono generalmente creati istanziando le classi con il metodo .new. Ad esempio:

# Define the class
class Calculator
  #...
end

# Create an instance of it and assign it to a variable
my_first_calc = Calculator.new

Metodi

Le unità di funzionalità vengono incapsulate nei metodi, simili alle funzioni di altri linguaggi.

Un metodo può essere definito con argomenti posizionali, con argomenti keyword (che si definiscono e si chiamano usando la sintassi :) oppure senza alcun argomento.

I metodi restituiscono implicitamente il risultato dell'ultima istruzione valutata, oppure possono restituire esplicitamente un oggetto tramite la parola chiave return.

class Calculator

  # Positional arguments
  def add(num1, num2)
    return num1 + num2 # Explicit return
  end

  # Keyword arguments
  def multiply(num1:, num2:)
    num1 * num2 # Implicit return
  end
end

I metodi si chiamano usando la sintassi .:

calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)

Istruzioni

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

Ci sono quattro attività, tutte legate al tempo impiegato per cucinare la lasagna.

1. Definisci il tempo di cottura previsto in minuti

Definisci la costante Lasagna::EXPECTED_MINUTES_IN_OVEN che restituisce quanti minuti la lasagna deve stare in forno. Secondo il libro di cucina, il tempo di cottura previsto in minuti è 40:

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. Calcola il tempo di cottura rimanente in minuti

Definisci il metodo Lasagna#remaining_minutes_in_oven che prende come parametro i minuti effettivi che la lasagna ha già passato in forno e restituisce quanti minuti la lasagna deve ancora restare in forno, in base al tempo di cottura previsto in minuti dell'attività precedente.

lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10

3. Calcola il tempo di preparazione in minuti

Definisci il metodo Lasagna#preparation_time_in_minutes che prende come parametro il numero di strati che hai aggiunto alla lasagna e restituisce quanti minuti hai impiegato a prepararla, supponendo che ogni strato richieda 2 minuti di preparazione.

lasagna = Lasagna.new
lasagna.preparation_time_in_minutes(2)
# => 4

4. Calcola il tempo di lavoro totale in minuti

Definisci il metodo Lasagna#total_time_in_minutes che prende due parametri con nome: il parametro number_of_layers è il numero di strati che hai aggiunto alla lasagna, mentre il parametro actual_minutes_in_oven è il numero di minuti che la lasagna ha passato 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.

lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Ruby Exercism

Vuoi iniziare Lasagna?

Iscriviti a Exercism per imparare e padroneggiare Ruby con 21 concetti121 esercizi e il mentoring di persone reali, tutto gratis.