Kurzusok
/
Gleam
Gleam
/
Feladatok
/
Valentin-nap
Valentin-nap

Valentin-nap

Tanulófeladat

Bevezetés

Egyedi típusok

A Gleamben az egyedi típusokkal lehet új adattípusokat definiálni. Több változatuk is lehet, mindegyiknek saját neve van.

pub type Season {
  Spring
  Summer
  Autumn
  Winter
}

Egy egyedi típus minden változata opcionálisan tartalmazhat adatot, és a különböző változatok különböző típusú adatokat tárolhatnak. Ha egy változat tartalmaz adatot, azt rekordnak nevezzük.

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

Egy adott változat értékét úgy hozhatjuk létre, hogy a nevére hivatkozunk, ha nem tartalmaz további adatot (Spring), vagy függvényként hívjuk meg, ha tartalmaz (SomeInt(2)).

let spring = Spring
let integerTwo = SomeInt(2)

Az egyedi típusok, akárcsak a Gleam minden eleme, strukturális egyenlőséggel rendelkeznek, ami azt jelenti, hogy két azonos változatú és azonos adattartalmú érték egyenértékű.

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

Az egyedi típusok változataira case kifejezésekkel lehet mintailleszteni.

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

Utasítások

Ebben a feladatban Valentin-nap van, és a pároddal valami kellemes közös programot terveztek. A párodnak rengeteg ötlete van, és most megkér, hogy értékeld ezeket az ötleteket, hogy megtaláljátok, mihez kezdjetek.

A párod a következő ötleteket javasolja:

  • Társasjátékot játszani
  • Kikapcsolódni
  • Filmet nézni
  • Étterembe menni
  • Sétálni

Hat részfeladat segít kiválasztani a Valentin-napi programot.

1. Az elfogadás definiálása

A párod minden egyes ötletére három lehetőség egyikével válaszolsz: igen, nem vagy talán.

Definiáld az Approval egyedi típust, amely ezeket a lehetőségeket a következő három esetként ábrázolja: Yes, No és Maybe.

2. A konyhák definiálása

A párod két lehetséges éttermet választott: az egyik a koreai konyhára épül, a másik a török konyhára.

Definiáld a Cuisine egyedi típust, amely ezeket a konyhákat a következő két esetként ábrázolja: Korean és Turkish.

3. A filmműfajok definiálása

Rengeteg film közül lehet választani, ezért hogy szűkítsük a kört, a párod megadja a műfajukat is.

Definiáld a Genre egyedi típust, amely a következő műfajokat esetként ábrázolja: Crime, Horror, Romance és Thriller.

4. A tevékenység definiálása

Ahogy már említettük, a párod öt különböző tevékenységgel állt elő: társasjátékot játszani, kikapcsolódni, filmet nézni, étterembe menni és sétálni.

Definiáld az Activity egyedi típust, amely ezeket a tevékenységtípusokat ábrázolja:

  • BoardGame: nincs hozzá tartozó adata.
  • Chill: nincs hozzá tartozó adata.
  • Movie: hozzá tartozó adatként a Genre-t tartalmazza.
  • Restaurant: hozzá tartozó adatként a Cuisine-t tartalmazza.
  • Walk: hozzá tartozó adatként egy Int-et tartalmaz, amely a megteendő kilométerek számát adja meg.

5. A tevékenység értékelése

Végül készen állsz, hogy értékeld a párod ötleteit. Így érzel a párod ötletéről:

  • Társasjátékot játszani: nem.
  • Kikapcsolódni: nem.
  • Filmet nézni: igen, ha romantikus film; egyébként nem.
  • Étterembe menni: igen, ha koreai a konyha, talán, ha török.
  • Sétálni: igen, ha a séta több mint tizenegy kilométer; talán, ha több mint hat kilométer; egyébként nem.

Valósítsd meg a rate_activity nevű függvényt, amely egy Activity értéket vesz át, és a fenti érzések alapján visszaadja az Approval értéket:

rate_activity(Restaurant(Turkish))
// -> Maybe
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Gleam Exercism

Készen állsz elkezdeni a(z) Valentin-nap feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Gleam nyelvet 33 fogalom122 feladat segítségével, valódi emberi mentorálással, mindez ingyen.