MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Patternuri pentru Tuple-uri

Patternurile pentru tuple-uri permit compararea valorilor din tuple-uri. De exemplu, putem transmite un tuple în construcția switch care conține denumirea limbii și momentul zilei, iar în funcție de datele transmise, să returnăm un mesaj specific:

string GetWelcome(string lang, string daytime) => (lang, daytime) switch
{
   ("english", "morning") => "Good morning",
   ("english", "evening") => "Good evening",
   ("german", "morning") => "Guten Morgen",
   ("german", "evening") => "Guten Abend",
   _ => "Bună"
};

Aici, în metodă sunt transmise două valori, din care se creează un tuple (se poate transmite direct tuple-ul în metodă). În construcția switch, cu ajutorul parantezelor rotunde, se definesc valorile care trebuie să corespundă elementelor tuple-ului.

De exemplu, expresia ("english", "morning") => "Good morning" va fi executată dacă simultan lang = "english" și datetime = "morning".

Aplicare:

string message = GetWelcome("english", "evening");
Console.WriteLine(message);  // Good evening

message = GetWelcome("french", "morning");
Console.WriteLine(message);  // Bună

Nu este necesar să comparăm toate valorile din tuple, putem folosi doar anumite elemente ale tuple-ului. În cazul în care nu dorim să utilizăm un element din tuple, în locul său punem un underscore:

string GetWelcome(string lang, string daytime, string status) => (lang, daytime, status) switch
{
   ("english", "morning", _) => "Good morning",
   ("english", "evening", _) => "Good evening",
   ("german", "morning", _) => "Guten Morgen",
   ("german", "evening", _) => "Guten Abend",
   (_, _, "admin") => "Hello, Admin",
   _ => "Bună"
};

Acum, tuple-ul conține trei elemente. Dar primele patru expresii nu folosesc ultimul element al tuple-ului, presupunem că acesta nu este important, de aceea în locul său punem un underscore ("english", "morning", _).

În penultimul exemplu, din contra, primele două elemente nu sunt importante, iar al treilea element este important: (_, _, "admin") =>.

În orice caz, trebuie să specificăm valori concrete sau underscore pentru toate elementele tuple-ului.

string message = GetWelcome("english", "evening", "user");
Console.WriteLine(message);  // Good evening

message = GetWelcome("french", "morning", "admin");
Console.WriteLine(message);  // Hello, Admin
← Lecția anterioară Lecția următoare →