Early Access Program

Lançamento do Kotlin 1.7.0-Beta

Read this post in other languages:

A primeira demonstração da versão 1.7.0 já está disponível. Apresentando o Kotlin 1.7.0-Beta! Alguns destaques desta versão de demonstração:

  • Alterações na inferência de construtor.
  • O retorno das funções de coleção min() e max().
  • Estabilização de tipos definitivamente não anuláveis.
  • Atualizações para o novo Kotlin/Native Memory Manager.

Instale o 1.7.0-Beta para experimentar esses recursos e informe quaisquer issues que você encontrar para nos ajudar a melhorar o Kotlin 1.7.0.

Divulgaremos outros recursos empolgantes em postagens futuras. Fique ligado!

Instalar o Kotlin 1.7.0-Beta

A partir da versão 1.7.0, estamos atualizando nossa terminologia de cadência, alterando “Milestone” para “Beta”. Existem algumas razões por detrás dessa decisão:

  • Queremos que a terminologia dos builds do Kotlin esteja mais alinhada com a terminologia padrão do ciclo de lançamento de software. Para sermos mais precisos, “Beta” significa que terminamos de acrescentar novos recursos a essa versão específica e estamos trabalhando na sua estabilização. Até o final do processo, serão implementadas alterações, incluindo aquelas baseadas no feedback dos usuários.
  • Algum tempo atrás, compiladores de versão M estavam produzindo código “pré-lançamento”, o que tornava essas versões mais difíceis de testar. Agora já não é assim. Queremos evitar qualquer confusão e enfatizar que testar as versões do Kotlin Beta é um processo simples e altamente recomendado pela equipe do Kotlin. 
  • Por último, mas não menos importante, o termo “Beta” propriamente dito é um pedido de feedback à comunidade. Nós o usamos para que você saiba que queremos que você compartilhe seu feedback conosco.

Avalie o Kotlin 1.7.0-Beta e compartilhe seu feedback conosco no YouTrack e no Slack (para novos membros do Slack: inscreva-se para ser convidado).

Alterações na inferência de construtor

A inferência de construtor é um tipo especial de inferência de tipo que é útil ao chamar funções genéricas de construtor. Ela ajuda o compilador a inferir os argumentos de tipo de uma chamada usando as informações de tipo sobre outras chamadas dentro do seu argumento lambda.

O Kotlin 1.7.0-Beta inclui outras alterações na inferência de construtor. Isto nos aproxima da estabilização da inferência de construtor e da conclusão de um dos itens do nosso roteiro.

Com este lançamento, a inferência de construtor é ativada automaticamente quando uma inferência de tipo regular não pode obter informações suficientes sobre um tipo sem especificar a opção de compilador -Xenable-builder-inference, que introduzimos na versão 1.6.0.

Isto significa que, agora, você pode escrever seus próprios construtores que usam a inferência de tipo de construtor sem precisar aplicar nenhuma anotação ou opção adicional. Saiba como escrever construtores genéricos personalizados.

O retorno das funções de coleção min() e max()

No Kotlin 1.4, renomeamos as funções de coleção min() e max() para minOrNull() e maxOrNull(). Esses novos nomes refletem melhor seu comportamento: retornando null se a coleção receptora estiver vazia. Isso também ajudou a alinhar o comportamento das funções com convenções de nomenclatura usadas em toda a API de coleções do Kotlin.

O mesmo aconteceu com minBy(), maxBy(), minWith() e maxWith(), que ganharam seus sinônimos *OrNull() no Kotlin 1.4. Funções mais antigas afetadas por essa mudança foram deprecadas gradualmente.

O Kotlin 1.7.0-Beta reintroduz os nomes de funções originais, mas com um tipo de retorno não anulável. Os novos métodos min(), max(), minBy(), maxBy(), minWith() e maxWith() agora retornam estritamente o elemento da coleção ou lançam uma exceção.

Consulte este issue do YouTrack para obter detalhes.

Estabilização de tipos definitivamente não anuláveis

O Kotlin 1.7.0 terá tipos estáveis definitivamente não anuláveis, que foram introduzidos no Kotlin 1.6.20.

Esses tipos foram adicionados para fornecer melhor interoperabilidade ao estender classes e interfaces Java genéricas.

A partir do Kotlin 1.6.20, você pode usar a nova sintaxe T & Any para especificar parâmetros de tipo genéricos como absolutamente não anuláveis ​​onde são usados. A forma sintática vem de uma notação de tipos de interseção e agora está limitada a um parâmetro de tipo com limites superiores anuláveis no lado esquerdo de & e Any não anulável no lado direito:

Tipos definitivamente não anuláveis são habilitados por padrão nesta versão Beta. Nenhuma etapa adicional é necessária.

Saiba mais sobre tipos definitivamente não anuláveis no KEEP.

