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"
}
}
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:
Tienes seis tareas que te ayudarán a elegir tu actividad del Día de San Valentí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.
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.
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.
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.Finalmente, ya puedes calificar las ideas de tu pareja. Esto es lo que piensas de la idea de tu pareja:
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
Regístrate en Exercism para aprender y dominar Gleam con 33 conceptos122 ejercicios y mentoría humana real, todo gratis.