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:
List<Integer> numeros = List.of(1,4,23,6,78,2,5,9,20);
for(Integer num : numeros){
if(num>10){
System.out.println(num);
}
}y ahora podemos usar:
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:
Persona persona = new Persona();
persona.setNombre("Ivan");
persona.setApellido("Rodriguez");
persona.setEdad(40);ahora podemos usar algo parecido a:
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:
numeros
.stream()
.filter(
n ->
n>10)
.forEach(
n ->
System
.out
.println(
n));y:
Persona persona = Persona
.builder()
.nombre(
"Ivan")
.apellido(
"Rodriguez")
.edad(
40)
.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:
package com.ivra.grpc.test.grpc.service.server.utils;
import static java.lang.String.valueOf;
import org.springframework.stereotype.Component;
@Component
public class FormatoSPIN {
private static final String VARIABLE_ESTATICA;
static {
VARIABLE_ESTATICA = "";
}
private String variableInstancia;
{
variableInstancia = "";
}
public static void metodoEstatico(){
int variableLocal = 0;
Persona persona = Persona
.builder()
.nombre(
"Ivan")
.apellido(
"Rodriguez")
.edad(
40)
.build();
}
public int metodo(){
int variableLocal = 0;
try {
int suma = variableLocal + 5;
return suma;
} catch (Exception e) {
throw new RuntimeException();
}
}
}Este es un ejemplo, no representa ninguna solución.