Tracks
/
Gleam
Gleam
/
Übungen
/
Valentinstag
Valentinstag

Valentinstag

Lernübung

Einführung

Benutzerdefinierte Typen

Mit benutzerdefinierten Typen definierst du in Gleam neue Datentypen. Sie können mehrere Varianten haben, jede mit einem eigenen Namen.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

Jede Variante eines benutzerdefinierten Typs kann optional Daten enthalten, und verschiedene Varianten können Daten unterschiedlicher Typen enthalten. Wenn eine Variante Daten enthält, nennt man sie ein Record.

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

Einen Wert für eine bestimmte Variante erstellst du, indem du ihren Namen angibst, wenn sie keine zusätzlichen Daten enthält (Spring), oder indem du sie wie eine Funktion aufrufst, wenn sie welche enthält (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

Benutzerdefinierte Typen haben, wie alles in Gleam, strukturelle Gleichheit. Das bedeutet, dass zwei Werte derselben Variante mit denselben Daten gleichwertig sind.

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

Varianten benutzerdefinierter Typen lassen sich mit case-Ausdrücken per Pattern Matching abgleichen.

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"
  }
}

Anleitung

In dieser Übung ist Valentinstag und du und dein Partner plant, etwas Schönes zusammen zu unternehmen. Dein Partner hat jede Menge Ideen und bittet dich nun, die Ideen zu bewerten, um herauszufinden, welche Aktivität ihr unternehmen könnt.

Dein Partner schlägt die folgenden Ideen vor:

  • Ein Brettspiel spielen
  • Abhängen
  • Einen Film ansehen
  • In ein Restaurant gehen
  • Einen Spaziergang machen

Du hast sechs Aufgaben, die dir helfen, deine Aktivität für den Valentinstag auszuwählen.

1. Definiere die Zustimmung

Auf jede Idee, die dein Partner vorschlägt, antwortest du mit einer von drei Optionen: ja, nein oder vielleicht.

Definiere den benutzerdefinierten Typ Approval, um diese Optionen durch die folgenden drei Fälle darzustellen: Yes, No und Maybe.

2. Definiere die Küchen

Dein Partner hat zwei mögliche Restaurants ausgewählt: eines mit koreanischer Küche und das andere mit türkischer Küche.

Definiere den benutzerdefinierten Typ Cuisine, um diese Küchen durch die folgenden zwei Fälle darzustellen: Korean und Turkish.

3. Definiere die Filmgenres

Es gibt unzählige Filme zur Auswahl. Um die Auswahl einzugrenzen, gibt dein Partner auch das jeweilige Genre an.

Definiere den benutzerdefinierten Typ Genre, um die folgenden Genres als Fälle darzustellen: Crime, Horror, Romance und Thriller.

4. Definiere die Aktivität

Wie gesagt, hat sich dein Partner fünf verschiedene Aktivitäten ausgedacht: ein Brettspiel spielen, abhängen, einen Film ansehen, in ein Restaurant gehen und einen Spaziergang machen.

Definiere den benutzerdefinierten Typ Activity, um diese Aktivitätsarten darzustellen:

  • BoardGame: keine zugeordneten Daten.
  • Chill: keine zugeordneten Daten.
  • Movie: hat sein Genre als zugeordnete Daten.
  • Restaurant: hat seine Cuisine als zugeordnete Daten.
  • Walk: hat einen Int, der die Anzahl der zu gehenden Kilometer angibt, als zugeordnete Daten.

5. Bewerte die Aktivität

Schließlich bist du bereit, die Ideen deines Partners zu bewerten. So denkst du über die Idee deines Partners:

  • Ein Brettspiel spielen: nein.
  • Abhängen: nein.
  • Einen Film ansehen: ja, wenn es ein romantischer Film ist; andernfalls nein.
  • In ein Restaurant gehen: ja, wenn die Küche koreanisch ist, vielleicht, wenn sie türkisch ist.
  • Einen Spaziergang machen: ja, wenn der Spaziergang länger als elf Kilometer ist; vielleicht, wenn er länger als sechs Kilometer ist; andernfalls nein.

Implementiere eine Funktion namens rate_activity, die einen Activity-Wert entgegennimmt und die Approval basierend auf den obigen Empfindungen zurückgibt:

rate_activity(Restaurant(Turkish))
// -> Maybe
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Gleam Exercism

Bereit, mit Valentinstag zu starten?

Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.