Apuntes

Comentarios en el código

Los comentarios no tienen que explicar lo que hace el código, tienen que aclarar el porqué se ha escrito así ese código.

Con un código limpio, con nombres de clases, variables etc… claros y concisos, esto hace que el código esté auto-documentado. No hay necesidad de añadir comentarios. Si el código es complejo, reescribe lo, no lo comentes.

Los comentarios quedan obsoletos con el tiempo, cuidado que pueden ser un arma de doble filo.

Para legacy code, es más interesante comentar lo que hemos averiguado sobre su funcionamiento antes de refactorizarlo. Si estás trabajando sobre una parte de código que sigue en funcionamiento, es interesante poner algún comentario que indique que estamos refactorizando esa parte de código.

También puede ser interesante comentar algunos requisitos no funcionales para quien pueda verlo entienda las limitaciones del sistema, por ejemplo el orden de algunas lineas que es necesario para cierto funcionamiento, limitaciones en alguna función que pueda hacer que se llene el disco si se ejecuta, etc…

Fuente: Podcast Ni cero, ni uno

Refactoring

«Modificar el código para que cambie la forma que esta codificado sin que cambie su comportamiento. Mantenga la misma funcionalidad y que su implementación sea la diferente». Martin Fowler.

Lo recomendable es hacer refactor 30 minutos cada día al empezar la jornada. Mirar los nombres de las variables, métodos o clases que nombraste ayer es muy interesante. Buscamos código que tenemos que tocar por que tenga bugs o cualquier otra cuestión y vamos a aprovechar para refactorizarlo.

Si ha una parte que funciona, algo que se está utilizando hace años y no ha dado ningún problema, no lo toques.

Prestar atención a los puntos de ejecución comunes, condicionales, mutación de estados o dependencias, estos puntos son propensos que haya errores al refactorizar. Hay que tener tests antes de refactorizar.

Hacer los cambios uno a uno, ser metódico en esto y cada cambio que hagas, hacer un commit para guardar puntos de restauración seguros.

En legacy code apoyarse en pair programming para obtener un resultado mucho mejor.

Extraer alguna funcionalidad en métodos más pequeños que hagan una sola cosa nos ayudará a entender mejor y poder mantener mejor en el futuro nuestro código.

Fuente: Podcast Ni cero, ni uno

Stack tecnológico

¿Que es un stack tecnológico?

Es un conjunto de servicios de software que se utilizan para el desarrollo de aplicaciones. Normalmente, un Stack está formada por lenguajes de programación, Frameworks, bibliotecas, herramientas de desarrollo y enfoques de programación.

Un stack tecnológico determina el tipo de aplicaciones que puede construir, el nivel de personalizaciones que puede realizar y los recursos que necesita para desarrollar su aplicación.

Por ejemplo, un stack de web suele tener el siguiente aspecto:

Fuente: Sintonize.com

Mock y Stub, pincelada de prueba unitaria

Viendo las dos primeras partes TDD Kata Markdown de Lean Mind me surgen dudas de conceptos que aún desconozco y buscando información, he decidido hacer un pequeño resumen de los conceptos y citar la fuente con el texto completo con ejemplos para una mejor comprensión.

Los Mocks, “son objetos preprogramados con expectativas que conforman la especificación de lo que se espera que reciban las llamadas”, es decir, son objetos que se usan para probar que se realizan correctamente llamadas a otros métodos, por ejemplo, a una web API, por lo que se utilizan para verificar el comportamiento de los objetos.

Los Stubs, “proporcionan respuestas predefinidas a ciertas llamadas durante los test, sin responder a otra cosa para la que no hayan sido programados”, es decir, los stubs son configurados para que devuelvan valores que se ajusten a lo que la prueba unitaria quiere probar, por lo que se utilizan para verificar el estado de los objetos.

Fuente: Blog de ITBLOGSOGETI

Enlace al Blog https://itblogsogeti.com/2015/03/26/desarrollo-pruebas-unitarias-trinitario-gomez-sogeti/

Arrays asociativos – Java

Hashtable

Una Hashtable es una estructura Java de tipo diccionario que nos permite almacenar elementos identificadospor pares clave/valor.

La estructura Hashtable está definida dentro del paquete  java.util por tanto hay que importar el paquete.

import java.util.Hashtable;

El constructor de Hashtable.

Hastable<String,String> paises = new = Hastable<String,String> ();

Para añadir elementos se usa el método .put(clave,valor).

paises.put("ES","España");

Para recuperar elementos usamos el método .get(clave).

System.out.println(paises.get("ES"));

Eliminar elementos con el método .remove(clave).

paises.remove("ES");

Para comprobar si una clave existe en el array asociativo se usa el método .containsKey(clave) y retorna true o false.

paises.containsKey("ES");

Para comprobar si un valor existe en el array asociativo se usa el método .contains(valor) y retorna true o false.

paises.contains("España");

Recorrer el array asociativo se hace con el método keys() y retorna un objeto de la clase Enumeration con todas las claves.

claves = paises.keys();

while (claves.hasMoreElements()){

Object clave = claves.NextElement();

Object valor = capitales.get(clave);

System.out.println("Pais " + clave.toString() + " Capital " + valor.toString());

{

También está el método .elements() que devuelve u objeto de la clase Enumeration con todos los valores del array asociativo y el método .values() que devuelve un objeto de la clase Collection con todos los valores del array asociativo.

Recorrer de forma ordenada el array asociativo se hace con el método keySet() y retorna un objeto de la clase Set con todas las claves. Para recorrer el objeto Set de forma ordenada lo convertimos a un array y lo ordenamos con el método .sort().

String[] claves = (String[]) capitales.keySet().toArray(new String[0]);

java.util.Arrays.sort(claves);

for (String clave : claves) {

System.out.println(clave + " : " + capitales.get(clave));

{

Enlace a más métodos de la clase Hashtable: http://w3api.com/Java/Hashtable/