FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour If anidados o DO CASE?
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
If anidados o DO CASE?
Posted: Sat Aug 14, 2021 09:14 AM
Hola.

Code (fw): Select all Collapse
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 (fw): Select all Collapse
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/
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: If anidados o DO CASE?
Posted: Sat Aug 14, 2021 01: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
Posts: 851
Joined: Sun Nov 09, 2014 05:01 PM
Re: If anidados o DO CASE?
Posted: Sat Aug 14, 2021 03: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.
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: If anidados o DO CASE?
Posted: Sat Aug 14, 2021 03: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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: If anidados o DO CASE?
Posted: Sun Aug 15, 2021 01:11 PM
Code (fw): Select all Collapse
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
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: If anidados o DO CASE?
Posted: 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 (fw): Select all Collapse
return (x++)


daria mejor performance que esto:

Code (fw): Select all Collapse
x:= x + 1
return (x)


que les parece?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: If anidados o DO CASE?
Posted: Mon Aug 16, 2021 12:50 PM
Esto és más moderno:

Code (fw): Select all Collapse
   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
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: If anidados o DO CASE?
Posted: 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/
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: If anidados o DO CASE?
Posted: Mon Aug 16, 2021 01:39 PM
El equivalente de:
Code (fw): Select all Collapse
x:= x + 1
return (x)

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

Antonio Linares
www.fivetechsoft.com
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: If anidados o DO CASE?
Posted: Fri Aug 20, 2021 09: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/

Continue the discussion