Escribir menos código y más legible

Claro que hay muchas cosas para hacer cuando hablamos de escribir código más legible en Java. Lo que vamos a ver a continuación es cómo utilizar la biblioteca Lombok para escribir menos código. Y como resultado tener un código fuente más legible.

Lombok

Es una biblioteca extensa y no vamos a cubrir todas sus características en este artículo. Vamos a hacer un recorrido en el que, yo creo, es el orden de utilidad. Empezando por aquellas que más frecuentemente usaremos en un proyecto típicamente. Y ya que hablamos de opiniones personales. Vale remarcar que las bibliotecas que generan código, como lo hace Lombok, suelen ser criticadas justamente por utilizar ese mecanismo de funcionamiento. En lo personal no soy amante del código generado. Pero como Lombok no genera el código en su formato de texto sino que agrega Java bytecode mientras se construyen los binarios, no tenemos el típico problema: decidir si el código generado tiene que ser agregado al control de versiones o no. Y la mayoría de los casos para los que Lombok ofrece una solución son los que requieren código repetitivo (boilerplate code). Código que no se ve afectado por cambios de las reglas del negocio y que escribirlo no tiene ningún valor para el desarrollador. Y que, de ser necesario, igual podremos escribir para los casos que sí lo requieran sin dejar de aprovechar Lombok para el resto. Y el sistema de uso además es poco invasivo ya que para utilizarla sólo es necesario agregar una annotation.

lombok

Al utilizar Lombok el desarrollador puede dedicarse a escribir el código que construirá las reglas de negocio sin perder tiempo en formalismos.

Continue reading Escribir menos código y más legible

Cómo y cuándo usar lambdas en Java

El soporte de expresiones Lambda apareció en Java 1.8 en Marzo de 2014. Sin embargo aún hoy muchos desarrolladores no las utilizan o sólo lo hacen como clientes de código que las acepta. Pero no escriben código que las reciba.

Una expresión lambda (lambda expression) es una función anónima. Es decir que es un bloque de código que puede recibir parámetros y devolver un valor. Pero no tiene nombre, por lo que no puede declararse y luego llamarse desde alguna parte del código. Para utilizarlas, en cambio, tenemos que definir la expresión lambda e inmediatamente pasarla al código que la utilizará.

Normalmente lo hacemos pasando la expresión como un argumento más de un método que la ejecutará oportunamente pasándole los valores correspondientes y tomando el resultado (si es que tiene un valor de retorno). No es imposible definir una expresión lambda y guardar la referencia en una variable. Pero ese y otros detalles los vamos a dejar para el final para enfocarnos en la forma de uso recomendada.

Continue reading Cómo y cuándo usar lambdas en Java

Problema de redondeo con float en Golang

Mientras escribía el artículo sobre FunnyStrings necesité usar la función de valor absoluto de Go y me crucé nuevamente con el viejo y conocido problema de redondeo de la aritmética de punto flotante en computadoras.

Para resolver el problema mencionado necesitaba comparar los valores absolutos de diferencias entre caracteres. Para esto usé la función math.Abs() de la biblioteca estándar. Y sólo hay una versión que recibe float64 como tipo de entrada. Así que tuve que convertir las diferencias que tenía en ese tipo de punto flotante para utilizarla en una comparación. En ese caso pude hacerlo sin preocuparme demasiado porque estaba convirtiendo un integer en float sólo para obtener el valor absoluto. Sin hacer ningún tipo de cálculo con esos valores. Pero es cierto que no es una buena idea comparar valores de punto flotante. Porque si se trata de un valor calculado puede acumular errores de redondeo importantes.

Estos errores no son nada nuevo ni mucho menos exclusivos de Go. Se desprenden del estándar IEEE 754-1985 (o la revisión 2008) que es utilizado para la representación de números reales en las computadoras. Y que por limitaciones intrínsecas del formato introducen errores de redondeo que pueden ser muy significativos al acumularse o en sustracciones de números muy aproximados entre sí.

Continue reading Problema de redondeo con float en Golang

Disparar cámara Canon con Arduino por Infrarrojo

Esta es una nota de aplicación relacionada con varios artículos del blog en los cuales traté el tema de control remoto con LEDs infrarrojos. Por ser sólo una nota de aplicación no se presentan detalles de la teoría de funcionamiento. En cambio hay enlaces a las notas que proveen el conocimiento necesario para realizar el experimento.

Algunos modelos de cámaras Canon tiene la capacidad de ser disparadas en forma remota de dos maneras. Utilizando un cable con un switch conectado a la cámara. O con un control remoto infrarrojo. En este video se puede ver el experimento funcionando donde, al pasar la mano por delante del fotoresistor, el Arduino envía la señal infrarroja adecuada para que la cámara tome una fotografía.

Continue reading Disparar cámara Canon con Arduino por Infrarrojo