Broma pesada en comentario de Java

En el lenguaje de Programación Java hay un caracter que nos puede jugar malas pasadas, ya que cuando se agrega al código crea un comportamiento inesperado como podemos ejemplificar con un comentario de Java aparentemente inofensivo.

Mentiría si dijera que no me inspiré en este meme para crear este artículo.

Veamos el siguiente código aparentemente normal:

  public static String saluda(String nombre){
    //u000d nombre="tont@";
    String saludo= "Hola " + nombre +  "!";
    return greeting;
  }

Podría pensarse que el nombre pasado como parámetro se debería de imprimir pero no sucede así.

El caracter u00d es de hecho un salto de línea, por lo tanto, tenemos un comentario de Java de una única línea sin ningún contenido, lo cual es perfectamente legal.

Si corres tus programas desde leningen incluso es peor porque acepta perfectamente un programa así:

  public static String saluda(final String nombre){
    //nombre="tont@";
    String saludo= "Hola " + nombre +  "!";
    return saludo;
  }

A pesar de que  le decimos al compilador que al parámetro que lo force a ser una constante, el caracter especial en los comentarios de Java causa la reescritura del valor.

Demostración interactiva del código Java

¿No tienes tu Editor? Sin problema.

Para mostrarlo a aquellos que no puedan o no deseen ir a su IDE favorito y compilarlo, usaremos DEW, el editor en línea interactivo de Dukescript.

Primeramente abriremos el demo hola mundo con KnockoutJS.

Modificaremos el HTML para que en vez de llamar una propiedad llamemos nuestro método.

<h1 data-bind="text: saludar()">Di Algo</h1>

A nuestro método le pondremos la anotación @ComputedProperty para indicar al compilador de Dukescript que usaremos un valor que se genera a partir del valor provisto con el mismo nombre que ya existe en el modelo de datos.

Nuestra clase quedará así:

package dew.demo.ko4j;
import net.java.html.json.*;

@Model(className="Hello", properties={
  @Property(name="nombre", type=String.class)
})
class HelloViaKO {
  
  @ComputedProperty
  public static String saludar(String nombre){
    //u000d nombre="tont@";
    String saludo= "¡Hola " + nombre +  "!";
    return saludo;
  }
  
  static {
    Hello model = new Hello("World");
    model.applyBindings();
  }
}

Espero te haya gustado este pequeño truco, ya sea que quieras ocultar parte de tu código de los novatos o jugarle alguna mala pasada a alguno de tus colegas.


  • Cursos de Código Facilito

    Te comparto aquí mis recomendaciones de cursos de Código Facilito. Codigofacilito.com es una plataforma virtual de cursos en idioma exclusivamente español que inició como un canal de YouTube. Opinión de la plataforma En mi opinión la plataforma aún es incipiente y los cursos necesitan más trabajo, ya que es muy común hallarse con clases de…


  • Cursos de LinkedIn Learning

    Te comparto aquí mis recomendaciones de cursos de Linkedin Learning. LinkedIn Learning es una plataforma virtual de cursos propiedad de Microsoft. Hallarás mucho material en inglés, pues prácticamente todos los cursos vienen con subtítulos en castellano y en la parte técnica son muy buenos debido a la adquisición de Lynda.com. En mi opinión la plataforma…


  • Mockito: Snippets de código

    Estos snippets de código para entrevista acerca de mockito espero te sean de mucha utilidad. Claro que también los puedes usar para tu desarrollo en el día a día. Mock básico Si te llegan a mostrar algo como esto es mejor que sospeches, mockito se usa principalmente para pruebas de integración. Si llegas a ver…


javapro.org