A veces la lógica sobre la que se asienta un lenguaje de programación (cosa “estricta” –con comillas- si las hay) tiene algún extraño efecto colateral. Otras veces un mal momento (¿demasiado temprano por la mañana? ¿demasiado tarde por la noche? ¿resaca?) de aquél que debe dar una definición queda inmortalizado por las consecuencias de ésta.
Cuestión que en todo lenguaje hay ciertas curiosidades, puntos oscuros, cosas que no parecen todo lo claras, lógicas o esperables que deberían. Es el tipo de cosas que se han ido destapando en Stack Overflow bajo el título Strangest language feature con la consigna “What is, in your opinion, the most surprising, weird, strange or really "WTF" language feature you have encountered?”
Por ejemplo…
Javascript se lleva las palmas en la categoría "sutilezas tramposas":
return { id : 1234, title : 'Tony the Pony' }; //devuelve undefined, ya que el salto de línea luego del return implica //(implícitamente) el final de la instrucción. Por eso esto sí funciona: return { id : 1234, title : 'Tony the Pony' }; //Y esto también (grrr....) return /* */{ id : 1234, title : 'Tony the Pony' };
...su tabla de verdad tiene algunas cositas impresentables:
'' == '0' //false 0 == '' //true 0 == '0' //true false == 'false' //false false == '0' //true false == undefined //false false == null //false null == undefined //true " \t\r\n" == 0 //true
Por otro lado, el integer cache en java es un buen ejemplo de esos extraños aunque esperables efectos colaterales:
Integer foo = 1000; Integer bar = 1000; foo <= bar; // true foo >= bar; // true foo == bar; // false //pero si los valores de foo y bar están entre 127 y -128 (inclusive) //el comportamiento cambia: Integer foo = 42; Integer bar = 42; foo <= bar; // true foo >= bar; // true foo == bar; // true
Y no es la primera vez que escucho quejas (muy justificadas, según mi propio criterio) sobre el manejo de cadenas en php:
//uno pensaría que "01a4" != "001a4" //pero la realidad es que "01e4" == "001e4"
Captaron la idea, me imagino. El resto en la entrada original de Stack Overflow.
No hay comentarios.:
Publicar un comentario