JavaScript sigue impresionandome (recuerdo los días en que lo negaba como lenguaje, diciendo que era para programadores que no entendían de teoría de POO. Mi pasado me condena).
Se me ocurrío escribir sobre las características del lenguaje mediante test de códigos. La idea es poner un ejemplo de código y esperar respuestas (mediante comentarios), colocando la respuesta una o dos semanas despues, así también podre saber si hay personas que leen el blog periodicamente.
Pues bien, la pregunta es:
Cual es la forma más breve (sintáxticamente) de escribir el siguiente código en JavaScript?
if (x != undefined && x.validate()) {
return "x es valido";
} else {
return "x no es valido";
}
Definiciones:
- La pregunta se refiere a la forma más breve de escribir el código sintácticamente, no en ciclos de CPU (que hoy en día no son un problema).
- La respuesta la pueden dejar en comentarios del post o enviarla por mail a info arroba continuum punto cl.
- La respuesta en 15 días.
- Updated (2009-02-17). Se asume que x está definido previamente ! por tanto descartado el dar un ReferenceError.






8 Comentarios
February 17th, 2009 at 1:43 pm
Me parece que la forma más corta sería algo como la siguiente línea:
return “x” + ((x != undefined && x.validate())? ” ” : ” no ” ) + “es valido”;
Eso
Salu2
February 17th, 2009 at 1:56 pm
Hola German, cuanto tiempo !!!, oye tibio tibio, esa es una forma valida usando el operador ternario ‘?:’ !, pero hay una aun más breve !!!.
Un saludo !.
February 17th, 2009 at 2:19 pm
Bueno, para empezar ese codigo sintacticamente está bien pero es propenso a dar error ya que si x es undefined, se caeria al comprovar el método validate.
Acá les dejo mi ejemplo un tanto mas elaborado, aunque no se me ocurre otra forma de acortar mas la validacion xD.
function miClase(){
this.value = 0;
}
miClase.prototype.validate = function(){
return(this.value > 0);
}
function foo(){
//Esta linea sería la forma mas breve de reprensentar el codigo sintácticamente.
return((“x”+((x instanceof miClase ? x.validate() : false)? “” : ” no”))+” es valido”);
}
var x = new miClase();
alert(foo()); // x no es valido
x.value = 1;
alert(foo()); //x es valido
x = null;
alert(foo()); //x no es valido
February 17th, 2009 at 2:36 pm
Hola Rockerox,
El código no se cae, pues el operador && nunca evalua la segunda expresión si la primera es false, por tanto en caso de x === undefined la lógica retorna “x no es valido”.
February 17th, 2009 at 2:56 pm
Teni razon, se me habia olvidado ese detalle.
Al utilizar el operador AND evalua si la primera es falsa entonces la expresion completa es falsa.
Pero si “x” es cualquier wea excepto “undefined”, ahi se cae po. Bueno, me fuí para otro lado jejeje.
como podré hacerlo mas corto…. piensa piensa ….
February 17th, 2009 at 3:04 pm
Ok rockerox, voy a actualizar el post colocando entre las definiciones que se asume que x existe previamente para el interprete JavaScript !.
La respuesta es super interesante (usando algunas características de JS).
Ya alguien me envio la respueta correcta pero al mail
December 16th, 2009 at 9:17 am
y la respuesta??
jaja que larga las dos semanas
Saludos!
December 17th, 2009 at 8:05 am
Aquí: http://blog.continuum.cl/archives/94 está la respuesta exactamente 2 semanas después (no fue tan largo)
Saludos.
Deja tu Comentario