Amikor egy egyedi típus egy változata adatot tárol, azt rekordnak nevezzük, és minden benne lévő érték egy mezőben található.
pub type Rectangle {
Rectangle(
Float, // The first field
Float, // The second field
)
}
A jobb olvashatóság érdekében a Gleam megengedi, hogy a mezőket névvel címkézzük.
pub type Rectangle {
Rectangle(
width: Float,
height: Float,
)
}
A címkékkel tetszőleges sorrendben adhatunk argumentumokat egy rekord konstruktorának.
let a = Rectangle(height: 10.0, width: 20.0)
let b = Rectangle(width: 20.0, height: 10.0)
a == b
// -> True
Amikor egy egyedi típusnak csak egy változata van, akkor a .label elérési szintaxissal lekérhetjük egy rekord mezőit.
let rect = Rectangle(height: 10.0, width: 20.0)
rect.height // -> 10.0
rect.width // -> 20.0
A rekordfrissítési szintaxis akkor használható, ha az egyedi típusnak egyetlen változata van, hogy egy meglévő rekordból új rekordot hozzunk létre, de néhány mezőt új értékekre cserélve.
let rect = Rectangle(height: 10.0, width: 20.0)
let tall_rect = Rectangle(..rect, height: 50.0)
tall_rect.height // -> 50.0
tall_rect.width // -> 20.0
A címkéket mintaillesztéskor is használhatjuk, hogy értékeket nyerjünk ki rekordokból.
pub fn is_tall(rect: Rectangle) {
case rect {
Rectangle(height: h, width: _) if h >. 20.0 -> True
_ -> False
}
}
Ha csak néhány mezőre szeretnénk illeszkedni, használhatjuk a .. spread operátort, hogy figyelmen kívül hagyjuk a többi mezőt.
pub fn is_tall(rect: Rectangle) {
case rect {
Rectangle(height: h, ..) if h >. 20.0 -> True
_ -> False
}
}
Ebben a feladatban nagy sportrajongó vagy, és épp most fedezted fel, hogy szenvedélyesen érdekel az NBA-kosárlabda. Mivel még új vagy az NBA-kosárlabdában, alaposan elmerülsz az NBA történelmében: számontartod a csapatokat, az edzőket és a győzelmi/vereségi statisztikáikat, és összehasonlítod őket egymással.
Mivel még nincs kedvenc csapatod, egy algoritmust is fejlesztesz majd, amely eldönti, hogy érdemes-e szurkolni egy adott csapatnak.
Hét részfeladat segít, hogy kidolgozd a saját szurkolj-egy-csapatért algoritmusodat.
Definiáld a Coach rekordot a következő két mezővel:
name: az edző neve, típusa String.former_player: jelzi, hogy az edző korábban játékos volt-e, típusa Bool.Definiáld a Stats rekordot a következő két mezővel:
wins: a győzelmek száma, típusa Int.losses: a vereségek száma, típusa Int.Definiáld a Team rekordot a következő három mezővel:
name: a csapat neve, típusa String.coach: a csapat edzője, típusa Coach.stats: a csapat statisztikái, típusa Stats.Valósítsd meg a create_coach függvényt, amely paraméterként megkapja az edző nevét és azt, hogy korábban játékos volt-e, és visszaadja a hozzá tartozó Coach rekordot:
create_coach("Larry Bird", True)
// -> Coach(name: "Larry Bird", former_player: True)
Valósítsd meg a create_stats függvényt, amely paraméterként megkapja a győzelmek és a vereségek számát, és visszaadja a hozzá tartozó Stats rekordot:
create_stats(58, 24)
// -> Stats(wins: 58, losses: 24)
Valósítsd meg a create_team függvényt, amely paraméterként megkapja a csapat nevét, az edzőt és a rekordot, és visszaadja a hozzá tartozó Team rekordot:
let coach = create_coach("Larry Bird", True)
let stats = create_stats(58, 24)
create_team("Indiana Pacers", coach, stats)
// -> Team(
// name: "Indiana Pacers",
// coach: Coach(name: "Larry Bird", FormerPlayer = True),
// stats: Stats(wins: 58, losses: 24),
// )
Mivel az NBA tulajdonosai türelmetlenek, azt tapasztaltad, hogy a gyenge csapateredmények gyakran az edző lecseréléséhez vezetnek. Valósítsd meg a replace_coach függvényt, amely paraméterként megkapja a csapatot és az új edzőt, és visszaadja a csapatot, de az új edzővel:
let coach = create_coach("Larry Bird", True)
let record = create_stats(58, 24)
let team = create_team("Indiana Pacers", coach, record)
let new_coach = create_coach("Isiah Thomas", True)
replace_coach(team, new_coach)
// -> Team(
// name: "Indiana Pacers",
// coach: Coach(name: "Isiah Thomas", FormerPlayer = True),
// stats: Stats(wins: 58, losses: 24),
// )
Miközben a statisztikákat böngészed, listákat vezetsz a csapatokról és az eredményeikről. Néha hibázol, és duplikált bejegyzések kerülnek a listádra. Valósítsd meg az is_same_team függvényt, amely két csapatot kap, és True-t ad vissza, ha ugyanaz a csapat, egyébként pedig False-t:
let pacers_coach = create_coach("Larry Bird", True)
let pacers_stats = create_stats(58, 24)
let pacers_team = create_team("Indiana Pacers", pacers_coach, pacers_stats)
let lakers_coach = create_coach("Del Harris", False)
let lakers_stats = create_stats(61, 21)
let lakers_team = create_team("LA Lakers", lakers_coach, lakers_stats)
is_same_team(pacers_team, lakers_team)
// -> False
Miután sok csapatot és mérkőzést megnéztél, kitaláltál egy algoritmust. Ha az alábbiak közül valamelyik igaz, akkor szurkolsz annak a csapatnak:
Valósítsd meg a root_for_team függvényt, amely megkap egy csapatot, és True-t ad vissza, ha szurkolni kell annak a csapatnak, egyébként pedig False-t:
let spurs_coach = create_coach("Gregg Popovich", False)
let spurs_stats = create_stats(56, 26)
let spurs_team = create_team("San Antonio Spurs", spurs_coach, spurs_stats)
root_for_team(spurs_team)
// -> True
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.