Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Funciones de validación bien hechas (https://www.clubdelphi.com/foros/showthread.php?t=63071)

noob 28-01-2009 15:05:43

Funciones de validación bien hechas
 
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)

Código Delphi [-]
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)

Código Delphi [-]
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í:

Código Delphi [-]
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:

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 11:14:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi