sexta-feira, 19 de agosto de 2011

Mudanças no Java 7

Boa Tarde Soldados!
Venho aqui lhes passar algumas informações sobre nosso amiguinho java & que depois de tantos anos de espera finalmente saiu.


A lista de novas features podem ser encontradas aqui
O novo javadoc esta localizado neste link.

1) Switch com strings.
Por mais simples que essa feature possa parecer, é um grande avanço para o JAVA a funcionalidade de utilização de String dentro do bloco switch. Antes era possível utilizar o switch apenas com números inteiros. Quando precisávamos comparar String era necessário utilizar blocos if/else encadeados.
Um exemplo de código de comparação de String em Java:

01String temp = "Java";
02if(temp != null && temp.equals("Cobol")) {
03    System.out.println("Utilizando Cobol");
04} else if(temp != null && temp.equals("DOT NET")) {
05    System.out.println("Utilizando DOT NET");
06} else if(temp != null && temp.equals("Java")) {
07    System.out.println("Utilizando Java");
08} else {
09    System.out.println("Não faço idéia");
10}
Blocos if/else encadeados são mais confusos e difíceis de ler. A opção de um bloco switch torna o mesmo código mais simples e com uma aparência clean:

01String temp = "Java";
02
03switch(temp) {
04    case "Cobol":
05        System.out.println("Utilizando Cobol");
06        break;
07    case "DOT NET":
08        System.out.println("Utilizando DOT NET");
09        break;
10    case "Java":
11        System.out.println("Utilizando Java");
12        break;
13    default:
14        System.out.println("Não faço idéia");
15}
Fica muito mais claro o fluxo dos blocos sem contar que podemos remover a instrução break e assim executar todos os blocos abaixo de forma simples. Assim como no if / else o switch utiliza o método equals para comparar as strings e por isso é case sensitive.

2) Declaração de literais e o uso do underscore
Agora é possível declarar números binários para variáveis inteiras em java. Isso é bem útil para quem utiliza o Java com linguagens de baixo nível.
Um exemplo das novas possibilidade para números inteiros esta no código abaixo:

01//apenas a declaração de um inteiro
02int normal = 5;
03//declaração de um inteiro como hexadecimal com o prefixo '0x' / '0X'
04int hexadecimal = 0x1A;
05//declaração de octal com o prefixo '0'
06int octal = 02; //poucos sabem mais o número zero na frente deixa o inteiro com base 8
07//NOVIDADE java 7 declaração de binário com o prefixo '0b' / '0B'
08int binario = 0b1001;
09//Possível separar números por underscore. Facilita a declaração de números grandes
10int contaBancaria = 10_000_000;
A nova funcionalidade de declaração de variáveis utilizando o underscore como separador é útil para declararmos números com muitos algarismos. Quem nunca se deparou contando o número de zeros de uma variável?
Não podemos utilizar o underscore nos seguintes casos:
  • No início ou fim de um número
  • Junto (antes ou depois) com um ponto numa variável double/float
  • Junto (antes ou depois de um caractere declarativo (x, b ou l)
Exemplos de declaração inválidade:

1int valor1 = _0;
2int valor2 = 0_;
3double double1 = 0._2;
4double double2 = 0_.2;
5int hexa1 = 0_x21;
6int hexa2 = 0x_21;
7int bin1 = 0b_00_1;
3) try-with-resources e multi-catch.
Utilizar com inteligência os recursos do computador como sockets, streams, etc, é importantíssimo e sempre deu um trabalho extra para os desenvolvedores. Criar variáveis fora do try, fechar cada uma delas dentro do finally etc. Por vezes demorava o mesmo tempo criar uma implementação e o código para tratar erros e fechar recursos.
Agora essa tarefa é facilitada pois podemos passar atributos para a cláusula try. Os atributos declarados dentro deste bloco são automaticamente fechados após a execução mesmo que ocorra uma exceção.
Para isso é preciso que o Objeto passado como parâmetro implemente a interface AutoCloseable. 

1try(PreparedStatement ps = null;
2    ResultSet rs = null;) {
3
4    //code
5
6} catch(SQLException | IOException e) {
7    e.printStackTrace();
8}
Na cláusula catch do código acima, também esta uma nova funcionalidade do java 7 que nos possibilita tratar mais de uma exception num único bloco catch. Essa funcionalidade é útil pois evita códigos replicados em várias cláusulas catch.
Achei essas mudanças muito práticas e não vejo a hora de poder usá-las no dia-a-dia com java.
4) Parâmetros para construtor com Genéricos
Outro pequeno detalhe para tornar a linguagem Java mais prazerosa de se utilizar. Normalmente quando declaramos genéricos precisamos especificar o tipo que queremos no lado esquerdo (na declaração da variável) e no lado direito (no construtor). Isso não sera mais preciso, basta colocarmos os sinais de generics () do lado direito que automaticamente o compilador irá utilizar os objetos do lado esquerdo.

1Map<Integer, String> mapa = new HashMap<>();
2mapa.put(1, "valor");

Nenhum comentário:

Postar um comentário

Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.