Parcours
/
C#
C#
/
Exercices
/
Tim du marketing
Tim du marketing

Tim du marketing

Exercice d'apprentissage

Introduction

La nullabilité

En C#, le littéral null sert à indiquer l'absence de valeur. Un type nullable est un type qui autorise les valeurs null.

Avant C# 8.0, les types de référence étaient toujours nullables et les types valeur ne l'étaient pas. On peut rendre un type valeur nullable en lui ajoutant un point d'interrogation (?).

string nullableReferenceType = "hello";
nullableReferenceType = null; // Valid as type is nullable

int nonNullableValueType = 5;
nonNullableValueType = null; // Compile error as type is not nullable

int? nullableValueType = 5; // Define nullable value type
nullableValueType = null;   // Valid as type is nullable

Accéder au membre d'une variable nulle ne provoque pas d'erreur de compilation, mais entraîne le déclenchement d'une NullReferenceException à l'exécution :

string sentence = null;

// Throws NullReferenceException at runtime
sentence.Length;

Pour contrer ce type d'erreur courant, C# 8 permet d'activer une fonctionnalité qui rend les types de référence non nullables par défaut :

string nonNullableReferenceType = "book";
nonNullableReferenceType = null; // Compile warning (no error!)

string? nullableReferenceType = "movie";
nullableReferenceType = null; // Valid as type is nullable

Pour manipuler des valeurs nullables en toute sécurité, on vérifie si elles sont null avant de les utiliser :

string NormalizedName(string? name)
{
    if (name == null)
    {
        return "UNKNOWN";
    }

    // Value is not null at this point, so no compile warning
    // and no runtime NullReferenceException being thrown
    return name.ToUpper();
}

NormalizedName(null); // => "UNKNOWN"
NormalizedName("Elisabeth"); // => "ELISABETH"

L'opérateur ?? permet de renvoyer une valeur par défaut lorsque la valeur est null :

string? name1 = "John";
name1 ?? "Paul"; // => "John"

string? name2 = null;
name2 ?? "George"; // => "George"

L'opérateur ?. permet d'appeler des membres en toute sécurité sur une valeur qui peut être null :

string? fruit = "apple";
fruit?.Length; // => 5

string? vegetable = null;
vegetable?.Length; // => null

Instructions

Dans cet exercice, tu vas écrire du code pour imprimer des badges nominatifs destinés aux employés d'une usine.

1. Imprime un badge pour un employé

Les employés ont un identifiant, un nom et un nom de service. Les libellés de badge des employés sont formatés comme suit : "[id] - name - DEPARTMENT". Implémente la méthode (static) Badge.Print() pour renvoyer le libellé de badge d'un employé :

Badge.Print(734, "Ernest Johnny Payne", "Strategic Communication");
// => "[734] - Ernest Johnny Payne - STRATEGIC COMMUNICATION"

Note que le nom du service doit être en majuscules sur le libellé.

2. Imprime un badge pour un nouvel employé

En raison d'une bizarrerie du système informatique, il arrive parfois que les nouveaux employés n'aient pas encore d'identifiant lorsqu'ils commencent à travailler à l'usine. Comme les badges sont obligatoires, ils recevront un badge temporaire sans le préfixe d'identifiant. Modifie la méthode (static) Badge.Print() pour prendre en charge les nouveaux employés qui n'ont pas encore d'identifiant :

Badge.Print(id: null, "Jane Johnson", "Procurement");
// => "Jane Johnson - PROCUREMENT"

3. Imprime un badge pour le propriétaire

Même le propriétaire de l'usine doit porter un badge en permanence. Cependant, un propriétaire n'a pas de service. Dans ce cas, le libellé doit afficher "OWNER" au lieu du nom du service. Modifie la méthode (static) Badge.Print() pour afficher un libellé pour le propriétaire :

Badge.Print(254, "Charlotte Hale", department: null);
// => "[254] - Charlotte Hale - OWNER"

Note qu'il est possible que le propriétaire soit aussi un nouvel employé :

Badge.Print(id: null, "Charlotte Hale", department: null);
// => "Charlotte Hale - OWNER"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C# Exercism

Prêt à commencer Tim du marketing ?

Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.