Track
/
Elm
Elm
/
Esercizi
/
San Valentino
San Valentino

San Valentino

Esercizio di apprendimento

Introduzione

Tipi personalizzati

I tipi personalizzati in Elm rappresentano un numero fisso di casi denominati. Ogni valore corrisponde esattamente a uno di questi casi.

Un tipo personalizzato si definisce con la parola chiave type e richiede pochissima sintassi. È una delle tecniche più importanti della programmazione in Elm. Serve a far coincidere esattamente i valori possibili nel codice con i valori validi nella realtà: così non c'è spazio per dati non validi e diventa impossibile rappresentare nel codice stati impossibili.

type Season
    = Spring
    | Summer
    | Autumn
    | Winter

Ogni caso di un tipo personalizzato può avere dei dati associati, e casi diversi possono avere tipi di dati diversi. Se nessuno dei casi ha dati associati, l'unione discriminata è simile a quella che in altri linguaggi si chiama di solito enumerazione (o enum).

type FlexibleNumber
    = Integer Int
    | Float Float
    | Invalid

Per creare un valore di un caso specifico puoi riferirti al suo nome (Spring) quando il tipo è definito nello stesso modulo, oppure quando è importato con la sintassi import SeasonModule exposing (Season(..)). In alternativa puoi usare il nome completo (Season.Spring) quando il tipo è importato con la sintassi import SeasonModule exposing (Season).

integerTwo = Integer 2
invalid = FlexibleNumber.Invalid

I tipi personalizzati, come tutto in Elm, hanno l'uguaglianza strutturale: due valori dello stesso caso con gli stessi dati (opzionali) sono equivalenti.

Il modo preferito per lavorare con i tipi personalizzati è il pattern matching:

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

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

        Invalid   ->
            "Invalid"

Istruzioni

In questo esercizio è San Valentino: tu ed il tuo partner state pensando di fare qualcosa di bello insieme. Il tuo partner ha un sacco di idee: adesso ti chiede di valutarle, per trovare l'attività a cui dedicarsi.

Il tuo partner propone le seguenti idee:

  • Giocare ad un gioco da tavolo
  • Rilassarsi
  • Guardare un film
  • Andare al ristorante

Avrai 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 Custom Type Approval per rappresentare queste opzioni con i seguenti tre casi: Yes, No e Maybe.

2. Definisci le cucine

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

Definisci il Custom Type Cuisine per rappresentare queste cucine con i seguenti due casi: 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 Custom Type Genre per rappresentare i seguenti generi come casi: Crime, Horror, Romance e Thriller.

4. Definisci l'attività

Come detto, il tuo partner ha ideato cinque attività diverse: giocare ad un gioco da tavolo, rilassarsi, guardare un film ed andare al ristorante.

Definisci il Custom Type 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 la sua Cuisine come dato associato.

5. Valuta l'attività

Finalmente, sei pronto a valutare le idee del tuo partner. Ecco cosa ne pensi:

  • Giocare ad 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.

Implementa una funzione chiamata rateActivity che prende un valore Activity e restituisce l'Approval in base alle preferenze descritte sopra:

rateActivity (Restaurant Turkish)
-- => Maybe
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Elm Exercism

Vuoi iniziare San Valentino?

Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.