¿Qué es la programacion Imperativa? . Todos estamos habituados a programar y cuando lo hacemos habitualmente usamos un enfoque imperativo. ¿Qué quiere decir esto? , pues simplemente que le decimos al lenguaje de programación como tiene que realizar cada uno de los pasos .Le decimos que variables usar, que bucles y sentencias etc. Es decir construimos un algoritmo muy concreto para solventar un problema. Vamos a ver un ejemplo con una lista de Personas:
package com.arquitecturajava;
public class Persona {
private String nombre;
private int edad;
// Constructor
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
// Getters y Setters
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
}
Programacion Imperativa
Vamos a crear un programa que nos imprima la media de edad de las personas mayores de 18 años . Para ello vamos a usar un enfoque de programacion imperativa.
package com.arquitecturajava;
import java.util.ArrayList;
import java.util.List;
public class Principal {
public static void main(String[] args) {
Persona p1 = new Persona("pepe", 20);
Persona p2 = new Persona("juan", 12);
Persona p3 = new Persona("angela", 30);
Persona p4 = new Persona("gema", 40);
Persona p5 = new Persona("david", 15);
List<Persona> lista = new ArrayList<>();
lista.add(p1);
lista.add(p2);
lista.add(p3);
lista.add(p4);
lista.add(p5);
int totalEdad = 0;
int totalPersonas = 0;
for (Persona p : lista) {
if (p.getEdad() >= 18) {
totalEdad += p.getEdad();
totalPersonas++;
}
}
if (totalPersonas > 0) {
System.out.println(totalEdad / totalPersonas);
} else {
System.out.println("No hay personas mayores de edad.");
}
}
}
En este caso hemos declarado dos variables que hacen de acumuladores y utilizado un bucle for y una sentencia if. El programa imprime un resultado.
Sin embargo hoy en día esta opción ya no es la mejor opción . Vamos a realizar la misma operativa con programación declarativa.
package com.arquitecturajava;
import java.util.ArrayList;
import java.util.List;
import java.util.OptionalDouble;
public class Principal2 {
public static void main(String[] args) {
Persona p1 = new Persona("pepe", 20);
Persona p2 = new Persona("juan", 12);
Persona p3 = new Persona("angela", 30);
Persona p4 = new Persona("gema", 40);
Persona p5 = new Persona("david", 15);
List<Persona> lista = new ArrayList<>();
lista.add(p1);
lista.add(p2);
lista.add(p3);
lista.add(p4);
lista.add(p5);
OptionalDouble resultado = lista.stream()
.filter(persona -> persona.getEdad() >= 18)
.mapToInt(Persona::getEdad)
.average();
if (resultado.isPresent()) {
System.out.println(resultado.getAsDouble());
} else {
System.out.println("No hay personas mayores de edad.");
}
}
}
En este caso hemos solicitado al programa que realice una serie de tareas apoyándonos en programación funcional “el enfoque ha sido declarativo”.
Hemos declarado de forma abstracta las tareas a realizar y el lenguaje se ha encargado de los detalles. En este caso hemos utilizado expresiones Lambda. El resultado es idéntico.
La programación declarativa nos permite crear programas más compactos , reutilizables y thread safe , poco a poco nos iremos acostumbrando a ella en el mundo Java.
Otros artículos relacionados :