Yo caigo dentro del primer grupo
Código Delphi
[-]
function Foo: Boolean;
begin
Result := CalcSomething > 0;
end;
La pregunta del millon es, si en CalcSomething se eleva una excepcion, realmente importa el valor de retorno de Foo?
A mi modo de ver las cosas no, ya que si ocurrio una excepcion (algo que no deberia haber pasado y que esta fuera del control de mi programa)
Otra alternativa es usar Nullables. En delphi no vienen de serie pero se implementan facilmente. Tambien hay frameworks que los implementan, por ej
Spring4d
El codigo anterior quedaria similar a esto:
Código Delphi
[-]
function Foo: TNullableBoolean;
begin
Result := TNullableBoolean.Create(CalcSomething > 0);
end;
Los TNullable en spring, son implementados usando record, asi que si falla la creacion no tendriamos nunca un AV si mas adelante quiero consultar su valor
Obviamente, un verdadero nullable no permite acceder al valor en cuestion si nunca se seteo nada; en este caso spring4d, eleva una excepcion EInvalidOperation.
Lo interesante del asunto es que se dispone del metodo Value para recuperar el valor; y el metodo HasValue para ver si tengo un valor valido