Немного об out'ах

Oct 04, 2013 02:17

В проекте над которым сейчас работаю (C# если что) есть прямо какая-то фанатичная любовь к вызову методов с out-параметрами. Выглядит это как-то так:

bool DoWork(param1, param2, out param3, out param4)

Переписав эту упячку с использованием доп. класса Result:

Result DoWork(param1, param2)

возникло впечатление, что меня хотят сжечь как еретика.

Вот простой пример, который демонстрирует всю боль от использования out:

int Foo()
{
int x = 5;
try
{
Bar(out x);
}
catch(Exception)
{}
return x;
}

void Bar(out x)
{
x = 10;
throw new Exception();
}

Если вы используете out и не уверены какой результат вернёт метод Foo (или уверены, но ошибаетесь) - никогда больше не используйте out.

Эй, спросите вы, а как же наши горячо любимые TryParse?
В самом фреймворке TryParse методы существуют исключительно для значимых типов.
Если результат парсинга - объект ссылочного типа, то можно возвращать null и на основании этого делать вывод об успехе парсинга.

Есть тут люди, которые используют out? Хочется услышать их точку зрения.

csharp

Previous post Next post
Up