If anidados o DO CASE?

Post Reply
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

If anidados o DO CASE?

Post by goosfancito »

Hola.

Code: Select all | Expand

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

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
karinha
Posts: 7932
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: If anidados o DO CASE?

Post 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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
JoseAlvarez
Posts: 810
Joined: Sun Nov 09, 2014 5:01 pm

Re: If anidados o DO CASE?

Post 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...
"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
TecniSoftware
Posts: 236
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Re: If anidados o DO CASE?

Post 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!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
karinha
Posts: 7932
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: If anidados o DO CASE?

Post by karinha »

Code: Select all | Expand


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
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: If anidados o DO CASE?

Post 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

return (x++)


daria mejor performance que esto:

Code: Select all | Expand

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
karinha
Posts: 7932
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: If anidados o DO CASE?

Post by karinha »

Esto és más moderno:

Code: Select all | Expand


   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
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: If anidados o DO CASE?

Post 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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: If anidados o DO CASE?

Post by Antonio Linares »

El equivalente de:

Code: Select all | Expand

x:= x + 1
return (x)

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

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: If anidados o DO CASE?

Post 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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Post Reply