lunes, marzo 19, 2007

Desatrasandome de java 1.4

Bueno, después de mucho tiempo, por fin me dio por programar otra vez en java. Y esta vez me puse a leer sobre las cositas nuevas en Java 1.5 (ya se que estamos en la 1.6, pero en la 1.6 no vi cambios que uno realmente utilice).

Los cambios son básicamente los siguientes:

Annotations.
Es básicamente un metalenguaje, es decir, viene siendo algo parecido al preprocesador de C.

Genéricos:
No mas Casts! ya las colecciones pueden usar algo parecido a los templates de c++.

Ej:

Vector <Integer >= new Vector<Integer>();

AutoBoxing Auto-Unboxing: Una de las cosas que le critico a java es no poder hacer 27.metodo_de_la_clase_Integer. Pues bueno. Pese a que este nuevo feature no lo permite hacer, facilita un poco las cosas para trabajar con la dualidad objeto-primitiva

Ej (Todos son sacados de Java5 in a nutshell):

Antes:
ArrayList<Integer> list = new ArrayList<integer>();
list.add(0, new Integer(42));
int total = (list.get(0)).intValue();


Ahora:
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, 42);
int total = list.get(0);

Iteradores: todavía se esta lejos de poder hacer un array.each{blabablabla} pero ya facilitan las cosas

Ej:
ArrayList<Integer> list = new ArrayList<Integer>();
for (Integer i : list) { ... }

(aqui particularmente la sintaxis me parece fea... pero desde que sirva :S

La parte de enumeraciones: Nunca he utilizado enumeraciones, se me olvidan que existen. pero bueno, a quien pueda interesar:

public enum semaforo{rojo,verde,amarillo}

Imports estáticos: A veces es cansón hacer la de java.util.paquete.Clase.constante, Pues bueno, puede uno hacer los imports estáticos:

Ej:

import static java.awt.BorderLayout.*;
...
getContentPane().add(new JPanel(), CENTER);

Salida con formato: Básicamente el printf:

System.out.printf("name count%n");
System.out.printf("%s %5d%n", user,total);

Entrada con formato: Entrada estandar siempre ha sido una mierd* en java... ya es menos mierd*.

Scanner s= new Scanner(System.in);
String param= s.next();
int value=s.nextInt();
s.close();


Y... para terminar! args variables!

void argtest(Object ... args) {
for (int i=0;i < args.length; i++) {
}
}

argtest("test", "data");

Si ya se, no es la gran maravilla pero algo es mejor que nada. A mi la verdad el desarrollo de java en estrategia bola de nieve no me gusta. Al final nadie es capaz de lidiar con una sintaxis tan llena de casos especiales, pero bueno.