Nil est un mot anglais qui signifie « rien » ou « zéro ». En Elixir, nil est une valeur spéciale qui signifie une absence de valeur.
# I do not have a favorite color
favorite_color = nil
Dans d'autres langages de programmation, les valeurs null ou none peuvent jouer un rôle similaire.
Outre cond, Elixir fournit aussi la macro if/2, qui est utile quand on n'a qu'une seule condition à vérifier.
La macro if/2 prend une condition et deux options. Elle renvoie la première option si la condition est truthy, et la seconde si la condition est falsy.
age = 15
if age >= 16 do
"You are allowed to drink beer in Germany."
else
"No beer for you!"
end
# => "No beer for you!"
Il est aussi possible d'écrire une expression if sur une seule ligne. Remarque la virgule après la condition.
if age > 16, do: "beer", else: "no beer"
Cette syntaxe est pratique pour les expressions très courtes, mais il vaut mieux l'éviter si l'expression ne tient pas sur une seule ligne.
En Elixir, tous les types de données s'évaluent en une valeur truthy ou falsy lorsqu'ils apparaissent dans un contexte booléen (comme une expression if). Toutes les données sont considérées comme truthy sauf false et nil. En particulier, les strings vides, l'entier 0 et les listes vides sont tous considérés comme truthy en Elixir.
Dans cet exercice, tu vas écrire du code pour imprimer des badges nominatifs pour les employés d'une usine. Les employés ont un identifiant, un nom et un nom de département. Les étiquettes des badges des employés sont formatées comme suit : "[id] - name - DEPARTMENT".
Implémente la fonction NameBadge.print/3. Elle prend un identifiant, un nom et un département. Elle doit renvoyer l'étiquette du badge, avec le nom du département en majuscules.
NameBadge.print(67, "Katherine Williams", "Strategic Communication")
# => "[67] - Katherine Williams - STRATEGIC COMMUNICATION"
En raison d'une bizarrerie du système informatique, il arrive que les nouveaux employés n'aient pas encore d'identifiant lorsqu'ils commencent à travailler à l'usine. Comme les badges sont obligatoires, ils reçoivent un badge temporaire sans le préfixe d'identifiant.
Étends la fonction NameBadge.print/3. Lorsque l'identifiant est absent, elle doit imprimer un badge sans celui-ci.
NameBadge.print(nil, "Robert Johnson", "Procurement")
# => "Robert Johnson - PROCUREMENT"
Même le propriétaire de l'usine doit porter un badge en permanence. Cependant, un propriétaire n'a pas de département. Dans ce cas, l'étiquette doit imprimer "OWNER" à la place du nom du département.
Étends la fonction NameBadge.print/3. Lorsque le département est absent, considère que le badge appartient au propriétaire de l'entreprise.
NameBadge.print(204, "Rachel Miller", nil)
# => "[204] - Rachel Miller - OWNER"
Note qu'il est possible que le propriétaire soit aussi un nouvel employé.
NameBadge.print(nil, "Rachel Miller", nil)
# => "Rachel Miller - OWNER"
Inscris-toi sur Exercism pour apprendre et maîtriser Elixir avec 58 concepts168 exercices, et un vrai mentorat humain, le tout gratuitement.