Page 1 of 1
If anidados o DO CASE?
Posted:
Sat Aug 14, 2021 9:14 am
by goosfancito
Hola.
- Code: Select all Expand view
a:= [un valor numerico]
b:= [un valor numerico que corresponde a un item de un array]
if (a == b)
// operaciones
elseif (a > b)
// operaciones
elseif( a < b)
// operaciones
endif
- Code: Select all Expand view
do case
case a == b:
// operaciones
...
Cuál es el mejor código en todos los aspecto referidos a la codificacion?
Re: If anidados o DO CASE?
Posted:
Sat Aug 14, 2021 1:33 pm
by karinha
Depende de lo que necesites hacer. Ambos modos son excelentes para controlar una condición, ya sea sí o no. De cualquier manera, ambos modos harán lo que quieras. Creo que el comando DO CASE ... ENDCASE es más antiguo que IF..ELSEIF..ENDIF. En resumen, la decisión es tuya. Prefiero IF ... ELSEIF ... ENDIF, por cuestión de gustos. Abrazos.
https://www.itlnet.net/programming/program/Reference/c53g01c/ng1054c7.htmlhttps://www.itlnet.net/programming/program/Reference/c53g01c/ngfef37.htmlRegards, saludos.
Re: If anidados o DO CASE?
Posted:
Sat Aug 14, 2021 3:19 pm
by JoseAlvarez
Saludos,
Como dice Joao, ambos metodos funcionan para el mismo fin.
Yo prefiero el Do.. Case... por cuestiones de estetica y lectura, quiero decir que en mi caso, leo y entiendo mejor el codigo con esta estructura.
Cuestion de gustos...
Re: If anidados o DO CASE?
Posted:
Sat Aug 14, 2021 3:29 pm
by TecniSoftware
Todo depende para que lo uses.
Entiendo que con el IF puedes ir descartando opciones para achicar la rutina, con el DO CASE deberia ir barriendo secuencialmente hasta que encuentre una ocurrencia y recien ahi culmina.
Si no me equivoco, el comando SWITCH que funciona como el DO CASE dicen que es muchisimo mas rápido, que me corrijan si me equivoco.
Saludos!
Re: If anidados o DO CASE?
Posted:
Sun Aug 15, 2021 1:11 pm
by karinha
- Code: Select all Expand view
https://github.com/harbour/core/blob/master/tests/switch.prg
https://vivaclipper.wordpress.com/tag/switch/
https://vivaclipper.wordpress.com/tag/do-case/
#ifdef __XHARBOUR__
#define OTHERWISE DEFAULT
#define ENDSWITCH END
#endif
PROCEDURE Main()
LOCAL a := 1
MEMVAR m_b
PRIVATE m_b := "m_b"
#ifndef __XHARBOUR__
SWITCH a
ENDSWITCH
#endif
?
? "1111111111111111111111111111111"
SWITCH a
CASE 1
? "FOUND: 1"
ENDSWITCH
?
? "2222222222222222222222222222222"
SWITCH a
CASE 1
? "FOUND: 1"
EXIT
CASE "2"
? a
ENDSWITCH
?
? "3333333333333333333333333333333"
SWITCH a
CASE 1
? "FOUND: 1"
CASE "2"
? "FOUND: 2"
OTHERWISE
? "other"
ENDSWITCH
#ifndef __XHARBOUR__
?
? "44444444444444444444444444444444444"
SWITCH a
OTHERWISE
? "OTHERWISE"
ENDSWITCH
#endif
?
? "55555555555555555555555555555555555"
a := "EE"
#ifndef __XHARBOUR__
SWITCH a
CASE 11
? "11"
EXIT
CASE "CCCC" + "DDDD"
? a + a
EXIT
CASE "a&m_b"
CASE 1 + 1
CASE { 11111111, 22222222222 }[ 1 ]
CASE 1 + 1 + 1
? "3"
EXIT
CASE 1 + 1 * 3
CASE 123 + 12 * 4 - 1 * 4 + 2
CASE 1 - 4
? "4"
EXIT
CASE 123456789
CASE 0
EXIT
CASE "AAAA"
CASE "BBBBB"
? a
EXIT
CASE Chr( 12 ) + Chr( 15 )
? "Chr()"
EXIT
OTHERWISE
? "NOT FOUND: running OTHER"
ENDSWITCH
#endif
?
? "666666666666666666666666666666666666666666"
a := "2"
SWITCH a
CASE 1
? "FOUND: 1"
? a
EXIT
CASE "2"
SWITCH a + a
CASE 1
? "Nested FOUND 1"
EXIT
CASE "22"
? "Nested FOUND: 22"
EXIT
OTHERWISE
? "Nested OTHERWISE"
ENDSWITCH
?? "In CASE 1"
? a
ENDSWITCH
? "========================================="
RETURN
Regards, saludos.
Re: If anidados o DO CASE?
Posted:
Mon Aug 16, 2021 12:43 pm
by goosfancito
Gracias a todos.
He comenzado a prestarle mas atencion a los codigos que hago porque lei en otro foro que "refinar" un source es lo que lleva a que la app funcione mas rapida (parece algo de 1er año de informatica pero no le habia prestado atención hasta ahora) y les doy un ejemplo a lo que voy
Segun lo que lei un codigo de estas caracterisiticas (no lo digo concretamente con este codigo, solo lo escribo para explicarme mejor):
- Code: Select all Expand view
return (x++)
daria mejor performance que esto:
- Code: Select all Expand view
x:= x + 1
return (x)
que les parece?
Re: If anidados o DO CASE?
Posted:
Mon Aug 16, 2021 12:50 pm
by karinha
Esto és más moderno:
- Code: Select all Expand view
LOCAL x := 1
RETURN( x++ )
Más, la velocidad és la misma. Tiene siempre dos modos de hacer la misma cosa.
El que importa, és que el processador de la computadora, sea de primera, un PENTIUM por ejemplo siempre será mejor que un AMD por ejemplo.
Regards, saludos.
Re: If anidados o DO CASE?
Posted:
Mon Aug 16, 2021 12:58 pm
by goosfancito
Bien.
Todo esto pasó, ademas, porque estoy estudiando javascript y el que dicta el tutorial dio una tarea para hacer sensilla y salieron varias soluciones, de las cuales se dieron los pro y contra de las soluciones (todas llegaban a la solución preestablecida). En esas discusiones se ha planteado justamente el "refinamiento" del codigo y me pareció lógico y a la vez muy interesante de indagar: mas en python.
Re: If anidados o DO CASE?
Posted:
Mon Aug 16, 2021 1:39 pm
by Antonio Linares
El equivalente de:
- Code: Select all Expand view
x:= x + 1
return (x)
es:
return ++x // x se incrementa antes de ser devuelta
Re: If anidados o DO CASE?
Posted:
Fri Aug 20, 2021 9:44 am
by goosfancito
he avanzado bastante bien en ordenar el tree, en breve lo publico para que puedan colaborar con el codigo. es rebuscado, uso array pero es la solucion que hasta el momento pude encontrar. la tecnica es ordenar el array luego regenerar el tree.