Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Aikanáro Anário en 12 Junio 2011, 21:28 pm



Título: ¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)
Publicado por: Aikanáro Anário en 12 Junio 2011, 21:28 pm
A veces tenemos la posibilidad de elegir entre decisiones anidadas o independientes, esto siempre y cuando el programa tenga los mismos resultados estructurandolas de una forma u otra... Entonces ¿Cuál es más eficiente? ¿Cuál gasta menos recursos, se ejecuta más rápido?

Yo, por lógica xD, pienso que las anidadas deberían de ser más eficientes, porque si la condición que se está evaluando está al principio del "nido", pues ya no se tendrán que ejecutar las otras; sin embargo si no son anidadas, aunque la condición que se cumpla esté al principio o al final, se tendrán que evaluar todas las condiciones o estructuras if...else. Pero en el libro de "La escencia de la lógica" de Omar Trejos, en el capítulo 7 dice que un programa con más estructuras if...else, es más eficiente que otro que tenga menos... y eso contrario a mi razonamiento, aunque por lo que dice antes, creo se equivocó.

Lo cito textualmente: " Es importante anotar que tomar una decisión, por simple que ésta sea, le toma mucho tiempo al computador realizarla ya que aunque para nosotros es muy sencillo determinar si 9 es mayor que 5 para el computador no lo es pues debe realizar algunas operaciones para obtener la respuesta correcta.

"De esta manera es útil saber que es mas eficiente un programa que tenga mas decisiones que otro
que tenga menos toda vez que ambos busquen lograr el mismo objetivo.
"


Como ejemplo tengo este código en javascript:

[b}Anidada[/b]
Código
  1. if (cargo == 'gerente' || cargo == 'Gerente' || cargo == 'GERENTE')
  2. {
  3. gp=10000;
  4. }
  5.  
  6. else
  7. {
  8. if  (cargo == 'secretaria' || cargo == 'Secretaria' || cargo == 'SECRETARIA' || cargo == 'secretario' || cargo == 'Secretario' || cargo == 'SECRETARIO')
  9. {
  10. gp=5000;
  11. }
  12.  
  13. else
  14. {
  15. if (cargo == 'mensajero' || cargo == 'Mensajero' || cargo == 'MENSAJERO' || cargo == 'mensajera' || cargo == 'Mensajera' || cargo == 'MENSAJERA')
  16. {
  17. gp=2000;
  18. }
  19.  
  20. else
  21. {
  22. gp=0;
  23. }
  24. }
  25.  
  26.  
  27.  
  28. }

Secuencial
Código
  1. if (cargo == 'gerente' || cargo == 'Gerente' || cargo == 'GERENTE')
  2. {
  3. gp=10000;
  4. }
  5.  
  6. if (cargo == 'secretaria' || cargo == 'Secretaria' || cargo == 'SECRETARIA' || cargo == 'secretario' || cargo == 'Secretario' || cargo == 'SECRETARIO')
  7. {
  8. gp=5000;
  9. }
  10.  
  11. if (cargo == 'mensajero' || cargo == 'Mensajero' || cargo == 'MENSAJERO' || cargo == 'mensajera' || cargo == 'Mensajera' || cargo == 'MENSAJERA')
  12. {
  13. gp=2000;
  14. }
  15.  
  16. else
  17. {
  18.  
  19. gp=0;
  20. }
  21.  

Y bueno también quedaría pendiente por analizar la estructura de casos...

Ya se que en casos pequeños como ese no se nota la diferencia, pero creo que es bueno crearse los buenos hábitos de programación desde que se pueda. Y tal vez si puede afectar notablemente más adelante.


Título: Re: ¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)
Publicado por: Khronos14 en 12 Junio 2011, 22:05 pm
Si, la condición anidada es mejor. Pero yo haría otra cosa antes de hacer la condición: convierte la cadena a minúsculas o mayúsculas y así te ahorras muchas condiciones.

Saludos.


Título: Re: ¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)
Publicado por: Edu en 12 Junio 2011, 22:25 pm
Y si lo haces asi:

Código
  1. switch (cargo.ToLowerCase) {
  2.  
  3.  case "gerente":
  4.    gp = 10000;
  5.      break;
  6.  
  7.  case "secretaria":
  8.    gp = 5000
  9.      break;
  10.  
  11.  case "mensajero":
  12.    gp = 2000;
  13.      break;
  14.  
  15.  default:
  16.    gp = 0;
  17.      break;}
  18.  

Es mejor aun?


Título: Re: ¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)
Publicado por: Aikanáro Anário en 13 Junio 2011, 00:06 am
Entonces Omar se equivocó  :P

xxx-zeroxxx Claro así se ve mucho más limpio el código, pero no conocía lo de "ToLowerCase". Soy principiante :P


Título: Re: ¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)
Publicado por: Lunfardo en 13 Junio 2011, 00:14 am
yo no estaria seguro de la diferencia entre switch y los if anidados, habria que ver el codigo desamblado para ser objetivos


Título: Re: ¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)
Publicado por: Edu en 13 Junio 2011, 01:32 am
Yo tambien soy principiante, y el codigo ese lo escribi por aca, no se si esta bien escrito lowercase.

El switch funcionara de la misma forma que if else anidada solo que se usa para que puedas organizarte mejor?