Pular para o conteúdo principal

Diferenças entre o Java 11 e Java 17 - Text Blocks e Switch Expressions

  



Diferenças entre Java 11 e 17 - Text Blocks e Switch Expressions


Aprenda as diferenças entre o Java 11 e o Java 17. Obtenha uma visão geral do modelo de licenciamento e exemplos dos novos recursos do Java 17. Neste primeiro post vamos falar sobre Text Blocks e Switch Expressions.


Em 14 de setembro, o Java 17 foi lançado. É hora de dar uma olhada mais de perto nas mudanças desde o último lançamento do LTS, que é o Java 11. É feita uma breve introdução sobre o modelo de licenciamento e, em seguida, algumas das mudanças entre o Java 11 e o Java 17 são destacadas, principalmente por meio de exemplos.


Introdução


Primeiro, vamos dar uma olhada no modelo de licenciamento e suporte Java. O Java 17 é uma versão LTS (Long Term Support), assim como o Java 11. Com o Java 11, uma nova cadência de lançamento começou. Java 11 veio com suporte até setembro de 2023 e com suporte estendido até setembro de 2026. Além disso, com o Java 11, o Oracle JDK não era mais gratuito para produção e uso comercial. A cada 6 meses, uma nova versão do Java é lançada, os chamados não-LTS, desde o Java 12 até o Java 16. No entanto, esses são lançamentos prontos para produção. A única diferença com um lançamento LTS é que o suporte termina quando a próxima versão for lançada. Por exemplo, o suporte do Java 12 termina quando o Java 13 é lançado.


Você é mais ou menos obrigado a atualizar para o Java 13 quando quiser manter o suporte a atualizações e correção de bugs. Isso pode causar alguns problemas quando algumas de suas dependências ainda não estão prontas para o Java 13.


Na maioria das vezes, para uso em produção, as empresas esperam pelos lançamentos LTS. Mas, mesmo assim, algumas empresas relutam em fazer upgrade. Uma pesquisa recente da Snyk mostrou que apenas 60% estão usando o Java 11 em produção e isso foi 3 anos após o lançamento do Java 11! O Java 8 também ainda é usado por 60% das empresas. Outra coisa interessante de se notar é que o próximo lançamento do LTS será o Java 21, que será lançado em 2 anos. Uma boa visão geral se as bibliotecas têm problemas ou não com o Java 17, pode ser encontrada aqui.


O modelo de licenciamento da Oracle mudou com a introdução do Java 17. Java 17 é emitido sob a nova licença NFTC (Oracle No-Fee Terms and Conditions). Portanto, é novamente permitido usar a versão Oracle JDK gratuitamente para produção e uso comercial. Na mesma pesquisa da Snyk, constatou-se que a versão Oracle JDK só era usada por 23% dos usuários em ambiente de produção. Você deve observar que o suporte para a versão LTS terminará um ano após o lançamento da próxima versão LTS. Será interessante ver como isso influenciará a atualização para as próximas versões LTS. Você pode ver um texto mais completo aqui.


O que mudou entre o Java 11 e o Java 17? Uma lista completa dos JEPs (Java Enhancement Proposals) pode ser encontrada no site do OpenJDK. Aqui você pode ler os detalhes essenciais de cada JEP. Para obter uma lista completa do que mudou por versão desde o Java 11.


Nas próximas seções, algumas das mudanças serão explicadas, por exemplo, mas depende principalmente de você experimentar esses novos recursos para se familiarizar com eles.


Text Blocks


Muitas melhorias foram feitas para tornar o Java mais legível e menos prolixo. Os blocos de texto definitivamente tornam o código mais legível. Primeiro, vamos dar uma olhada no problema. Suponha que você precise de alguma string JSON em seu código e precise imprimi-la. Existem vários problemas com este código:

  • Scape das aspas duplas;
  • Concatenação de strings para torná-los mais ou menos legíveis;
  • Copiar e colar JSON exige muito trabalho (provavelmente seu IDE o ajudará com esse problema).

Os blocos de texto são definidos com três aspas duplas, onde as três aspas duplas finais podem não estar na mesma linha da inicial.
private static void oldStyle() {
String text = "{\n" +
" \"name\": \"John Doe\",\n" +
" \"age\": 45,\n" +
" \"address\": \"Doe Street, 23, Java Town\"\n" +
"}";
System.out.println(text);
}
A parte problemática do JSON agora pode ser escrita da seguinte maneira, que é muito mais legível. Não há necessidade de escapar as aspas duplas e parece que será impresso.
private static void jsonBlock() {
String text = """
{
"name": "John Doe",
"age": 45,
"address": "Doe Street, 23, Java Town"
}
""";
System.out.println(text);
}
A saída agora imprime dois espaços antes de cada linha. Isso significa que as três aspas duplas finais indicam o início do Bloco de Texto.

Switch Expressions

Switch Expressions permitirá que você retorne valores do switch e use esses valores de retorno em atribuições, etc. Um switch clássico é mostrado aqui, onde, dependendo de um determinado valor Fruit enum, alguma ação precisa ser realizada. De propósito, o intervalo é deixado de fora.

Chame o método com APPLE.
oldStyleWithoutBreak(Fruit.APPLE);
Isso imprime todos os casos porque, sem a instrução break, o caso falha.
Common fruit
Exotic fruit
Undefined fruit

Portanto, é necessário adicionar uma instrução break em cada caso para evitar essa falha.
private static void oldStyleWithBreak(Fruit fruit) {
switch (fruit) {
case APPLE, PEAR:
System.out.println("Common fruit");
break;
case ORANGE, AVOCADO:
System.out.println("Exotic fruit");
break;
default:
System.out.println("Undefined fruit");
}
}
A execução desse método fornece o resultado desejado, mas o código está um pouco menos legível agora.

