FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para CA-Clipper Code Blocks, funci贸n: IF()
Posts: 40
Joined: Thu Jan 12, 2006 05:10 PM
Code Blocks, funci贸n: IF()
Posted: Mon Jan 30, 2006 12:55 PM

Estimados colegas:

驴Es conveniente, pasar a Code Blocks, todas las l铆neas, que se puedan de un fuente?.

驴Y sustituir, todos los IF ELSE ENDIF, por IF()?

驴Poner, todo lo que sea factible, de los IF(), a IF( condici贸n, EVAL( bCode1 ), EVAL( bCode2 ) )

Ya que los, Code Blocks, y la funci贸n IF(), son m谩s rapidos. Me podr铆as decir, que ya me he contestado yo mismo, pero nunca esta de m谩s segundas, terceras,... opiniones. Por las experiencias de cada uno.

Por ello, pido opini贸n, a todos los que quieran participar.

Saludos, y 隆隆隆GRACIAS!!! anticipadas.

Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
No afecta
Posted: Mon Jan 30, 2006 11:56 PM

JMFS-D, no se que procesos estes corriendo y son muy pesados, pero dejame decirte que seg煤n mi experiencia la verdad no afecta mucho en manera que definas tus if(). IF;ELSE;ENDIF.

Pero por calidad de codigo. Lo haria con los codebloks.

Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 219
Joined: Mon Dec 26, 2005 07:25 PM
Code Blocks, funci贸n: IF()
Posted: Wed Feb 01, 2006 05:19 PM

La verdad es que a nuestro nivel no se nota mucho, a no ser que crees alguna clase que necesite rapidez de refresco o algo as铆.

Pero sin duda lo m谩s importante de los Codeblocks es que se encapsulan en una variable y se ejecutan del tir贸n sin necesidad de tener que buscarlos por la memoria a cada llamada a funci贸n. Son como las funciones INLINE pero transportables. Aderm谩s la variable sirve de transporte y puedes pasorlos a una funci贸n o a un m茅todo de una clase con sus variables internas y todo. No se pueden concebir las clases de FW sin ellos. 驴Como sin贸 llamar铆as al Valid de un Get o a una accion al pulsar un bot贸n. Tendr铆an que inventar otra cosa o aplicar los punteros de funci贸n.

En cuanto a los IF(). Idem de los mismo. Son INLINE y se pueden anidar y utilizar dentro de una variable, una llamada a funci贸n, etc. Ahorran mucho c贸digo. Por Ejemplo:

ColorearObjeto(if(oBJ=1,CRL_RED,if(oBJ=2,CLR_BLUE,CLR_GREEN)))

A ver como lo traduces a if / else / endif. Como m铆nimo 6 l铆neas con sus ciclos de reloj correspondiente.

O mejor: bColObj := { |oBj| if(oBJ=1,CRL_RED,if(oBJ=2,clr_blue,CLR_GREEN)), MsgBeep() }
ColorearCaja(bColObj,oCaja)
Por decir algo sencillo...

Nos Gusta Programar
Posts: 40
Joined: Thu Jan 12, 2006 05:10 PM
Os pongo un ejemplo de mi codigo.
Posted: Wed Feb 01, 2006 09:32 PM

IF( oParamtros:lPresupu , ;
( oDbfPresup:Load() , ;
nSiguiente := oDatos:Current()[ 1 ] , ;
oDatos:Current()[ 1 ] := nAnterior , ;
oDbfPresup:tipo := oPresupu:nTipo , ;
oDbfPresup:estado := oPresupu:nEstado , ;
oDbfPresup:codigo := oCliente:cCodigo , ;
oDbfPresup:numpresup := oPresupu:cNumero , ;
oDbfPresup:fechapres := oPresupu:dFecha , ;
oDbfPresup:descripcio := oDatos:Current()[ 2 ] , ;
oDbfPresup:cantidad := oDatos:Current()[ 3 ] , ;
oDbfPresup:precio := oDatos:Current()[ 4 ] , ;
oDbfPresup:Save() , ;
oDbfPresup:GoTo( nSiguiente ) ) , ;
( nSiguiente := oDatos:Current()[ 1 ] , ;
oDatos:Current()[ 1 ] := nAnterior , ;
oDbfFactC:tipo := oFactura:nTipo , ;
oDbfFactC:estado := oFactura:nEstado , ;
oDbfFactC:codigo := oCliente:cCodigo , ;
oDbfFactC:numfactura := oFactura:cNumero , ;
oDbfFactC:fechafactu := oFactura:dFecha , ;
oDbfFactC:descripcio := oDatos:Current()[ 2 ] , ;
oDbfFactC:cantidad := oDatos:Current()[ 3 ] , ;
oDbfFactC:precio := oDatos:Current()[ 4 ] , ;
oDbfFactC:Save() , ;
oDbfFactC:GoTo( nSiguiente ) ) )

Poner las lineas de codigo, para cuando se cumple la condici贸n del IF, y para cuando no se cumple, en un EVAL, 驴ser铆a lo m谩s conveniente?.

Saludos, Jos茅 M陋

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Code Blocks, funci贸n: IF()
Posted: Thu Feb 02, 2006 12:00 AM

Jose M陋,

Practicamente no habr谩 diferencia en la velocidad de ejecuci贸n y el c贸digo se volver谩 m谩s complicado de mantener.

Piensa que tanto las l铆neas de c贸digo de un PRG como el contenido de un codeblock, el compilador lo convierte a pcode (una serie de bytes) que la maquina virtual procesa.

S贸lo en procesos en los que se requiere la m谩xima velocidad, la soluci贸n es codificar ciertas partes en C para que la m谩quina virtual no intervenga y as铆 ganar ciclos de reloj.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 219
Joined: Mon Dec 26, 2005 07:25 PM
Code Blocks, funci贸n: IF()
Posted: Thu Feb 02, 2006 05:08 PM

No hay que buscarle tres pies al gato, los manuales de programaci贸n dicen que siempre hay que buscar velocidad y ahorro de memoria, o elejir uno de los dos cuando no se no se pueden cumplir ambos.
De lo que se olvidan es de nuestra comodidad y de la claridad del c贸digo, y reza por no saltarte un par茅ntesis.
En el caso de tu trozo de codigo, lo mas convenientes es un IF / ELSE / ENDIF sin lugar a dudas. Otras veces ser谩n m谩s adecuados los DO CASE. Otras veces te convendr谩 encapsular el c贸digo v铆a IF() y CodeBloks. Busca siempre lo que m谩s c贸modo te resulte y no te calientes la cabeza.
Un saludo....

Nos Gusta Programar

Continue the discussion