Correspondência com Regex em uma posição específica

As funções Regex.matchAt() e Regex.matchesAt(), introduzidas na versão 1.5.30, agora estão estáveis. Elas fornecem uma maneira de verificar se uma expressão regular tem uma correspondência exata em uma posição específica em uma String ou CharSequence.

  • matchesAt() verifica se há uma correspondência e retorna um resultado booleano:
  • matchAt() retorna a correspondência, se for encontrada, ou null se não for encontrada:

Agradecemos por deixar seu feedback neste issue do YouTrack.

Novo Kotlin/Native Memory Manager

Continuamos a coletar feedback e a melhorar o novo Kotlin/Native Memory Manager. No momento, você pode experimentar a versão Alpha nos seus projetos. O Kotlin 1.7.0-Beta traz melhorias de desempenho adicionais que tornarão a esperiência dos desenvolvedores ainda melhor.

O novo gerenciador de memória elimina as diferenças entre as plataformas JVM e Native. Ele fornece uma experiência consistente ao desenvolvedor em projetos multiplataforma. Por exemplo, você terá muito mais facilidade para criar novos aplicativos móveis multiplataforma que funcionem no Android e no iOS.

O novo Kotlin/Native Memory Manager elimina as restrições de compartilhamento de objetos entre threads. Ele também fornece primitivas de programação simultânea sem vazamentos que são seguras e não requerem nenhum gerenciamento ou anotações especiais.

O novo gerenciador de memória se tornará o padrão em versões futuras, então recomendamos que você experimente agora. Saiba mais sobre o novo gerenciador de memória e explore projetos de demonstração ou vá direto para as instruções de migração para experimentar você mesmo.

Tente usar o novo gerenciador de memória em seus projetos para ver como ele funciona e compartilhe seus comentários em nosso rastreador de issues, o YouTrack.

Suporte para grupos de captura nomeados em JS e Native

Desde o Kotlin 1.7.0-Beta, grupos de captura nomeados têm suporte não apenas em JVM (1.8 e posterior), mas também em JS e Native.

Para dar um nome a um grupo de captura, use a sintaxe (?<name>group) na sua expressão regular. Para obter o texto correspondente a um grupo, chame a recém-introduzida função MatchGroupCollection.get() e passe o nome do grupo.

Recuperar o valor do grupo correspondente por nome

Considere este exemplo para fazer correspondência com as coordenadas da cidade. Para obter uma coleção de grupos correspondidos pela expressão regular, use groups. Compare a recuperação do conteúdo de um grupo por seu número (índice) e por seu nome usando value:

Referência de retorno nomeada

Agora, você também pode usar nomes de grupos ao fazer referência de retorno a grupos. As referências de retorno correspondem ao mesmo texto anteriormente correspondido por um grupo de captura. Para isso, use a sintaxe \k<name>  em sua expressão regular:

Grupos nomeados em expressões de substituição

Finalmente, referências nomeadas para grupos podem ser usadas com expressões de substituição. Considere a função replace(), que substitui todas as ocorrências da expressão regular na entrada por uma expressão de substituição, e a função replaceFirst(), que troca apenas a primeira correspondência.

As ocorrências de ${name} na string de substituição são substituídas pelas subsequências correspondentes aos grupos capturados com o nome especificado. Compare as substituições na referência do grupo por nome e por índice:

Experimente novos recursos e deixe seu feedback 

Esses novos recursos estão disponíveis na versão de demonstração 1.7.0: o Kotlin 1.7.0-Beta. Você pode instalá-lo facilmente no IDE IntelliJ IDEA ou Android Studio.

Devido à renomeação dos plug-ins do Android Studio (Beta), a instalação de plug-ins está disponível a partir das versões 1.6.20+.

Instale o Kotlin 1.7.0-Beta de uma das seguintes maneiras:

  • Se você usar o canal de atualização Early Access Preview, o IDE sugerirá a atualização automática para 1.7.0-Beta assim que ela estiver disponível.
  • Se você usar o canal de atualização Stable, poderá alterar o canal para Early Access Preview a qualquer momento, selecionando Tools | Kotlin | Configure Kotlin Plugin Updates no seu IDE. Você poderá então instalar a mais recente versão de demonstração. Confira estas instruções para mais detalhes.

Sempre existe a chance de baixar as versões mais recentes desses IDEs para obter amplo suporte para o Kotlin:

  • IntelliJ IDEA para desenvolver aplicações Kotlin para várias plataformas.
  • Android Studio para o desenvolvimento de aplicações móveis Android e multiplataforma.

Depois de instalar a versão 1.7.0-Beta, não se esqueça de alterar a versão do Kotlin para 1.7.0-Beta nos seus scripts de build.

Se você tiver algum problema:

Leia mais

Artigo original em inglês por:

Luiz Di Bella

Danil Pavlov

image description