¿Cuál pedazo de código es más eficiente? (estructura if...else anidada o no)

Iniciado por Aikanáro Anário, 12 Junio 2011, 21:28 PM

0 Miembros y 1 Visitante están viendo este tema.

Aikanáro Anário

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 (javascript) [Seleccionar]
if (cargo == 'gerente' || cargo == 'Gerente' || cargo == 'GERENTE')
{
gp=10000;
}

else
{
if  (cargo == 'secretaria' || cargo == 'Secretaria' || cargo == 'SECRETARIA' || cargo == 'secretario' || cargo == 'Secretario' || cargo == 'SECRETARIO')
{
gp=5000;
}

else
{
if (cargo == 'mensajero' || cargo == 'Mensajero' || cargo == 'MENSAJERO' || cargo == 'mensajera' || cargo == 'Mensajera' || cargo == 'MENSAJERA')
{
gp=2000;
}

else
{
gp=0;
}
}



}


Secuencial
Código (javascript) [Seleccionar]
if (cargo == 'gerente' || cargo == 'Gerente' || cargo == 'GERENTE')
{
gp=10000;
}

if (cargo == 'secretaria' || cargo == 'Secretaria' || cargo == 'SECRETARIA' || cargo == 'secretario' || cargo == 'Secretario' || cargo == 'SECRETARIO')
{
gp=5000;
}

if (cargo == 'mensajero' || cargo == 'Mensajero' || cargo == 'MENSAJERO' || cargo == 'mensajera' || cargo == 'Mensajera' || cargo == 'MENSAJERA')
{
gp=2000;
}

else
{

gp=0;
}


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.
Lo que faltaba en internet: http://binar10s.blogspot.com/

Khronos14

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.

Edu

Y si lo haces asi:

Código (csharp) [Seleccionar]

switch (cargo.ToLowerCase) {

  case "gerente":
    gp = 10000;
      break;

  case "secretaria":
    gp = 5000
      break;

  case "mensajero":
    gp = 2000;
      break;

  default:
    gp = 0;
      break;}


Es mejor aun?

Aikanáro Anário

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
Lo que faltaba en internet: http://binar10s.blogspot.com/

Lunfardo

yo no estaria seguro de la diferencia entre switch y los if anidados, habria que ver el codigo desamblado para ser objetivos

Edu

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?