У кодовій базі моєї компанії я бачу таку схему коду (додаток .NET 3.5):
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
Я намагаюся обернути голову навколо того, чому б ви зробили це замість того, щоб Foo
метод просто взяв ідентифікатор і повернув Baz
об'єкт, замість того, щоб повертати значення, яке не використовується, і фактичний об'єкт бути параметром ref або output.
Чи є якась прихована користь цього стилю кодування, яка мені не вистачає?
baz
буття null
і повернене bool
буття неfalse
є рівнозначними. ніколи не є , тому, якщо не буде оновлено до того, як введено , коли його повернути, він ніколи не буде . Це допомогло б надзвичайно , якщо специфікації для були доступні. Насправді це, мабуть, найсерйозніша проблема, викрита цим кодом. new BazObject()
null
bazObject
Exception
Foo
false
baz
null
Foo