Agrupación de acuerdo al scope

Para mejorar la lectura de bloques de código, variable y métodos seguiremos el siguiente orden de acuerdo a los tipos:

 

  • imports estáticos

  • imports

  • Bloque estático

  • Variables estáticas

  • Bloque de instancia

  • Variables de instancia

  • Métodos estáticos

  • Métodos de instancia

Monad Style

Con el paso del tiempo la programación funcional a ido creciendo y su popularidad se ha extendido hasta lenguajes como Java. A partir de la versión 8 con el ingreso de las interfaces funcionales y con esto las lambdas así como los streams inició una serie de cambios enfocados a programación funcional.

Anteriormente para recorrer un listado de números o cadenas con cierta validación teníamos lo siguiente:

1 List<Integer> numeros = List.of(1,4,23,6,78,2,5,9,20); 2 3    for(Integer num : numeros){ 4 5        if(num>10){ 6 7            System.out.println(num); 8 9        } 10 11    }

y ahora podemos usar:

1 numeros.stream().filter(n -> n>10).forEach(n -> System.out.println(n));

funcionalmente realiza lo mismo, pero al tener el código de esta manera podríamos tener en una sola lineal la solución a todo un problema.

De igual manera en java se ha extendido mucho es el uso de los builders, con lo que antes teníamos:

1 Persona persona = new Persona(); 2 3    persona.setNombre("Ivan"); 4 5    persona.setApellido("Rodriguez"); 6 7    persona.setEdad(40);

ahora podemos usar algo parecido a:

1 Persona persona = Persona.builder().nombre("Ivan").apellido("Rodriguez").edad(40).build();

con lo que también podríamos construir un objeto complejo en una sola línea.

Para poder mejorar la lectura se puede utilizar el estilo monad que en nuestro caso consiste en:

  • Agrega un salto de línea después de:

    • Un (

    • Una ,

    • Un {

    • Un > de una lambda

  • Y antes de:

    • Un .

con lo que tendríamos algo parecido a:

1 numeros 2        .stream() 3            .filter( 4                n -> 5                    n>10) 6            .forEach( 7                n -> 8                    System 9                        .out 10                        .println( 11                            n));

y:

1 Persona persona = Persona 2                .builder() 3                .nombre( 4                    "Ivan") 5                .apellido( 6                    "Rodriguez") 7                .edad( 8                     40) 9                 .build();

con esto lograremos leer el código mas fácilmente.

Saltos de línea adicionales

Para facilitar la lectura del código también podemos agregar algunos saltos de línea en:

  • Después de paquete de la clase

  • Después de los imports y antes de la definición de la clase

  • Después de la definición de la clase y la siguiente línea de código (variable, constructor, método, etc.)

  • Entre grupos de variables para separar variables de instancia, estaticas, constantes, etc.

  • Entre la ultima variable y el primer método

  • Después de {

  • Después de las variables locales y la siguiente sentencia

  • Antes de un return

  • Entre métodos

No debemos agregar salto de línea:

  • Al final del código de un archivo .java

  • Entre los } finales o entre la ultima declaración de una variable y el } final de la clase

Ejemplo:

1package com.ivra.grpc.test.grpc.service.server.utils; 2 3import static java.lang.String.valueOf; 4import org.springframework.stereotype.Component; 5 6@Component 7public class FormatoSPIN { 8 9    private static final String VARIABLE_ESTATICA; 10 11    static { 12        VARIABLE_ESTATICA = ""; 13    } 14 15    private String variableInstancia; 16 17    { 18        variableInstancia = ""; 19    } 20 21    public static void metodoEstatico(){ 22 23        int variableLocal = 0; 24 25 Persona persona = Persona 26 .builder() 27 .nombre( 28 "Ivan") 29 .apellido( 30 "Rodriguez") 31 .edad( 32 40) 33 .build(); 34    } 35 36    public int metodo(){ 37 38        int variableLocal = 0; 39 40        try { 41 42            int suma = variableLocal + 5; 43 44            return suma; 45 46        } catch (Exception e) { 47 48            throw new RuntimeException(); 49        } 50    } 51}

Este es un ejemplo, no representa ninguna solución.