Short Tip #01: operatory ?: oraz ?? w C#

Poniżej krótki sposób jak pozbyć się ze swojego kodu pewnych potworków.

Bardzo częstą konstrukcją if (..) then .. else .., jednak niech Was ręka boska broni od napisania czegoś takiego:

private MyType ChooseSomething()
{
    MyType possibleResult1;
    MyType possibleResult2;

    // do some operations

    if (someCondition)
        return possibleResult1;
    else
        return possibleResult2;
}

Zamiast tego proponuję użycie operatora „?” (znak zapytania), o następującej składni:

condition ? expression1 : expression2;

który zwraca expression1, jeżeli warunek condition jest prawdziwy lub expression2 w przeciwnym przypadku.

Refactoring potworka z początku posta daje następujący rezultat:

private MyType ChooseSomething()
{
    MyType possibleResult1;
    MyType possibleResult2;

    // do some operations

    return someCondition ? possibleResult1 : possibleResult2;
}

Kolejny przypadek pojawia się, gdy następuje sprawdzenie czy dany obiekt nie jest null-em. Poniżej przykładowy kod (już po refactoringu z zastosowaniem operatora ?: )

private MyType ComputeSomething()
{
    MyType possibleResult = null;
    // do some operations
    return (possibleResult != null) ? possibleResult : defaultValue;
}

Wprowadzenie kolejnego operatora „??” (podwójny znak zapytania) jeszcze bardziej skróci zapis. Operator ten zwraca wartość po swojej lewej stronie wtedy, gdy nie jest ona równa null, w przeciwnym przypadku zwróci wartość po prawej stronie. Zastosowanie powyższego operatora do metody ComputeSomething() da następujący rezultat:

private MyType ComputeSomething()
{
    MyType possibleResult = null;
    // do some operations
    return possibleResult ?? defaultValue;
}

Przez użycie odpowiednich konstrukcji ilość tzw. „spaghetti code” znacznie się zmniejsza.

P.S. „Short Tip” to w założeniu regularny cykl krótkich artykułów przybliżających niewielkich rozmiarów zagadnienia składniowe/ideowe/estetyczne

Be Sociable, Share!
czoper opublikowano dnia 2010-3-5 Kategoria: Programowanie | Tagi:, ,

Odpowiedzi: 3 Zostaw komentarz

  1. #3Lucas @ 2010-3-19 10:55

    Też nie wiedziałem o „??”, a wygląda na naprawdę użyteczne :).

  2. #2czoper @ 2010-3-7 23:21

    został dodany w C# 2.0. Strona na MSDN: link

  3. #1Xion @ 2010-3-7 17:52

    o_0 Dlaczego ja o tym ‚??’ nie wiedziałem wcześniej! Od której wersji .NET to jest obecne w C#?

Zostaw odpowiedź

(Ctrl + Enter)