Foros del Web » Programando para Internet » Javascript »

Uso de llaves en estructuras de control

Estas en el tema de Uso de llaves en estructuras de control en el foro de Javascript en Foros del Web. Que tal gentes! ¿Qué diferencia de rendimiento o uso de recursos podría haber entre estas dos estructuras de control (una con llaves y la otra ...
  #1 (permalink)  
Antiguo 30/04/2006, 12:32
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
Uso de llaves en estructuras de control

Que tal gentes!

¿Qué diferencia de rendimiento o uso de recursos podría haber entre estas dos estructuras de control (una con llaves y la otra sin llaves)?

Código:
lista = ['texto', 'texto', 'texto', 'texto', 'texto'];
for(var i in lista){
     alert(lista[i]);
} 
Código:
lista = ['texto', 'texto', 'texto', 'texto', 'texto'];
for(var i in lista)
    alert(lista[i]);
__________________
El conocimiento es libre: Movimiento por la Devolución
  #2 (permalink)  
Antiguo 30/04/2006, 12:42
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
No hay ninguna diferencia!! como la va a haber, que haya llaves o no no implica ninguna mejora o deficiencia en el rendimiento de la funcion, esta funcion tiene un coste lineal!! por que con llaves o sin llaves recorres todo el vector. Da igual como lo mires el coste el lineal en ambos casos.
Teoria de Costes de Algoritmos de programacion!!
Por que lo preguntas!! es k te da algun problema, por que no deveria, es un for con una sola linea, da igual ponerlo con llaves o sin!!
__________________
SaRvErOk :ojotes:
  #3 (permalink)  
Antiguo 30/04/2006, 22:52
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 4 meses
Puntos: 13
En alguna oportunidad algo leí sobre la omisión de las llaves y el rendimiento. no le presté mayor atención, pero me quedé con la duda y no recuerdo dónde fue que lo leí.

De todas maneras pienso que algún efecto debe tener, no creo que sea por algo estético. Por algo esta omisión sólo se permite cuando en cada ciclo se ejecuta una sola acción.
__________________
El conocimiento es libre: Movimiento por la Devolución
  #4 (permalink)  
Antiguo 01/05/2006, 01:28
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Me acuerdo que en viejas versiones de pascal (tal vez turbo pascal) también leí que al poner llaves sin necesidad o el punto y como detrás de la última línea de un bloque de código (en ese lenguaje no es obligado), el compilador interpretaba ese tipo de cosas innecesarias como una instrucción nop de ensamblador (nop = no operación)... y una instrucción nop es la que menos tiempo tardan en ejecutarse.

Al ser javascript un lenguaje interpretado es posible que también se genere esa instrucción ensamblador... de ser así no me preocuparía en agrupar código en llaves, ya que el si hubiera alguna diferencia sería inapreciable.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 01/05/2006, 04:39
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
Es cierto, Caricatos tiene razon. Pero vamos a ver, que diferencia hay entre un for con llaves y un for sin llaves, pues ninguna, el parser, que analiza la estructura del lenguaje va formando arboles con lo que se va encontrando, si el programador que diseña el lenguaje de programacion dice: "bueno para agrupar un conjunto de sentencias dentro de un bucle hay que abrir y cerrar llaves, entre las sentencias, y si solo hay una sentencia se pueden abrir o cerrar llaves o no introducirlas", el arbol que se forma al leer el codigo es minimamente diferente, y el rendimiento es inapreciable, sea lo que sea lo que haya dentro del for, sea lo que sea lo que haga esa instruccion.
Donde si hay una diferencia del rendimiento es si utilizas un for en lugar de un while o viceversa, por ejemplo, si se quiere utilizar un for tipo C++ y se van a rellenar todos los campos, es decir:
for(int i=0;i< 20;i++), esto es mas eficiente que hacerlo asi:
int i=0;
while(i<20){
...
i++;
}
y tmb esto (en este caso utilizar un for es mas ineficiente que un while):
for ( ;i<20; ){
if(...)
i++;
else if( ...)
i++;
else
cout < "Nada de nada";
}
ahora con while:
while(i<20){
if(...)
i++;
else if( ...)
i++;
else
cout < "Nada de nada";
}
es mas ineficiente por que en el ultimo ejemplo el for tiene campos vacios, y empeora el rendimiento, en el caso anterior el while empeoraba el rendimento respecto al for, por que el for lo hace todo en una sola linea, mientras que el while necesitava 2 mas.
Vamos esto es lo que yo tengo entendido respecto al rendimiento de los algoritmos, el utilizar llaves o no, no implica un empeoramiento perceptible!!
__________________
SaRvErOk :ojotes:
  #6 (permalink)  
Antiguo 01/05/2006, 12:44
hgb
 
Fecha de Ingreso: noviembre-2002
Mensajes: 31
Antigüedad: 21 años, 5 meses
Puntos: 0
Estan mal ¬¬...

Lo único que se hace al final es ejecutar una secuencia de instruccines y salta a otra, no importa la sintaxis que se use... un buen compilador podría encontrar las similaridades de tus ciclos, incluso para un compilador un while y un for pueden ser "iguales"... la optimización es algo que va más allá de la sintáxis del lenguage... hay optimización global y local.

El argumento

Cita:
es mas ineficiente por que en el ultimo ejemplo el for tiene campos vacios, y empeora el rendimiento, en el caso anterior el while empeoraba el rendimento respecto al for, por que el for lo hace todo en una sola linea, mientras que el while necesitava 2 mas.
Es erroneo, talvez lo hagas en una sola línea la sintáxis te lo dicta así, pero el punto es que el ordenador, CPU, procesador tiene definido un juego de instrucciones y esas operaciones que tu llamas una sola línea en realidad son 3, 2, 1 o más instrucciones generadas y ejecutadas posteriormente.

un
Cita:
for(i=0; i< x; i++){...}
es lo mismo que
Cita:
i=0;
while(i<x){
....
i++; // ++i; // i = i+1;
}

O acaso me van a decir que por poner... algo como

Cita:
i=n;
superLargoCalculo(i);
Ya que consta solo de 2 líneas se va a ejecutar en menos tiempo¿?¿? ;).

