Rutas
/
Crystal
Crystal
/
Ejercicios
/
La increíble lasaña de Ary
La increíble lasaña de Ary

La increíble lasaña de Ary

Ejercicio de aprendizaje

Introducción

Primeros pasos

Variables

Para declarar una variable, usa el operador de asignación =. En Crystal, las variables deben usar el formato snake_case.

number = 1
puts number # => 1

number = 2
puts number # => 2

Constantes

Las constantes se declaran con el mismo operador de asignación =, pero usan todas las letras en mayúsculas, lo que se conoce como SCREAMING_SNAKE_CASE.

NUMBER = 1
puts NUMBER # => 1

Asignar un valor a una constante ya definida provoca un error en tiempo de compilación.

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

Tipos

Crystal es un lenguaje compilado, lo que significa que a cada variable o argumento de método se le asigna un tipo en tiempo de compilación. El compilador es capaz de inferir el tipo de una variable o de un argumento de método. Sin embargo, en algunos casos es necesario especificar el tipo. Los casos en los que hay que indicar un tipo se explicarán en conceptos posteriores.

Métodos

Los métodos son una forma de agrupar un conjunto de instrucciones que se pueden reutilizar. En Crystal, los métodos se definen a menudo dentro de una clase, un módulo o una estructura. Sin embargo, los métodos también se pueden definir fuera de una clase, un módulo o una estructura. Los métodos se declaran con la palabra clave def, seguida del nombre del método. En Crystal, los métodos deben escribirse en snake_case. Puedes omitir los paréntesis cuando un método no tiene argumentos. Para marcar el final de un método, debes usar la palabra clave end.

def hello
  puts "Hello World!"
end

Usar un método que no existe para el tipo de una variable o de un argumento de método provoca un error en tiempo de compilación.

number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String

Argumentos

Los métodos pueden tener argumentos. Los argumentos son datos que se pasan a un método. Para poder pasar argumentos a un método, debes especificar el nombre del argumento. En Crystal, los argumentos deben escribirse en snake_case. Un método puede tener varios argumentos, pero estos deben separarse con una coma.

def hello(name)
  puts "Hello #{name}!"
end

Los métodos también pueden tener varios argumentos. En ese caso, los argumentos deben separarse con una coma.

def hello(name, language)
  puts "Hello #{name}! You are learning #{language}."
end

Llamar a métodos

Cuando llamas a un método que pertenece a una clase, un módulo o una estructura, debes usar el operador punto (.). El formato debe ser: <ClassName>.<method_name>. Cuando un método no pertenece a una clase, un módulo o una estructura, basta con llamarlo escribiendo su nombre. Los métodos siempre devuelven implícitamente el valor de la última expresión.

Cuando un método tiene argumentos, puedes usar paréntesis al especificarlos tanto en la llamada como en la definición del método, así: <method_name>(<argument_1>, <argument_2>, ...). Cuando un método no tiene argumentos, los paréntesis deben omitirse.

def hello(name)
  "Hello #{name}!"
end

hello("Crystal")
# => Hello Crystal!

Cuando llamas a un método con varios argumentos, estos deben separarse con una coma. Los argumentos deben indicarse en el mismo orden que los argumentos del método.

def hello_language(name, language)
  "Hello #{name}! You are learning #{language}."
end

hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.

Llamar a un método con un número incorrecto de argumentos provoca un error en tiempo de compilación.

hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)

Suma, resta y multiplicación

En Crystal, puedes usar el operador + para sumar dos números. También puedes usar el operador - para restar dos números. Y puedes usar el operador * para multiplicar dos números.

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

Comentarios

En Crystal, los comentarios se escriben con el carácter #, seguido de un espacio y del comentario. Los comentarios sirven para documentar el código. El compilador no ejecuta los comentarios.

# This is a comment

Instrucciones

En este ejercicio, escribirás código para ayudarte a cocinar una lasaña espectacular siguiendo tu libro de cocina favorito.

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

1. Define el tiempo esperado en el horno en minutos

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

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 que la lasaña lleva en el horno y devuelve cuántos minutos le quedan aún por permanecer en el horno, según el tiempo esperado en el horno en minutos de la tarea anterior.

Lasagna.new.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 has añadido a la lasaña y devuelve el número de minutos que has empleado en prepararla, suponiendo que cada capa tarda 2 minutos en prepararse.

Lasagna.new.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 has añadido a la lasaña, y el parámetro actual_minutes_in_oven es el número de minutos que la lasaña lleva en el horno. El método debe devolver el número total de minutos que has trabajado en cocinar la lasaña, que es la suma del tiempo de preparación en minutos y el tiempo que la lasaña ha estado en el horno hasta el momento.

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

¿Listo para empezar La increíble lasaña de Ary?

Regístrate en Exercism para aprender y dominar Crystal con 26 conceptos142 ejercicios y mentoría humana real, todo gratis.