java code
java code with a meaningless condition

Encontré esta pieza de código Java, sólo es un condicional:

if (banda.getField55().containsKey(“5F34”)
&& (!(banda.getElementValue(“5F34”).equals(“4E50”) && BcdLib
.hexStr_ascii(banda.getElementValue(“5F34”))
.equalsIgnoreCase(“NP”)))) {

En la primera parte de la condición se evalúa si algún campo contiene un valor (una clave). Creo que está bien, porque esta primera parte impide que el acceso a la “clave” en la segunda parte de la condición genere una excepción de null pointer típica de Java, esto es para evitar que el acceso a un campo inexistente genere un error.

Vamos a deshacernos de la primera parte y quedarnos sólo con la segunda parte de la condicion:

(!(banda.getElementValue(“5F34”).equals(“4E50”) &&
BcdLib.hexStr_ascii(banda.getElementValue(“5F34”)).equalsIgnoreCase(“NP”)))

Creo que siempre devuelve true por lo que esta parte de la condición es inútil. Lo peor es que introduce confusion al código porque el lector cree que este código hace algo realmente útil. Esta parte de la condición es una negación, por lo que si siempre devuelve true, la parte interior siempre debe devolver false, vamos a ver si eso ocurre:

banda.getElementValue(“5F34”).equals(“4E50”) &&
BcdLib.hexStr_ascii(banda.getElementValue(“5F34”)).equalsIgnoreCase(“NP”)

Para que esta parte de dos condiciones sea verdad, ambas condiciones deben ser verdaderas (es una “y” condicional). Pero aquí están evaluando si un solo valor es igual a dos valores diferentes al mismo tiempo, tal condición no puede suceder nunca, por lo que esta parte de la frase siempre devuelve false. Esto demuestra el punto de que esta parte de la condición carece de sentido.

Esto me lleva a pensar que el desarrollador original no tenía mucha idea de las reglas que él estaba tratando de escribir en su código. O puede ser que esto es un error en la condición que debe ser un “o” en lugar de una “y”? No hay manera de saber la respuesta al día de hoy.

Hay otros problemas sutiles en el código: ¿Por qué un acceso a la clave a través de getField55, en primer lugar, a continuación, acceder a la misma clave a través del objeto banda directamente? Además, están utilizando estos valores mágicas hexadecimales como 5F34, 4E50 y ese string NP, ¿Cuál es el significado de esos valores? Bueno, esto es sólo una pequeña parte de un sistema hecho de código espagueti, así que no me sorprendió encontrar este tipo de cosas, puede ser que empiece a escribir sobre esos trozos de malos códigos o errores …

Advertisements