Track
/
C#
C#
/
Esercizi
/
Tim del marketing
Tim del marketing

Tim del marketing

Esercizio di apprendimento

Introduzione

Nullabilità

In C#, il valore letterale null viene usato per indicare l'assenza di un valore. Un tipo nullable è un tipo che ammette valori null.

Prima di C# 8.0, i tipi di riferimento erano sempre nullable e i tipi valore no. Un tipo valore può essere reso nullable aggiungendovi un punto interrogativo (?).

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

Accedere a un membro di una variabile null non causa un errore di compilazione, ma fa sì che in fase di esecuzione venga generata una NullReferenceException:

string sentence = null;

// Throws NullReferenceException at runtime
sentence.Length;

Per contrastare questo tipo comune di errore, C# 8 permette di attivare una funzionalità che rende i tipi di riferimento non nullable per impostazione predefinita:

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

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

Per lavorare in sicurezza con i valori nullable, controlla se sono null prima di usarli:

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'operatore ?? permette di restituire un valore predefinito quando il valore è null:

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

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

L'operatore ?. permette di chiamare in sicurezza i membri di un valore che potrebbe essere null:

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

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

Istruzioni

In questo esercizio scriverai del codice per stampare i badge con il nome dei dipendenti della fabbrica.

1. Stampa un badge per un dipendente

I dipendenti hanno un ID, un nome e il nome del reparto. Le etichette dei badge dei dipendenti hanno il seguente formato: "[id] - name - DEPARTMENT". Implementa il metodo (statico) Badge.Print() in modo che restituisca l'etichetta del badge di un dipendente:

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

Nota che nell'etichetta il reparto deve essere scritto in maiuscolo.

2. Stampa un badge per un nuovo dipendente

A causa di una stranezza del sistema informatico, capita che i nuovi dipendenti non abbiano ancora un ID quando iniziano a lavorare in fabbrica. Dato che i badge sono obbligatori, riceveranno un badge temporaneo senza il prefisso con l'ID. Modifica il metodo (statico) Badge.Print() in modo che supporti i nuovi dipendenti che non hanno ancora un ID:

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

3. Stampa un badge per il proprietario

Anche il proprietario della fabbrica deve indossare un badge in ogni momento. Il proprietario, però, non ha un reparto. In questo caso, l'etichetta deve stampare "OWNER" al posto del nome del reparto. Modifica il metodo (statico) Badge.Print() in modo che stampi un'etichetta per il proprietario:

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

Nota che il proprietario potrebbe anche essere un nuovo dipendente:

Badge.Print(id: null, "Charlotte Hale", department: null);
// => "Charlotte Hale - OWNER"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
C# Exercism

Vuoi iniziare Tim del marketing?

Iscriviti a Exercism per imparare e padroneggiare C# con 62 concetti178 esercizi e il mentoring di persone reali, tutto gratis.