Page 1 of 1

If anidados o DO CASE?

PostPosted: 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?

PostPosted: 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.html

https://www.itlnet.net/programming/program/Reference/c53g01c/ngfef37.html

Regards, saludos.

Re: If anidados o DO CASE?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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?

PostPosted: 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.