FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Optimizar con Case XXX of
Hola a tod@s.
Sé que la pregunta es un poco chorra pero si uno no sabe pues duplica código por un tubo. Tengo una serie de sentencias "If/then" y quiero agruparlas todas en un "Case/of". El código sería algo así: With FormVentas do begin if ActiveControl =DBEdit1 then "Lo que sea"; if ActiveControl =DBEdit2 then "Lo que sea"; . . . . end; ¿Como sería con un "Case/Of"?, porque son unas 10 sentencias "If/then" y aunque funciona bien se optimizaría con un "Case/Of". Saludossssssssssssss.
__________________
Saludos a tod@s y no os olvideis de ser felices. |
#2
|
|||
|
|||
En este caso no será posible la utilización de case, ya que éste sólo funciona con tipos ordinales.
Es decir, puedes hacer: case UnEntero of 1: Algo; 2: OtraCosa; else LoQueSea; end; case UnCaracter of 'a': Algo; 'c': Otro; end; pero no puedes hacer: case objeto of 1: Algo; 2: OtraCosa; else LoQueSea; end; De todos modos, puedes usar "else if" para arreglar un poco el código. if Objeto = MiObjeto1 then DoSomething else if Objeto = MiObjeto2 then DoSomethingElse else if Objeto = MiObjeto3 then CañaAlMonoQueEsDeGoma {I.M.} else LoQueSea; |
#3
|
||||
|
||||
Para este tipo de casos, yo tengo esta función:
Código:
{**************************************} Function MyCase(aCadena:string; aLista: array of String):Integer; var i:Integer; begin Result:=-1; for i:=Low(aLista) to High(aLista) do begin if Uppercase(aCadena)=Uppercase(aLista[i]) then begin result:=i; break; end; end;//for end; {***************************************} Y la utilizo de la sigiente manera: Código:
case MyCase(VariableTexto,['perro','gato','canario']) of 0:do_perro; 1:do_gato; 2:do_canario; end; //case para el caso que plantea TikiMore, seria: Código:
case MyCase(ActiveControl.name,['DBEdit1','dbEdit2','dBeDiT3']) of 0:... 1:... 2:... end; //case No es la gran cosa, pero ayuda por lo menos a ordenar el codigo. Nota: La funcion no es sensible a mayusculas.... chao. |
#4
|
|||
|
|||
Para este cayo tengo esta otra funcion que podria ser muy ùtil:
{------------------------------------------------------------------------------------------------- esta funcion es original de Foxpro/Visual Foxpro, le agregas una lista de elementos y te devuelve true si la cadena contiene alguno de los elementos de la lista y false si no lo tiene. ejemplo de uso: VariableTexto:='gato'; if Inlist(VariableTexto,['perro','gato','canario'])=true then begin //es un gato ..... end; --------------------------------------------------------------------------------------------------} Function Inlist(aCadena:string; aLista: array of String):boolean; var i:Integer; begin Result:=false; for i:=Low(aLista) to High(aLista) do begin if Uppercase(aCadena)=Uppercase(aLista[i]) then begin result:=true; break; end; end; end; |
#5
|
|||
|
|||
es una mejora del la del colega gatosoft;
Gracias, por la base. |
#6
|
|||
|
|||
si lo que quirees en hacer validaciones dependiento el tipo de objeto, este procedimiento les puede ser muy util.
Para este ejemplo yo lo uso para limpiar todos los objetos en un form, y yo especifico que objetos quiero validar, pero usando tag se pueden implementar otras utilizaciones.
Última edición por marcoszorrilla fecha: 10-07-2010 a las 18:26:35. |
#7
|
||||
|
||||
Cita:
Cita:
La solución de Gatosoft es muy elegante pero debe usarse sólo para casos peqeños. Si se coloca en rutinas que se usan muchas veces durante el programa y con muchos casos puede ser contraproducente en cuanto al rendimiento de la aplicación. // Saludos |
#8
|
|||
|
|||
Hola muchachos, yo pondría el uso de la olvidada propiedad Tag.
Esto es; asignaría a los 10 edit los valores de tag desde 1 hasta 10, y entonces usaría el Case..of mas o menos así. Código:
With FormVentas do Case ActiveControl.tag of 1: "Lo que sea"; 2: "Lo que sea"; . . . . 10:"Lo que sea"; end; Saludos |
#9
|
|||
|
|||
Pues sí, al fin y al cabo la property Tag sirve para hacer cosas de estas (lo dice en el propio help de Delphi).
Simplemente debes andar con cuidado, porque como te despistes te puedes volver loco revisando Tags, etc... De todos modos, a mi el "case" nunca me ha gustado demasiado, y menos desde que me acostumbré al "else if". Para gustos...... los bucles! (que malo :__) Saludos. |
#10
|
|||
|
|||
Bueno muchach@s.
Gracias por vuestros consejos ante todo. Probaré con la propiedad "Tag" a ver que tal resulta. Saludossssssssssssss.
__________________
Saludos a tod@s y no os olvideis de ser felices. |
|
|
|