Thoughts on Software Reflexiones sobre cómo dearrollar software y no morir en el intento

Algo rápido para leer en 5*60*1000

Me ha quedado un título un poco friki pero a quienes programan en Java y han tenido que tratar alguna vez con unidades de tiempo les sonará. Y es que muchas veces seguimos haciendo las cosas como siempre sin fijarnos si existen ya alternativas que nos puedan ayudar un poco a que nuestro trabajo sea más sencillo. Desde hace tiempo está disponible en el juego de librerías estándar de Java, concretamente desde la versión 1.5, la clase TimeUnit. Esta clase representa intervalos de tiempo con distinta granularidad y provee de métodos de conversión entre diferentes unidades. De esta forma, si queremos crear una constante con el valor de cinco minutos en milisegundos para poder utilizarla en nuestra clase, podríamos hacer:

// traditional
private static final int FIVE_SECONDS_IN_MILLIS_DURATIONa = 1000 * 5;

// with TimeUnit
private static final int FIVE_SECONDS_IN_MILLIS_DURATION = TimeUnit.MILLISECONDS.convert(5, TimeUnit.SECONDS);

Además del método convert, podemos usar métodos propios de cada una de las unidades de tiempo para convertirlas a otra unidad con un código más fácilmente legible:

 private static final int FIVE_SECONDS_IN_MILLIS_DURATION = TimeUnit.SECONDS.toMillis(5);

La segunda características más destacable de TimeUnit es poder para la ejecución del hilo actual de una forma sencilla. Así, frente al uso del método sleep de la clase Thread podemos hacer:

// inexpressive thread sleeping
Thread.sleep(5*60*1000);

// more expresive alternative with TimeUnit
TimeUnit.MINUTES.sleep(5);

Como vemos, TimeUnit no hace nada nuevo que no pudiera hacerse antes. Sencillamente, lo hace de un forma más expresiva que hace que nuestro código transmita mejor su intención (para qué está hecho) al hacerlo más limpio y directo.