Lasaña

Lasaña

Ejercicio de aprendizaje

Introducción

Este ejercicio te enseñará las piezas fundamentales de Ruby. Abarca muchos temas, pero no te preocupes si te resulta abrumador: entraremos en todo con mucho más detalle a medida que avancemos por el track.

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

Variables y constantes

Solemos usar 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 redefinir 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, por convención, se escriben enteras en mayúsculas con las palabras separadas por guiones bajos. Por ejemplo:

MY_FIRST_CONSTANT = 10

# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"

Clases

Ruby se organiza en clases. Las clases se definen con la palabra clave class seguida del nombre de la clase. Los objetos se suelen crear 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, de forma similar 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 sin ningún argumento.

Los métodos devuelven implícitamente el resultado de la última instrucción evaluada, o pueden devolver explícitamente un objeto 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 código para ayudarte a cocinar una lasaña magnífica del libro de cocina que más te gusta.

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 toma como parámetro los minutos reales que la lasaña ha estado en el horno y devuelve cuántos minutos tiene que seguir permaneciendo la lasaña en el horno, basándose en el tiempo esperado en el horno 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 toma como parámetro el número de capas que añadiste a la lasaña y devuelve cuántos minutos has tardado en preparar la lasaña, suponiendo que preparar cada capa te lleva 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 toma dos parámetros con nombre: el parámetro number_of_layers es el número de capas que añadiste a la lasaña, y el parámetro actual_minutes_in_oven es el número de minutos que la lasaña ha estado en el horno. La función debe devolver cuántos minutos en total has dedicado a 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 pasado 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 pestaña nueva
Ruby Exercism

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