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