Cita:
for(int i=0;i< 20;i++), esto es mas eficiente que hacerlo asi:
int i=0;
while(i<20){
...
i++;
}
Creo que dependera de lo "inteligente" que sea tu compilador para notar la similitud que nosotros sabemos que existe ;)... en este caso de los diferentes interpretes de js.

El argumento de los campos vacios depende... siendo interpretado, pues la primera vez se checa si hay campos vacios y si es así, sabemos que lo escrito no va a cambiar, entonces que caso tendría checar cada vez que se ejecuta el ciclo si hay campos vacios????? nada más importará la primera vez... escepto que el diseñador del interprete crea que se necesita checar el contenido de campos vacios cada vez :).


Bueno, por último, hay tantos interpretes de js como navegadores supongo... y eso hace difícil decir que es más eficiente, puesto que no todos son desarrollados de la misma forma.



Sin duda yo dudo mucho que llaves o no llaves afecte mucho la ejecución de el programa.
  #7 (permalink)  
Antiguo 02/05/2006, 08:07
Avatar de programeitor  
Fecha de Ingreso: febrero-2005
Mensajes: 994
Antigüedad: 19 años, 2 meses
Puntos: 9
Hola, yo creo que el uso de las llaves ya sea en bucles de una sola instruccion o de varias ,es mejor, ya que ahorra al interprete el tener que averiguarlo, .lo mismo para el punto y coma.

En general si a un interprete se lo das todo "mascado" se le hace mas facil el trabajo de interpretacion, aunque en ultima instancia ésto se averigua haciendo pruebas.

salud.os
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:56.