A Gleamben egy lista egy megváltoztathatatlan gyűjtemény, amely nulla vagy több értéket tartalmaz. Egy listában minden értéknek ugyanolyan típusúnak kell lennie. Mivel a listák megváltoztathatatlanok, miután létrehoztál egy listát, az értéke soha nem változhat meg. Minden függvény vagy operátor, amely úgy tűnik, hogy módosítja a listát (például hozzáad egy elemet), valójában egy új listát ad vissza.
A listákat így definiálhatod:
let empty = []
let singleValue = [5]
let threeValues = ["a", "b", "c"]
A leggyakoribb módja annak, hogy elemet adj a listához, a spread szintaxis használata:
let two_to_four = [2, 3, 4]
let one_to_four = [1, ..two_to_four]
// -> [1, 2, 3, 4]
A Gleam standard könyvtárában található gleam/list modul számos hasznos függvényt tartalmaz a listákkal való munkához. Ezt a modult nagyon gyakran használják a Gleam-kódban, ezért érdemes megismerkedned vele.
A listaminták arra is használhatók a case kifejezésekben, hogy listákra illeszkedj, és a bennük lévő értékeket változókhoz rendeld:
pub fn describe(list: List(String)) -> String {
case list {
[] -> "Empty list"
[x] -> "List with one item: " <> x
[x, y] -> "List with two items: " <> x <> " and " <> y
_ -> "List with three or more items"
}
}
Amellett, hogy pontos hosszúságú listákra illeszkedhetsz, a spread szintaxissal legalább egy bizonyos hosszúságú listákra is illeszkedhetsz:
pub fn describe(list: List(String)) -> String {
case list {
[_, _, ..] -> "List with at least two items"
[_] -> "List with one item"
[] -> "Empty list"
}
}
A spread szintaxis arra is használható, hogy a lista maradékát egy változóhoz rendeld:
pub fn remove_first_item(list: List(String)) -> List(String) {
case list {
// Return the list without the first item
[_, ..rest] -> rest
// There's no first item to remove, return an empty list
_ -> []
}
}
A case kifejezéseknek minden lehetséges értékre mintát kell tartalmazniuk abból a típusból, amelyre illeszkednek, ezért gyakran használnak egy záró, eldobó mintát (_), hogy kezeljék a maradék értékeket.
Ebben a feladatban olyan kódot fogsz írni, amely nyomon követi azon programozási nyelvek listáját, amelyeket meg szeretnél tanulni az Exercism-ön.
Hat részfeladat vár rád, és mindegyikben listákkal fogsz foglalkozni.
Ahhoz, hogy nyomon követhesd azokat a nyelveket, amelyeket meg szeretnél tanulni, létre kell hoznod egy új listát. Definiáld a new_list függvényt, amely egy új, üres listát ad vissza.
new_list()
// -> []
Jelenleg van egy papírlapod, amelyen felsorolva vannak a nyelvek, amelyeket meg szeretnél tanulni: Gleam, Go és TypeScript. Definiáld az existing_list függvényt, hogy ezt a listát adja vissza.
existing_list()
// -> ["Gleam", "Go", "TypeScript"]
Ahogy felfedezded az Exercism-öt, és egyre érdekesebb nyelveket találsz, szeretnéd felvenni őket a listádra. Valósítsd meg az add_language függvényt, amely egy új nyelvet szúr be a listád elejére.
add_language(["OCaml", "Elixir"], "Scheme")
// -> ["Scheme", "OCaml", "Elixir"]
Egyesével megszámolni a nyelveket kényelmetlen. Valósítsd meg a count_languages függvényt, amely megszámolja a listádon lévő nyelveket.
count_languages(["jq", "Elm", "Rust", "Kotlin"])
// -> 4
Egy ponton rájössz, hogy a listád valójában fordított sorrendben van! Valósítsd meg a reverse_list függvényt, amely megfordítja a listádat.
reverse_list(["Python", "Julia", "Idris", "COBOL"])
// -> ["COBOL", "Idris", "Julia", "Python"]
Bár minden nyelvet szeretsz, a Gleam különleges helyet foglal el a szívedben. Ezért igazán izgalmas számodra egy nyelvek listája, ha:
Valósítsd meg az exciting_list függvényt, amely ellenőrzi, hogy izgalmas-e egy nyelvlista:
exciting_list(["Lua", "Gleam"])
// -> 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.