PDA

Ver la Versión Completa : Funciones de validación bien hechas


noob
28-01-2009, 15:05:43
Siempre se dice que una función debe de hacer una única cosa, por ejemplo si vamos a validar que un dato introducido por el usuario sea un número decimal podemos hacer:

1)


function PrecioValido(Precio: string): boolean;
var
Importe: extended;
begin
Result := False;
if TryStrToFloat(Precio, Importe) then
Result := True
else
ShowMessage('El precio no es válido');
end;


o podemos hacer:

2)


function PrecioValido(Precio: string): boolean;
var
Importe: extended;
begin
Result := False;
if TryStrToFloat(Precio, Importe) then
Result := True;
end;


y luego llamar al la función así:


if not PrecioValido(Precio) then
ShowMessage('El precio no es válido');


¿Cuál de las dos formas sería la correcta?

Saludos.

marcoszorrilla
28-01-2009, 15:10:02
Yo utilizaría la primera, puesto que la función lo único que va a hacer es validar, sino es válido el dato, no solo debe retornar el "falso" sino también dar el mensaje correspondiente.

Si llamamos a esa función desde 50 sitios de nuestro programa nos ahorramos 49 ShowMessage.

Un Saludo.

Neftali [Germán.Estévez]
28-01-2009, 17:07:13
¿Y si en algun sitio no interesa que devuelva mensaje?
Por ejemplo, dentro de una clase realizando cálculos.

Otra opción podría ser esta:


function PrecioValido(Precio: string): boolean;
var
Importe: extended;
begin
Result := False;
if TryStrToFloat(Precio, Importe) then
Result := True
else
raise EConvertError.Create('El precio no es válido');
end;


Si hacemos un proceso que calcula 200 (o 500 o 1000) precios y dentro se hacen conversiones (donde se valida), tal vez no interese que salten 39 mensajes si hay 39 errores, sino que al final se pueda decir: "30 precios no se han calculado correctamente" o similar.