Tracks
/
Elm
Elm
/
Ejercicios
/
Día de San Valentín
Día de San Valentín

Día de San Valentín

Ejercicio de aprendizaje

Introducción

Tipos personalizados

Los tipos personalizados en Elm representan un número fijo de casos con nombre. Cada valor corresponde exactamente a uno de los casos nombrados.

Un tipo personalizado se define con la palabra clave type y requiere muy poca sintaxis. Son una de las técnicas más importantes en la programación con Elm, y se usan para hacer que los valores posibles en el código coincidan exactamente con los valores válidos en la vida real, lo que no deja lugar a datos inválidos y hace que los estados imposibles sean imposibles de representar en el código.

type Season
    = Spring
    | Summer
    | Autumn
    | Winter

Cada caso de un tipo personalizado puede tener datos asociados de forma opcional, y diferentes casos pueden tener diferentes tipos de datos. Si ninguno de los casos tiene datos asociados, la unión discriminada es similar a lo que en otros lenguajes suele llamarse una enumeración (o enum).

type FlexibleNumber
    = Integer Int
    | Float Float
    | Invalid

Puedes crear un valor para un caso específico refiriéndote a su nombre (Spring), cuando está definido en el mismo módulo, o se importa con la sintaxis import SeasonModule exposing (Season(..)), o refiriéndote a su nombre totalmente cualificado (Season.Spring) cuando se importa con la sintaxis import SeasonModule exposing (Season).

integerTwo = Integer 2
invalid = FlexibleNumber.Invalid

Los tipos personalizados, al igual que todo en Elm, tienen igualdad estructural, lo que significa que dos valores para el mismo caso y con los mismos datos (opcionales) son equivalentes.

La forma preferida de trabajar con tipos personalizados es con la coincidencia de patrones:

let describe flexibleNumber =
    case flexibleNumber of
        Integer i ->
            "Integer: " ++ fromInt(i)

        Float f ->
            "Float: " ++ fromFloat(f)

        Invalid   ->
            "Invalid"

Instrucciones

En este ejercicio es el Día de San Valentín, y tú y tu pareja están planeando hacer algo lindo juntos. Tu pareja tiene muchas ideas y ahora te pide que las califiques para encontrar la actividad que van a hacer.

Tu pareja propone las siguientes ideas:

  • Jugar un juego de mesa
  • Relajarse
  • Ver una película
  • Ir a un restaurante

Tienes seis tareas para ayudarte a elegir tu actividad del Día de San Valentín.

1. Define la aprobación

Para cada idea que propone tu pareja, respondes con una de tres opciones: sí, no o tal vez.

Define el tipo personalizado Approval para representar estas opciones con los siguientes tres casos: Yes, No y Maybe.

2. Define las cocinas

Tu pareja eligió dos restaurantes posibles: uno de cocina coreana y el otro de cocina turca.

Define el tipo personalizado Cuisine para representar estas cocinas con los siguientes dos casos: Korean y Turkish.

3. Define los géneros de películas

Hay muchísimas películas entre las que elegir, así que, para reducir las opciones, tu pareja también indica su género.

Define el tipo personalizado Genre para representar los siguientes géneros como casos: Crime, Horror, Romance y Thriller.

4. Define la actividad

Como ya se dijo, tu pareja propuso cinco actividades diferentes: jugar un juego de mesa, relajarse, ver una película e ir a un restaurante.

Define el tipo personalizado Activity para representar estos tipos de actividad:

  • BoardGame: sin datos asociados.
  • Chill: sin datos asociados.
  • Movie: tiene su Genre como dato asociado.
  • Restaurant: tiene su Cuisine como dato asociado.

5. Califica la actividad

Por último, ya puedes calificar las ideas de tu pareja. Esto es lo que piensas de cada idea:

  • Jugar un juego de mesa: no.
  • Relajarse: no.
  • Ver una película: sí si es una película romántica; si no, no.
  • Ir a un restaurante: sí si la cocina es coreana, tal vez si es turca.

Implementa una función llamada rateActivity que recibe un valor Activity y devuelve el Approval según los sentimientos anteriores:

rateActivity (Restaurant Turkish)
-- => Maybe
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Elm Exercism

¿Todo listo para empezar Día de San Valentín?

Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.