Common fruit

Isso pode ser resolvido usando Switch Expressions. Substitua os dois pontos (:) por uma seta (->) e certifique-se de que uma expressão seja usada nesse caso. O comportamento padrão de Switch Expressions é sem falhas, portanto, nenhum break é necessário.

private static void withSwitchExpression(Fruit fruit) {
switch (fruit) {
case APPLE, PEAR -> System.out.println("Common fruit");
case ORANGE, AVOCADO -> System.out.println("Exotic fruit");
default -> System.out.println("Undefined fruit");
}
}
Isso já é menos verboso e o resultado é idêntico. Uma expressão de switch também pode retornar um valor. No exemplo acima, você pode retornar os valores de String e atribuí-los a um texto variável. Depois disso, a variável de texto pode ser impressa. Não se esqueça de adicionar um ponto e vírgula após o último colchete.

private static void withReturnValue(Fruit fruit) {
String text = switch (fruit) {
case APPLE, PEAR -> "Common fruit";
case ORANGE, AVOCADO -> "Exotic fruit";
default -> "Undefined fruit";
};
System.out.println(text);
}
E, ainda mais resumido, o acima pode ser reescrito em apenas uma declaração. Depende de você se isso é mais legível do que o acima.

private static void withReturnValueEvenShorter(Fruit fruit) {
System.out.println(
switch (fruit) {
case APPLE, PEAR -> "Common fruit";
case ORANGE, AVOCADO -> "Exotic fruit";
default -> "Undefined fruit";
});
}

O que você faz quando precisa fazer mais do que apenas uma coisa no caso? Neste caso, você pode usar colchetes para indicar um bloco de caso e ao retornar um valor, você usa a palavra-chave yield.

private static void withYield(Fruit fruit) {
String text = switch (fruit) {
case APPLE, PEAR -> {
System.out.println("the given fruit was: " + fruit);
yield "Common fruit";
}
case ORANGE, AVOCADO -> "Exotic fruit";
default -> "Undefined fruit";
};
System.out.println(text);
}
A saída agora é um pouco diferente, duas instruções de impressão são executadas.

the given fruit was: APPLE Common fruit

Também é legal que você possa usar a palavra-chave yield na 'antiga' sintaxe de switch. O break não é necessário aqui.
private static void oldStyleWithYield(Fruit fruit) {
System.out.println(switch (fruit) {
case APPLE, PEAR:
yield "Common fruit";
case ORANGE, AVOCADO:
yield "Exotic fruit";
default:
yield "Undefined fruit";
});
}
No próximo post continuaremos a explorar outras diferenças . Até lá.


Créditos e artigo original (em inglês)



Comentários

Postagens mais visitadas deste blog

Certificação Java 11 - O que mudou

Certificação Java 11 - O que mudou A Oracle liberou recentemente uma atualização das suas certificações Java para atender a nova versão Java 11  LTS (Long Term Support) . Mas o que muda em relação a certificação Java 8? Preciso me atualizar? Por onde começo?  Neste post, vamos responder estas e outras questões sobre essa nova série de certificações. Caso você não tenha acompanhado a série sobre certificação, recomendo a leitura dos posts anteriores: https://www.guiadojava.com.br/2018/06/guia-da-certificacao-java-se-8.html Também temos um bate papo com os maiores especialistas de Java do mercado. Assista o replay aqui: https://events.genndi.com/replay/169105139238448348/23a5b3a7b0/0/83729443273C Nomenclatura e requisitos A partir de agora, você não receberá o certificado se fizer apenas a primeira prova, como era no Java 8 (1Z0-808 - Java SE 8 Programmer I). Você terá que fazer duas provas para obter o certificado " Oracle Certified Professional: Java SE 11 Dev

Java 15 - Novidades (ou não)

Java 15 - Novidades (ou não) O Java 15 já está em fase de testes com as suas features fechadas (Rampdown Phase One). Isso quer dizer que mais nenhuma feature será implementada. Teremos melhorias em funcionalidades já liberadas para testes e outras consolidadas agora nesta versão, mas nada de grandes mudanças. Porém é sempre bom ficar atualizado não é? Para acompanhar os builds e agenda da liberação, acesse esta página . Revisando o processo de versionamento Com o lançamento do  Java 9 em 2017 , o cronograma de lançamento do Java mudou, de um lançamento principal a cada  3 anos ou mais  para um lançamento a cada  seis meses . Um dos principais motivos dessa alteração foi oferecer aos desenvolvedores acesso mais rápido as melhorias contínuas. Os lançamentos ocorrem em  Março  e  Setembro  de cada ano. Ainda cabe um post específico para o modelo de versionamento para explicar sobre as versões LTS, versões intermediárias e funcionalidades " preview ". Para mais informações, veja

Guia da certificação Java SE 8 Programmer l - Parte 1: Conhecendo a certificação

Seja bem-vindo a série de postagens sobre a certificação Java. Como funciona, o que fazer para comprar, marcar o dia da prova e o principal, o que estudar. Para ver o índice da série e as datas das publicações, acesse este link Parte 1 – Conhecendo a certificação Nesta primeira parte, vamos navegar pelo site da Oracle Education e da Pearson VUE para conhecer como funciona a certificação e se ambientar. Ambos os site estão em Inglês e como já dito no índice da série, a prova não tem opção em português. Site da Oracle O site da Oracle não é um dos melhores em usabilidade. Então se procurar por certificação Java no Google, irá encontrar diversos cursos, livros e blogs falando a respeito da certificação menos o site da Oracle. Pois bem, abaixo o link direto para informações do exame 1Z0-808 - Java SE 8 Programmer I https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-808 Neste link você encontrará