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.
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"
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
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)
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.
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
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
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
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
Regístrate en Exercism para aprender y dominar Ruby con 21 conceptos121 ejercicios y mentoría humana real, todo gratis.