Argumenty domyślne w C# i jak ich unikać

Posted on Updated on

TL;DR

ARGUMENTY DOMYŚLNE SĄ PRZEREKLAMOWANE I NADUŻYWANE

Domyślne wartości dla parametrów to śliski temat. Tak naprawdę nie ma nic fajnego w tym że możemy deklarować funkcje wyglądające jak:

User CreateUser(string name = "", int age = 18)
{
    return new User(name, age);
}

Nie będę tłumaczył dlaczego nie powinniśmy pisać kodu w ten sposób. Podchodziłem do opisania tego tematu już kilka razy i za każdym razem byłem niezadowolony na tyle, żeby się tym nie chwalić. Dziś po prostu przykład jak wygląda kod z domyślnym argumentem i bez.

Przed:

public void DrawShape(Rectangle rectangle, Image image, double heightRatio = 0.0D)
{
    if (heightRatio == 0.0D)
    {
        heightRatio = _screenService.DefaultHeightRatio;
    } 

    // ...
} 

Po:

public void DrawShapeBetter(Rectangle rectangle, Image image, double heightRatio)
{
    DrawShapeBetterInternal(rectangle, image, heightRatio);
}

public void DrawShapeBetter(Rectangle rectangle, Image image)
{
    var heightRatio = _screenService.DefaultHeightRatio;
    
    DrawShapeBetterInternal(rectangle, image, heightRatio);
}

private void DrawShapeBetterInternal(Rectangle rectangle, Image image, double heightRatio)
{
    // ...
}

Unikamy niepotrzebnego IF’a.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s