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