A charlisteket a ~c sigillel hozod létre.
~c"hello"
Figyelj rá, hogy az Elixir régebbi verzióiban a charlisteket 'hello' formában, aposztrófokkal jelölik.
Bár nagyon hasonlítanak a stringekhez, a két adattípus jelentősen különbözik egymástól. A charlist egész számok listája. Az egész számok egy adott karakter Unicode-értékét reprezentálják, amit kódpontnak is neveznek.
[65, 66, 67]
# => ~c"ABC"
Ha egy karakter elé ?-t teszel, megkapod a kódpontját.
?A
# => 65
[?:, ?)]
# => ~c":)"
Mivel a charlistek listák, ugyanúgy dolgozhatsz velük, mint bármely más listával: rekurzióval és mintaillesztéssel.
[first_letter | _] = ~c"cat"
first_letter
# => 99
Két listát a ++ operátorral fűzhetsz össze.
~c"hi" ++ ~c"!"
# => ~c"hi!"
Minél hosszabb az első lista, annál lassabb az összefűzés, ezért kerüld, hogy ismételten hozzáfűzz tetszőleges hosszúságú listákhoz.
A case egy vezérlési szerkezet, amellyel egy adott értéket több mintával is összehasonlíthatsz. A case kifejezés klauzuláit felülről lefelé haladva értékeli ki, amíg egyezést nem talál.
age = 15
case age do
0 -> ~c"infant"
age when age < 4 -> ~c"baby"
age when age < 13 -> ~c"child"
age when age < 18 -> ~c"teenager"
_ -> ~c"adult"
end
# => ~c"teenager"
Rendszergazdaként dolgozol egy nagy müncheni vállalatnál Németországban. Az egyik feladatod az e-mail-fiókok kezelése.
Több embertől is panaszt hallasz, hogy nem tudnak e-mailt írni Müller úrnak. Hamar rájössz, hogy a vállalat nagy része egy régi e-mail-klienst használ, amely a nem ASCII-karakter miatt nem ismeri fel a müller@firma.de címet érvényes e-mail-címként.
Arra kérni az embereket, hogy adják fel a kedvenc régi e-mail-kliensüket, reménytelen vállalkozás, ezért úgy döntesz, hogy minden e-mail-fiókhoz tisztított aliasokat készítesz.
Valósítsd meg a sanitize/1 függvényt. A függvény egy felhasználónevet fogadjon el karakterlistaként, és olyan felhasználónevet adjon vissza, amelyből minden karaktert eltávolít a kisbetűk kivételével.
Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"
Bővítsd a sanitize/1 függvényt. A függvény ne távolítsa el az alulvonásokat a felhasználónévből.
Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"
A német ábécében 4 nem ASCII-karakter található, és mindegyikhez tartozik egy közismert ASCII-helyettesítő.
| Német karakter | ASCII-helyettesítő |
|---|---|
| ä | ae |
| ö | oe |
| ü | ue |
| ß | ss |
Bővítsd a sanitize/1 függvényt. A függvény a táblázat szerint helyettesítse a német karaktereket. Nyugodtan feltételezheted, hogy minden felhasználónév már csupa kisbetű.
Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.