Tracks
/
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úscula, lo que se conoce como SCREAMING_SNAKE_CASE.

NUMBER = 1
puts NUMBER # => 1

Asignar un valor a una constante ya definida produce 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 un 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 un método. Sin embargo, en algunos casos es necesario especificar el tipo. Los casos que requieren especificar un tipo se explican 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 suelen definirse 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 nombres de 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 un método produce 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 pasarle 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 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 de forma implícita 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, deben omitirse los paréntesis.

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

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

Al llamar 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 produce 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 luego el comentario. Los comentarios se usan 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 con tu libro de cocina favorito.

Tienes cuatro tareas, todas relacionadas con el tiempo que se dedica a 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 reales que la lasaña ha estado en el horno y devuelve cuántos minutos le quedan todavía por estar 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 la cantidad de capas que le agregaste a la lasaña y devuelve la cantidad de minutos que dedicaste a 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 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. El método debe devolver la cantidad 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 lleva en el horno en ese 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 una pestaña nuevas
Crystal Exercism

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