Foros del Web » Programando para Internet » Javascript »

Concatenar asignaciones x*=x*=x*=x

Estas en el tema de Concatenar asignaciones x*=x*=x*=x en el foro de Javascript en Foros del Web. Hola por aquí. ¿Alguien ha utilizado esta estructura alguna vez para hacer una potencia de x? Código PHP: var  x  =  2 ; // 2^5 x ...
  #1 (permalink)  
Antiguo 27/12/2007, 09:14
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Concatenar asignaciones x*=x*=x*=x

Hola por aquí.

¿Alguien ha utilizado esta estructura alguna vez para hacer una potencia de x?
Código PHP:
var 2;
// 2^5
x*=x*=x*=x*=x;
alert(x); 
Lo cierto es que me la acabo de escribir para probar y funciona sin ningún problema, alerta 32.

Bueno, el problema no es ese, que el resultado es predecible. La cosa viene cuando metemos dos variables en ese tipo de sentencia. Me gustaría que probaseis este código:
Código PHP:
// escribir en el documento una ristra (x)html fuera de tiempo de ejecución.
function e(q,sinBR) {
    var 
elDIV document.createElement("DIV");
    if(
q==undefinedq="";
    if(!
sinBRq+="<br/>";
    
elDIV.innerHTML q;
    for(var 
a=0elDIV.childNodes.length>aa++) {
        
document.body.appendChildelDIV.childNodes[a].cloneNode(true) );
    }
}

var 
2;
var 
5;
e("var x = "x);
e("var y = "y);

x*=x*=y*=x*=x;
e("var x = "+" que es 2*2*5*2*2");
e("var y = "+" que es 5*2*2" ); 
Cita:
Iniciado por output
var x = 2
var y = 4
var x = 80 que es 2*2*5*2*2
var y = 20 que es 5*2*2
Esto es un lío . ¿Qué se ejecuta antes y qué después? Si empezamos poco a poco habría que comenzar de derecha a izquierda, porque si lo hacemos al revés nos pasará ésto:
x*=x*=y*=x*=x;
x(=2) lo multiplicamos por x(=2), pero ésta última x no es 2, es 5*2*2. Pero ese 5 no es 5 porque está multiplicado por 2*2..... bueno, un lío.

Lo que yo hago es multiplicar desde el final, dividiendo las sentencias (seguid el código de colores):
x*=x*=y*=x*=x;
He deducido que los valores originales no cambian durante la sentencia. Es decir, x siempre se sustituye por 2 e y siempre se sustituye por 5 (aunque tal vez me equivoque). La más fácil de entender es la y. Cogemos la parte final de la sentencia y tenemos que y*=(x*x) (y = 5*2*2 = 20). Ningún problema aparentemente.
Ahora vamos por la x:
x = x * 2; // vamos x=4
x = x * 5; // vamos x=20
x = x * 2; // vamos x=40

Si lo hemos hecho bien -creo que sí- nos hemos quedado al final con que x=40, y lo que nos imprime es x=80.







La pregunta es: ¿Qué procedimiento sigue el motor de javascript para decirnos que x=80? ¿Como se puede desglosar esa sentencia x*=x*=y*=x*=x en sentencias más simples como he intentado yo?


Cada día me sorprende más este lenguaje
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 27/12/2007, 10:09
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: Concatenar asignaciones x*=x*=x*=x

Yo creo que sigue esta lógica:
Código PHP:
<script>
function 
algo(v1){
    return function(
v2){
        return function(
v3){
            return function(
v4){
                return function(
v5){
                    return(
v1*v2*v3*v4*v5)
                }
            }
        }
    }
}
alert(algo(2)(2)(5)(2)(2))
</script> 
O, lo que es lo mismo:
Código PHP:
<script>
function 
algo(v1){
    return function(
v2){
    
v2=v2*v1
        
return function(v3){
        
v3=v3*v2
            
return function(v4){
            
v4=v4*v3
                
return function(v5){
                    return(
v4*v5)
                }
            }
        }
    }
}
alert(algo(2)(2)(5)(2)(2))
</script> 

Última edición por Panino5001; 27/12/2007 a las 12:05
  #3 (permalink)  
Antiguo 28/12/2007, 09:41
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Concatenar asignaciones x*=x*=x*=x

Sí, es muy posible que siga esa lógica, no me lo había planteado con funciones...

De todas maneras pierdo un poco el rastro de lo que vale cada variable si empezamos a concatenar de esa manera...


Gracias por responder
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 13:25.