If anidados o DO CASE?

If anidados o DO CASE?

Postby goosfancito » Sat Aug 14, 2021 9:14 am

Hola.

Code: Select all  Expand view  RUN
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  RUN
do case
   case a == b:
     // operaciones
...
 

Cuál es el mejor código en todos los aspecto referidos a la codificacion?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: If anidados o DO CASE?

Postby karinha » Sat Aug 14, 2021 1:33 pm

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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: If anidados o DO CASE?

Postby JoseAlvarez » Sat Aug 14, 2021 3:19 pm

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...
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 805
Joined: Sun Nov 09, 2014 5:01 pm

Re: If anidados o DO CASE?

Postby TecniSoftware » Sat Aug 14, 2021 3:29 pm

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!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Re: If anidados o DO CASE?

Postby karinha » Sun Aug 15, 2021 1:11 pm

Code: Select all  Expand view  RUN

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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: If anidados o DO CASE?

Postby goosfancito » Mon Aug 16, 2021 12:43 pm

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  RUN
return (x++)


daria mejor performance que esto:

Code: Select all  Expand view  RUN
x:= x + 1
return (x)


que les parece?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: If anidados o DO CASE?

Postby karinha » Mon Aug 16, 2021 12:50 pm

Esto és más moderno:

Code: Select all  Expand view  RUN

   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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7872
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: If anidados o DO CASE?

Postby goosfancito » Mon Aug 16, 2021 12:58 pm

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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: If anidados o DO CASE?

Postby Antonio Linares » Mon Aug 16, 2021 1:39 pm

El equivalente de:
Code: Select all  Expand view  RUN
x:= x + 1
return (x)

es:
return ++x // x se incrementa antes de ser devuelta
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: If anidados o DO CASE?

Postby goosfancito » Fri Aug 20, 2021 9:44 am

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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 41 guests