lundi 14 octobre 2019

Does a better pattern exist for "Return value only if"

I often find myself writing code that will return early if a condition occurs, but continues if that condition does not occur.

For example, in the below code, FooBar() gets a Result from Foo(). If it is not Result.Success, FooBar() should return that result immediately, and not process the object any further. Then, do the same for Bar().

enum Result
{
    Success,
    CriticalError,
    MinorError,
}
Result FooBar(object someValue)
{
    Result result = Foo(someValue);
    if(result != Result.Success)
    {
        return result;  
    }
    result = Bar(someValue);
    if(result != Result.Success)
    {
        return result;  
    }
    DoSomething(someValue);
    return Result.Success;
}

It bothers me (slightly) that I have to set the variable, then have the if statement, other than simply returning the value if (and only if) it meets a condition.

Ideally, there would be something like this:

Foo(someValue).ReturnIf(result => result != Result.Success);

Aucun commentaire:

Enregistrer un commentaire