Tema: Idioma Java
Ver Mensaje Individual
  #20 (permalink)  
Antiguo 28/10/2014, 15:10
Avatar de Profesor_Falken
Profesor_Falken
 
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Idioma Java

Buenas,

Estoy un poco cansado ahora, pero te comento. Cuando se creo Java existía una importante carencia, que es la posibilidad de crear punteros a función que puedan ser pasados como parámetros. Para solucionar este problema concreto se implementaron las clases anónimas como solución para "salir del paso".
Como sabes, la función anónima consiste en incrustar el código de una clase y su implementación dentro de la llamada a un método, lo cual ya estéticamente rompe el flujo del código. Por otro lado impone excepciones a las reglas básicas de Java al permitir por ejemplo hacer un new de una interface, la cual en realidad se implementa "on the fly". Esto crea muchas dudas a los principiantes. Además, para acceder a cualquier variable de la clase que contiene a la clase anónima, estamos obligados a declarar dichas variables como final (el compilado obliga a hacerlo así para evitar accesos incorrectos, ya que estas variables podrían ser modificadas accidentalmente).
Todos esto es fácilmente solucionable con una implementación de closures como la de C#, que es mucho más lógica y elegante, y que por eso Java ha plagiado (en venganza quizás por el plagio que supuso C# en su momento ) en su versión 8
Un ejemplo vale más de mil palabras:

Función anónima:
Código Java:
Ver original
  1. button.addActionListener(new ActionListener() {
  2.     public void actionPerformed(ActionEvent ae) {
  3.         System.out.println("Action Detected");
  4.     }
  5.  });

Closures:
Código Java:
Ver original
  1. button.addActionListener(e -> {System.out.println("Action Detected");});

Un saludo
__________________
If to err is human, then programmers are the most human of us