Track
/
Gleam
Gleam
/
Esercizi
/
San Valentino
San Valentino

San Valentino

Esercizio di apprendimento

Introduzione

Tipi personalizzati

I tipi personalizzati sono il modo in cui si definiscono nuovi tipi di dati in Gleam. Possono avere più varianti, ognuna con il proprio nome.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

Ogni caso di un tipo personalizzato può contenere facoltativamente dei dati, e casi diversi possono avere tipi di dati diversi. Quando una variante contiene dati, viene chiamata record.

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

Per creare un valore per un caso specifico puoi fare riferimento al suo nome se non contiene dati aggiuntivi (Spring), oppure chiamarlo come una funzione se ne contiene (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

I tipi personalizzati, come tutto il resto in Gleam, hanno uguaglianza strutturale, il che significa che due valori della stessa variante e con gli stessi dati sono equivalenti.

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

Le varianti dei tipi personalizzati possono essere sottoposte a pattern matching usando espressioni 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"
  }
}

Istruzioni

In questo esercizio è San Valentino, e tu e il tuo partner avete in programma di fare qualcosa di bello insieme. Il tuo partner ha un sacco di idee e adesso ti chiede di valutarle, per trovare l'attività da fare.

Il tuo partner propone le seguenti idee:

  • Giocare a un gioco da tavolo
  • Rilassarsi
  • Guardare un film
  • Andare al ristorante
  • Fare una passeggiata

Hai sei compiti che ti aiuteranno a scegliere l'attività per San Valentino.

1. Definisci l'approvazione

Per ogni idea che il tuo partner propone, rispondi con una delle tre opzioni: sì, no o forse.

Definisci il tipo personalizzato Approval per rappresentare queste opzioni con i tre casi seguenti: Yes, No e Maybe.

2. Definisci le cucine

Il tuo partner ha selezionato due ristoranti possibili: uno di cucina coreana e l'altro di cucina turca.

Definisci il tipo personalizzato Cuisine per rappresentare queste cucine con i due casi seguenti: Korean e Turkish.

3. Definisci i generi cinematografici

Ci sono tantissimi film tra cui scegliere, quindi per restringere il campo il tuo partner ne indica anche il genere.

Definisci il tipo personalizzato Genre per rappresentare i generi seguenti come casi: Crime, Horror, Romance e Thriller.

4. Definisci l'attività

Come dicevamo, il tuo partner ha proposto cinque attività diverse: giocare a un gioco da tavolo, rilassarsi, guardare un film, andare al ristorante e fare una passeggiata.

Definisci il tipo personalizzato Activity per rappresentare questi tipi di attività:

  • BoardGame: nessun dato associato.
  • Chill: nessun dato associato.
  • Movie: ha il suo Genre come dato associato.
  • Restaurant: ha il suo Cuisine come dato associato.
  • Walk: ha un Int che rappresenta il numero di chilometri da percorrere come dato associato.

5. Valuta l'attività

Infine, sei pronto a valutare le idee del tuo partner. Ecco cosa pensi di ciascuna idea:

  • Giocare a un gioco da tavolo: no.
  • Rilassarsi: no.
  • Guardare un film: sì se è un film romantico; altrimenti no.
  • Andare al ristorante: sì se la cucina è coreana, forse se è turca.
  • Fare una passeggiata: sì se la passeggiata è più di undici chilometri; forse se è più di sei chilometri; altrimenti no.

Implementa una funzione chiamata rate_activity che prende un valore Activity e restituisce l'Approval in base a quanto detto sopra:

rate_activity(Restaurant(Turkish))
// -> Maybe
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Gleam Exercism

Vuoi iniziare San Valentino?

Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.