Les charlists se créent à l'aide du sigil ~c.
~c"hello"
Dans les anciennes versions d'Elixir, les charlists sont représentées sous la forme 'hello', entre guillemets simples.
Même si elles ressemblent beaucoup aux strings, ces deux types de données sont très différents l'un de l'autre. Une charlist est un tableau d'entiers. Ces entiers représentent les valeurs Unicode d'un caractère donné, aussi appelées points de code.
[65, 66, 67]
# => ~c"ABC"
On peut faire précéder un caractère de ? pour obtenir son point de code.
?A
# => 65
[?:, ?)]
# => ~c":)"
Comme les charlists sont des tableaux, on peut les manipuler comme n'importe quel autre tableau, en utilisant la récursion et le filtrage par motif.
[first_letter | _] = ~c"cat"
first_letter
# => 99
On peut concaténer deux tableaux avec ++.
~c"hi" ++ ~c"!"
# => ~c"hi!"
Plus le premier tableau est long, plus la concaténation est lente, donc mieux vaut éviter d'ajouter répétitivement des éléments à des tableaux de taille arbitraire.
case
case est une structure de contrôle qui permet de comparer une valeur donnée à de nombreux motifs. Les clauses d'une expression case sont évaluées de haut en bas, jusqu'à ce qu'une correspondance soit trouvée.
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"
Tu travailles comme administrateur système pour une grande entreprise à Munich, en Allemagne. L'une de tes responsabilités est la gestion des comptes e-mail.
Tu entends des gens se plaindre de ne pas réussir à envoyer d'e-mails à M. Müller. Tu comprends vite que la plupart de l'entreprise utilise un vieux client de messagerie qui ne reconnaît pas müller@firma.de comme une adresse e-mail valide, à cause du caractère non ASCII.
Demander aux gens d'abandonner leur vieux client de messagerie préféré serait une bataille perdue d'avance, alors tu décides de créer des alias assainis pour tous les comptes e-mail.
Implémente la fonction sanitize/1. Elle doit prendre un nom d'utilisateur sous forme de charlist et renvoyer ce nom d'utilisateur privé de tous les caractères autres que les lettres minuscules.
Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"
Étends la fonction sanitize/1. Elle ne doit pas retirer les tirets bas du nom d'utilisateur.
Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"
L'alphabet allemand compte 4 caractères non ASCII, et chacun d'eux a un équivalent ASCII couramment reconnu.
| Caractère allemand | Équivalent ASCII |
|---|---|
| ä | ae |
| ö | oe |
| ü | ue |
| ß | ss |
Étends la fonction sanitize/1. Elle doit remplacer les caractères allemands conformément au tableau. Tu peux supposer sans risque que tous les noms d'utilisateur sont déjà en minuscules.
Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
Inscris-toi sur Exercism pour apprendre et maîtriser Elixir avec 58 concepts168 exercices, et un vrai mentorat humain, le tout gratuitement.