Lasaña

Lasaña

Ejercicio de aprendizaje

Introducción

Este ejercicio te enseñará los componentes fundamentales de Ruby. Cubre mucho terreno, pero no te preocupes si te parece abrumador: profundizaremos en todo con mucho más detalle a medida que avancemos por el track.

Una de las cosas clave que debes entender sobre Ruby es que es un lenguaje orientado a objetos y que todo en Ruby es un objeto. Los números, los strings y los arrays: todos son objetos.

Variables y constantes

Normalmente usamos los objetos asignándoles nombres, ya sea con variables o con constantes.

Las variables siempre se escriben en snake case. Una variable puede hacer referencia a distintos objetos a lo largo de su vida. Por ejemplo, my_first_variable se puede definir y volver a definir muchas veces con el operador =:

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

Las constantes, en cambio, están pensadas para asignarse una sola vez. Deben empezar con una letra mayúscula y normalmente se escriben con todas sus letras en mayúscula y las palabras separadas por guiones bajos. Por ejemplo:

MY_FIRST_CONSTANT = 10

# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"

Clases

Ruby está organizado en clases. Las clases se definen con la palabra clave class seguida del nombre de la clase. Los objetos generalmente se crean instanciando clases con el método .new. Por ejemplo:

# Define the class
class Calculator
  #...
end

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

Métodos

Las unidades de funcionalidad se encapsulan en métodos, parecidos a las funciones de otros lenguajes.

Un método se puede definir con argumentos posicionales, argumentos de palabra clave (que se definen y se llaman con la sintaxis :) o no tener ningún argumento.

Los métodos o bien devuelven implícitamente el resultado de la última sentencia evaluada, o bien pueden devolver un objeto explícitamente con la palabra clave 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

Los métodos se llaman con la sintaxis .:

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

Instrucciones

En este ejercicio vas a escribir algo de código para ayudarte a cocinar una lasaña espectacular de tu libro de cocina favorito.

Tienes cuatro tareas, todas relacionadas con el tiempo que se tarda en cocinar la lasaña.

1. Define el tiempo esperado en el horno, en minutos

Define la constante Lasagna::EXPECTED_MINUTES_IN_OVEN que devuelve cuántos minutos debe estar la lasaña en el horno. Según el libro de cocina, el tiempo esperado en el horno es de 40 minutos:

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

2. Calcula el tiempo restante en el horno, en minutos

Define el método Lasagna#remaining_minutes_in_oven que recibe como parámetro los minutos reales que la lasaña ha estado en el horno y devuelve cuántos minutos le quedan por estar en el horno, según el tiempo esperado en minutos de la tarea anterior.

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

3. Calcula el tiempo de preparación, en minutos

Define el método Lasagna#preparation_time_in_minutes que recibe como parámetro la cantidad de capas que le agregaste a la lasaña y devuelve cuántos minutos tardaste en prepararla, suponiendo que preparar cada capa te toma 2 minutos.

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

4. Calcula el tiempo total de trabajo, en minutos

Define el método Lasagna#total_time_in_minutes que recibe dos parámetros con nombre: el parámetro number_of_layers es la cantidad de capas que le agregaste a la lasaña, y el parámetro actual_minutes_in_oven es la cantidad de minutos que la lasaña ha estado en el horno. La función debe devolver cuántos minutos en total has trabajado en cocinar la lasaña, que es la suma del tiempo de preparación en minutos y el tiempo en minutos que la lasaña ha estado en el horno en ese momento.

lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Ruby Exercism

¿Todo listo para empezar Lasaña?

Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.