Tracks
/
Gleam
Gleam
/
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 son la forma en que se definen nuevos tipos de datos en Gleam. Pueden tener varias variantes, cada una con su propio nombre.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

Cada caso de un tipo personalizado puede contener datos de forma opcional, y casos distintos pueden tener distintos tipos de datos. Cuando una variante contiene datos, se le llama registro.

pub type Number {
  SomeInt(Int)
  SomeFloat(Float)
  Invalid
}

Puedes crear un valor para un caso específico refiriéndote a su nombre si no contiene datos adicionales (Spring), o llamándolo como una función si los contiene (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

Los tipos personalizados, al igual que todo en Gleam, tienen igualdad estructural, lo que significa que dos valores de la misma variante y con los mismos datos son equivalentes.

Spring == Spring // -> True
Spring == Autumn // -> False
SomeInt(2) == SomeInt(2) // -> True
SomeInt(2) == SomeFloat(2.0) // -> False

Se puede hacer coincidencia de patrones sobre las variantes de un tipo personalizado usando expresiones case.

import gleam/int
import gleam/float

pub fn describe(flexible_number: Number) -> String {
  case flexible_number {
    SomeFloat(f) -> "Float: " <> float.to_string(f)
    SomeInt(i) -> "Int: " <> int.to_string(i)
    Invalid -> "Neither a float nor an int"
  }
}

Instrucciones

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

Tu pareja propone las siguientes ideas:

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

Tienes seis tareas que te ayudarán a elegir tu actividad del Día de San Valentín.

1. Define la aprobación

Para cada idea que proponga tu pareja, respondes con una de tres opciones: sí, no o quizás.

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

2. Define las cocinas

Tu pareja ha seleccionado 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 para elegir, así que para reducir las opciones, tu pareja también enumera 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 se dijo, tu pareja ha propuesto cinco actividades diferentes: jugar a un juego de mesa, relajarse, ver una película, ir a un restaurante y dar un paseo.

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.
  • Walk: tiene un Int que representa el número de kilómetros a caminar como dato asociado.

5. Califica la actividad

Finalmente, ya puedes calificar las ideas de tu pareja. Esto es lo que piensas de la idea de tu pareja:

  • Jugar a un juego de mesa: no.
  • Relajarse: no.
  • Ver una película: sí, si es una película romántica; de lo contrario, no.
  • Ir a un restaurante: sí, si la cocina es coreana; quizás, si es turca.
  • Dar un paseo: sí, si el paseo es de más de once kilómetros; quizás, si es de más de seis kilómetros; de lo contrario, no.

Implementa una función llamada rate_activity que recibe un valor de tipo Activity y devuelve el Approval según lo anterior:

rate_activity(Restaurant(Turkish))
// -> Maybe
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Gleam Exercism

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

Regístrate en Exercism para aprender y dominar Gleam con 33 conceptos122 ejercicios y mentoría humana real, todo gratis.