![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Yo seguramente haria algo como:
Código:
function fechasValidas: Boolean;
var
f1,f2,f3,f4: TDateTime;
begin
f1:= StrToDateDef(fecha_creacion.text ,MaxDouble);
f2:= StrToDateDef(fecha_aprovacion.text ,MaxDouble);
f3:= StrToDateDef(fecha_emision_f_ant.text,MaxDouble);
f4:= StrToDateDef(fecha_emision_f.text ,MaxDouble);
Result:= (f1<=f2) and (f2<=f3) and (f3<=f4);
end;
que el codigo quedaria mucho mas enrevesado, y salvo que haya que llamar miles de veces por segundo a esa funcion, la velocidad de ejecucion sera suficiente. Saludos |
|
#2
|
||||
|
||||
|
Antes de nada gracias a todos por vuestros comentarios
Por partes: delphi.com.ar He puesto los exit porque antes lo tenía todo con if-else y era múchísimo más grande y lioso, a mi entender, y en un caso como este no creo que sea un mal uso, y eso que a mi tampoco me gusta emplearlos. Creo que es buena idea lo de hacer las transformaciones una única vez, al principio y luego usar directamente esos valores. Ñuño Martínez En el caso que pones no estás considerando las fechas nulas, que siempre deben ignorarse de la lógica de las comparaciones, por lo que ese sistema no me sirve en este caso concreto. Quizá usar result una única vez sea lo mejor (lo tenía así al principio y en su lugar usaba una variable temporal). Mick Igualmente no estás considerando las fechas nulas que darían falsos negativos. Y creo que definitivamente voy a hacer las transformaciones a "TDate" al principio. |
|
#3
|
||||
|
||||
|
De todas las respuestas dadas, la que más me gusta es la de Mick, de hecho, yo haría algo así:
Si delphi tiene desactivada la directiva "Complete Boolean evaluation" (por defecto creo que sí en Tools --> enviroment), las comparaciones serían tremendamente efectivas. El punto es usar Result una y otra vez y siempre como primera condición de comparación, si ya es false, Delphi detecta que está unida la comparación con un "and" y no evalúa la condición de la derecha del "and", directamente devuelve falso. Creo que las comparaciones están correctas. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 21-07-2006 a las 10:31:45. |
|
#4
|
||||
|
||||
|
Que curioso, acabo de hacer una segunda versión de la función que toma detalles que todos me habéis indicado y que se parece mucho a la tuya Lepe
Esta ya me gusta más, ¡¡MUCHAS GRACIAS A TODOS!! |
|
#5
|
||||
|
||||
|
Si... pero en la mia uso variables más descriptivas y me ahorro la Booleana
![]() Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 21-07-2006 a las 18:48:44. |
|
#6
|
|||
|
|||
|
El codigo que he puesto si tiene en cuenta las fechas nulas.
Precisamente por eso se usa un StrToIntDef con valor por defecto MaxDouble, simplemente esta hecho asi a proposito para ahorrarnos los IFs posteriores. Es decir el uso de MaxDouble en los STrToIntDef hace que no sea necesario poner ningun IF posterior de comprobacion. Porque esos IFS estan implicitos en la comparacion final: Result:= (f1<=f2) and (f2<=f3) and (f3<=f4); Si las fecha es nula el strtointdef da error y devuelve MaxDouble de modo que las comparaciones posteriores dan el resultado correcto (por lo menos el mismo que el codigo inicial que se ha puesto). Saludos |
|
#7
|
||||
|
||||
|
Que cosas... entonces "MaxDouble" es una constante definida en alguna unidad, ¿en cual? No la conocía.
|
|
#8
|
||||
|
||||
|
Cita:
![]()
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Optimizar con Case XXX of | TIKIMORE | Varios | 9 | 10-07-2010 17:21:20 |
| comparación de fechas | Nelly | Varios | 2 | 27-10-2005 17:30:42 |
| Comparación de Fechas | sierraja | Varios | 5 | 19-06-2005 06:56:20 |
| Optimizar Vistas | repo | Firebird e Interbase | 1 | 02-03-2005 18:13:43 |
| Optimizar Paradox en red | Sick boy | Conexión con bases de datos | 0 | 26-02-2005 13:31:48 |
|