Parcours
/
Gleam
Gleam
/
Exercices
/
La Saint-Valentin
La Saint-Valentin

La Saint-Valentin

Exercice d'apprentissage

Introduction

Types personnalisés

En Gleam, les types personnalisés permettent de définir de nouveaux types de données. Ils peuvent avoir plusieurs variantes, chacune avec son propre nom.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

Chaque cas d'un type personnalisé peut, éventuellement, contenir des données, et différents cas peuvent contenir des types de données différents. Quand une variante contient des données, on parle d'un enregistrement.

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

Pour créer une valeur pour un cas précis, on peut faire référence à son nom s'il ne contient aucune donnée supplémentaire (Spring), ou l'appeler comme une fonction s'il en contient (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

Les types personnalisés, comme tout ce qui existe en Gleam, possèdent une égalité structurelle, ce qui signifie que deux valeurs de la même variante et portant les mêmes données sont équivalentes.

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

On peut filtrer par motif les variantes d'un type personnalisé à l'aide d'expressions 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"
  }
}

Instructions

Dans cet exercice, c'est la Saint-Valentin et ton partenaire et toi préparez quelque chose de sympa à faire ensemble. Ton partenaire a plein d'idées et te demande maintenant de les évaluer, afin de trouver l'activité à faire.

Les idées suivantes sont proposées par ton partenaire :

  • Jouer à un jeu de société
  • Se détendre
  • Regarder un film
  • Aller au restaurant
  • Faire une balade

Tu as six tâches pour t'aider à choisir l'activité de la Saint-Valentin.

1. Définis l'approbation

Pour chaque idée que ton partenaire propose, tu réponds par l'une de trois options : oui, non ou peut-être.

Définis le type personnalisé Approval pour représenter ces options sous forme des trois cas suivants : Yes, No et Maybe.

2. Définis les cuisines

Ton partenaire a sélectionné deux restaurants possibles : l'un de cuisine coréenne et l'autre de cuisine turque.

Définis le type personnalisé Cuisine pour représenter ces cuisines sous forme des deux cas suivants : Korean et Turkish.

3. Définis les genres de films

Il y a des tonnes de films parmi lesquels choisir, alors pour réduire le champ des possibles, ton partenaire précise aussi leur genre.

Définis le type personnalisé Genre pour représenter les genres suivants sous forme de cas : Crime, Horror, Romance et Thriller.

4. Définis l'activité

Comme dit plus haut, ton partenaire a proposé cinq activités différentes : jouer à un jeu de société, se détendre, regarder un film, aller au restaurant et faire une balade.

Définis le type personnalisé Activity pour représenter ces types d'activités :

  • BoardGame : aucune donnée associée.
  • Chill : aucune donnée associée.
  • Movie : a comme donnée associée son Genre.
  • Restaurant : a comme donnée associée sa Cuisine.
  • Walk : a comme donnée associée un Int qui représente le nombre de kilomètres à parcourir.

5. Évalue l'activité

Enfin, tu es prêt à évaluer les idées de ton partenaire. Voici ce que tu penses de l'idée de ton partenaire :

  • Jouer à un jeu de société : non.
  • Se détendre : non.
  • Regarder un film : oui s'il s'agit d'un film romantique ; sinon, non.
  • Aller au restaurant : oui si la cuisine est coréenne, peut-être si elle est turque.
  • Faire une balade : oui si la balade fait plus de onze kilomètres ; peut-être si elle fait plus de six kilomètres ; sinon, non.

Implémente une fonction nommée rate_activity qui prend une valeur Activity et renvoie l'Approval selon les préférences ci-dessus :

rate_activity(Restaurant(Turkish))
// -> Maybe
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Gleam Exercism

Prêt à commencer La Saint-Valentin ?

Inscris-toi sur Exercism pour apprendre et maîtriser Gleam avec 33 concepts122 exercices, et un vrai mentorat humain, le tout gratuitement.