Lasaña

Lasaña

Ejercicio de aprendizaje

Introducción

Fundamentos

Variables

Elixir es un lenguaje de tipado dinámico, lo que significa que el tipo de una variable solo se verifica en tiempo de ejecución. Usando el operador de coincidencia =, podemos vincular un valor de cualquier tipo a un nombre de variable:

# Bound an integer value of 1
count = 1
# You may re-bind variables
count = 2

# You may re-bind any type to a variable
count = false

# Strings can be created by enclosing characters within double quotes
message = "Success!"

Módulos

Elixir es un lenguaje de programación funcional y requiere que todas las funciones con nombre se definan dentro de un módulo. La palabra clave defmodule se usa para definir un módulo. Todos los módulos están disponibles para todos los demás módulos en tiempo de ejecución y no requieren un modificador de acceso para que sean visibles para otras partes del programa. Un módulo es análogo a una clase en otros lenguajes de programación.

defmodule Calculator do
  # ...
end

Funciones con nombre

Las funciones con nombre deben definirse dentro de un módulo. La palabra clave def se usa para definir una función con nombre pública.

Cada función puede tener cero o más argumentos. El valor de la última expresión de una función siempre se devuelve de forma implícita.

defmodule Calculator do
  def add(x, y) do
    x + y
  end
end

Para invocar una función, se especifica el nombre de su módulo y de la función, y se pasan argumentos para cada uno de los argumentos de la función.

sum = Calculator.add(1, 2)
# => 3

La palabra clave defp se puede usar en lugar de def para definir una función privada. Las funciones privadas solo se pueden usar desde dentro del mismo módulo que las definió.

Cuando invocas una función dentro del mismo módulo donde está definida, se puede omitir el nombre del módulo.

También puedes escribir funciones cortas usando una sintaxis de una sola línea (fíjate en la coma , y los dos puntos : alrededor de la palabra clave do).

defmodule Calculator do
  def subtract(x, y) do
    private_subtract(x, y)
  end

  defp private_subtract(x, y), do: x - y
end

difference = Calculator.subtract(7, 2)
# => 5

difference = Calculator.private_subtract(7, 2)
# => ** (UndefinedFunctionError) function Calculator.private_subtract/2 is undefined or private
#       Calculator.private_subtract(7, 2)

Aridad de las funciones

Es común referirse a las funciones por su aridad. La aridad de una función es la cantidad de argumentos que acepta.

# add/3 because this function has three arguments, thus an arity of 3
def add(x, y, z) do
  x + y + z
end

Convenciones de nombres

Los nombres de los módulos deben usar PascalCase. Un nombre de módulo debe empezar con una letra mayúscula A-Z y puede contener letras a-zA-Z, números 0-9 y guiones bajos _.

Los nombres de variables y funciones deben usar snake_case. Un nombre de variable o función debe empezar con una letra minúscula a-z o un guion bajo _, puede contener letras a-zA-Z, números 0-9 y guiones bajos _, y puede terminar con un signo de interrogación ? o un signo de exclamación !.

Biblioteca estándar

Elixir tiene una biblioteca estándar muy completa y bien documentada. La documentación está disponible en línea en hexdocs.pm/elixir. Guarda este enlace en algún lugar: ¡lo usarás mucho!

La mayoría de los tipos de datos integrados tienen un módulo correspondiente que ofrece funciones para trabajar con ese tipo de datos; por ejemplo, existe el módulo Integer para los números enteros, el módulo String para los strings, el módulo List para las listas, y así sucesivamente.

Un módulo que vale la pena mencionar es el módulo Kernel. Proporciona las capacidades básicas sobre las que se construye el resto de la biblioteca estándar, como operadores aritméticos, macros de control de flujo y mucho más. Las funciones del módulo Kernel se importan automáticamente, así que puedes usarlas sin el prefijo Kernel..

Comentarios en el código

Los comentarios se pueden usar para dejar notas a otros desarrolladores que lean el código fuente. Los comentarios de una sola línea en Elixir van precedidos por #.

Instrucciones

En este ejercicio vas a escribir código para ayudarte a cocinar una lasaña espectacular del libro de cocina que más te gusta.

Tienes cinco 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 función Lasagna.expected_minutes_in_oven/0, que no recibe argumentos y devuelve 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 la función Lasagna.remaining_minutes_in_oven/1, que recibe como argumento los minutos que la lasaña lleva en el horno y devuelve cuántos minutos le quedan aún en el horno, con base en el tiempo esperado en el horno en minutos de la tarea anterior.

Lasagna.remaining_minutes_in_oven(30)
# => 10

3. Calcula el tiempo de preparación en minutos

Define la función Lasagna.preparation_time_in_minutes/1, que recibe como argumento la cantidad de capas que le agregaste a la lasaña y devuelve cuántos minutos dedicaste a prepararla, suponiendo que cada capa te toma 2 minutos.

Lasagna.preparation_time_in_minutes(2)
# => 4

4. Calcula el tiempo total de trabajo en minutos

Define la función Lasagna.total_time_in_minutes/2, que recibe dos argumentos: el primero es la cantidad de capas que le agregaste a la lasaña, y el segundo es la cantidad de minutos que la lasaña lleva en el horno. La función debe devolver cuántos minutos en total dedicaste 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 lleva en el horno en ese momento.

Lasagna.total_time_in_minutes(3, 20)
# => 26

5. Crea una notificación de que la lasaña está lista

Define la función Lasagna.alarm/0, que no recibe argumentos y devuelve un mensaje que indica que la lasaña está lista para comer.

Lasagna.alarm()
# => "Ding!"
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Elixir Exercism

¿Todo listo para empezar Lasaña?

Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.