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'
- };
- '' == '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
- 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
- //uno pensaría que
- "01a4" != "001a4"
- //pero la realidad es que
- "01e4" == "001e4"
No hay comentarios:
Publicar un comentario