Ok, lo prometido es deuda, aquí esta la respuesta correcta a Cual es la forma más breve [1] (Fue enviada por Leo Soto a info arroba continuum punto cl)
return x && x.validate() && “x es valido” || “x no es valido”
Justificación:
JavaScript retorna siempre la última evaluación de una expresión que sea verdadera, por ejemplo “return x” retorna la referencia del objeto “x” si es que “x” apunta a algún lado, de lo contrario retorna false. (Observación: “x” debe haber sido declarada anteriormente, de lo contrario debe usarse “typeof x” que retorna false si x no existe (es null) ).
Por otro lado, si cualquier variable o retorno de método es diferente de 0, undefined o null en una expresión condicional esta es evaluada como verdadero (true).
De ahi que si x no es undefined y además x.validate() es verdadero y “x es valido” (evalua en un objeto String literal), se retorne “x es valido”, pues fue la última expresión verdadera. Si lo anterior resultara en false, entonces el circuito evalua lo que hay despues del OR ( “||” ), que en este caso es “x no es valido” (que de nuevo es un objeto String en notación literal) y como no es null o undefined entonces es verdadero y se retorna el objeto.
Genial no?, al principio parece desconcertante pero al comenzar a escribir código aprovechando características como esta se reduce mucho la cantidad de lineas y el código luce más limpio y fácil de mantener.
Incluso puede hacerse más fácil de leer colocando parentesis para separar el circuito:
return (x && x.validate() && “x es valido”) || “x no es valido”


3 Comentarios
March 17th, 2009 at 2:28 pm
que frikis jajaja
no … en serio está bien que se planteen estos temas en una empresa. De esa forma probablemente haréis software del bueno. Aunque, eso de echar birras y dar un seminario, es ya pasarse. Personalmente cuando tomo cerveza prefiero desconectar y hacer un beers&cheats mejor.
Un saludo,
Juan
March 17th, 2009 at 3:07 pm
Hola Juan,
Nunca llegamos a estado de embriaguez, y no es mandatorio beber, el equipo la pasa bien y hasta ahora ha resultado un éxito, se han tomado deciciones y definiciones interesantes, así es que definitivamente “L&B” fue una gran idea.
Otro saludo !.
March 20th, 2009 at 12:44 pm
Sé que lo que voy a poner a continuación no es apropiado que sea un comentario aquí, pero … vamos a intentarlo.
El caso es que tengo que hacer un API de servicios web para acceder a modelos Django y me gustaría hacerlo usando la biblioteca ZSI de Python. Lo he intentado pero no soy capaz de hacerlo funcionar como quisiera. ¿Habéis trabajado con esta biblioteca de servicios web?. ¿Qué alternativas tengo, si es que tengo alguna?
Muchas gracias y comprendo que esta consulta no es apropiada aquí, pero sé que vosotros trabajais mucho con web services y a lo mejor me podés ayudar un poquitín.
Un saludo cordial,
Juan
Deja tu Comentario