Kotlin 1.7.0-Beta lançado

A primeira prévia do Kotlin 1.7.0 já está disponível. Alguns destaques desta prévia:

  • O construtor infere mudanças.
  • regressão da função agregada min() e max().
  • Tipos absolutamente não anuláveis ​​são estabilizados.
  • Nova atualização do gerenciador de memória Kotlin/Native.

Instale o 1.7.0-Beta para experimentar esses recursos e relate quaisquer problemas que encontrar para nos ajudar a melhorar o Kotlin 1.7.0.

Abordaremos outros recursos interessantes em postagens de blog subsequentes. Fique ligado!

A partir da versão 1.7.0, atualizamos nossa terminologia de cadência de lançamento: alteramos "Milestone" para "Beta". Há várias razões por trás desta decisão:

  • Queremos que a terminologia de compilação do Kotlin esteja mais alinhada com a terminologia padrão do ciclo de lançamento de software . Mais precisamente, "Beta" significa que nosso trabalho para adicionar novos recursos a essa versão específica está completo e estamos trabalhando na estabilização. No entanto, também implementaremos as alterações finais, incluindo aquelas baseadas no feedback do usuário.
  • Algum tempo atrás, o compilador M-release vem gerando código de "pré-lançamento", o que torna essas versões mais difíceis de testar. É completamente diferente agora. Queremos evitar qualquer confusão e enfatizar que o processo de experimentar a versão Beta do Kotlin será simples, e a equipe do Kotlin o incentiva a experimentá-lo.
  • Por último, mas não menos importante, a própria palavra "Beta" é um pedido de feedback da comunidade. Por este termo, queremos que você saiba que queremos que você compartilhe seus comentários conosco.

Builder infere mudanças

A inferência do construtor é um tipo especial de inferência de tipo que é útil ao chamar funções genéricas do construtor. Ele ajuda o compilador a inferir os argumentos de tipo da chamada usando as informações de tipo relevantes de outras chamadas em seus argumentos lambda.

Mais alterações na inferência do construtor estão incluídas no Kotlin 1.7.0-Beta. Essas mudanças estabilizam nossa inferência de construtor e encerram uma de nossas tarefas de roteiro .

Nesta versão, a inferência do construtor é ativada automaticamente sem especificar uma -Xenable-builder-inference opção do compilador ( que introduzimos na versão 1.6.0 ) se a inferência de tipo regular não puder obter informações suficientes sobre o tipo  .

Isso significa que agora você pode escrever seus próprios construtores que usam a inferência de tipo de construtor sem aplicar nenhuma anotação ou opção extra. Aprenda a escrever construtores genéricos personalizados .

regressão de função agregada min() e max()

No  Kotlin 1.4  ,   renomeamos  a função min() sum  set para  sum  . Esses novos nomes refletem melhor seu comportamento - se a coleção receptora estiver vazia, ela será retornada  . Também ajuda a alinhar o comportamento das funções com as convenções de nomenclatura usadas em toda a API Kotlin Collections. , ,  e max()minOrNull()maxOrNull()nullminBy()maxBy()minWith()maxWith() 

Da mesma forma, cada um tem seu próprio  *OrNull() sinônimo no Kotlin 1.4. As funções mais antigas afetadas por essa alteração foram gradualmente preteridas.

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

fun main() {
    val numbers = listOf<Int>()
    println(numbers.maxOrNull()) // "null"
    println(numbers.max()) // "Exception in… Collection is empty."
}

Consulte esta edição do YouTrack para obter detalhes.

Tipos absolutamente não anuláveis ​​são estabilizados

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

A finalidade de adicionar esses tipos é 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 marcar parâmetros de tipo genérico como absolutamente não anuláveis ​​no site de uso. Essa forma sintática vem da notação de tipo de interseção e agora está restrita a um único parâmetro de tipo, & com um limite superior anulável à esquerda e um não anulável à direita  Any:

fun <T> elvisLike(x: T, y: T & Any): T & Any = x ?: y

fun main() {
    elvisLike<String>("", "").length // OK
    elvisLike<String>("", null).length // Error: 'null' cannot be a value of a non-null type

    elvisLike<String?>(null, "").length // OK
    elvisLike<String?>(null, null).length // Error: 'null' cannot be a value of a non-null type
}

Nesta versão beta, os tipos absolutamente não anuláveis ​​serão ativados por padrão. Nenhuma etapa adicional é necessária.

Saiba mais sobre tipos absolutamente não anuláveis ​​em  KEEP  .

Expressão regular para corresponder em um local específico

A  função Regex.matchAt() soma  introduzida na versão 1.5.30Regex.matchesAt()  agora alcançou uma versão estável. Eles fornecem uma maneira de verificar se uma expressão regular   tem uma correspondência exata em uma posição específica em String ou  .CharSequence

  • matchesAt() Você pode verificar uma correspondência e retornar um resultado booleano:
fun main(){
    val releaseText = "Kotlin 1.7.0 is on its way!"
    // regular expression: one digit, dot, one digit, dot, one or more digits
    val versionRegex = "\\d[.]\\d[.]\\d+".toRegex()

    println(versionRegex.matchesAt(releaseText, 0)) // "false"
    println(versionRegex.matchesAt(releaseText, 7)) // "true"
}
  • matchAt()retornará uma correspondência se uma correspondência for encontrada ou null se nenhuma correspondência for encontrada:
fun main(){
    val releaseText = "Kotlin 1.7.0 is on its way!"
    val versionRegex = "\\d[.]\\d[.]\\d+".toRegex()

    println(versionRegex.matchAt(releaseText, 0)) // "null"
    println(versionRegex.matchAt(releaseText, 7)?.value) // "1.7.0"
}

Gostaríamos muito de receber seus comentários nesta edição do YouTrack .

Novo gerenciador de memória Kotlin/Native

Continuaremos a coletar feedback e aprimorar o novo gerenciador de memória Kotlin/Native. Atualmente, você pode experimentar a versão Alpha em seu projeto. O Kotlin 1.7.0-Beta traz mais melhorias de desempenho que melhorarão a experiência do desenvolvedor.

O novo gerenciador de memória elimina as diferenças entre a JVM e a plataforma Nativa. Ele fornece uma experiência de desenvolvedor consistente em projetos multiplataforma. Por exemplo, você pode desenvolver com mais facilidade novos aplicativos móveis multiplataforma para as plataformas Android e iOS.

O novo gerenciador de memória Kotlin/Native remove a restrição de compartilhamento de objetos entre threads. Ele também fornece primitivas de linguagem 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 será o gerenciador padrão em versões futuras, então recomendamos que você experimente agora. Saiba mais sobre o novo gerenciador de memória e explore o projeto de demonstração ou vá direto para as instruções de migração para experimentá-lo por conta própria.

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

Suporte de grupo de captura nomeado em JS e nativo

A partir do Kotlin 1.7.0-Beta, os grupos de captura nomeados serão suportados não apenas na JVM (1.8 e superior), mas também em JS e Native.

(?<name>group) Para nomear grupos de captura, use a sintaxe em expressões regulares  . Para obter o texto correspondente a um grupo, chame a  MatchGroupCollection.get() função recém-introduzida e passe o nome do grupo.

Recuperar o valor do grupo correspondente por nome

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

fun main() {
    val regex = "\\b(?<city>[A-Za-z\\s]+),\\s(?<state>[A-Z]{2}):\\s(?<areaCode>[0-9]{3})\\b".toRegex()
    val input = "Coordinates: Austin, TX: 123"
 
    val match = regex.find(input)!!
    println(match.groups["city"]?.value) // "Austin" — by name
    println(match.groups[2]?.value) // "TX" — by number
}

referência anterior nomeada

Agora você também pode usar nomes de grupos ao fazer referência a grupos de trás para frente. As referências anteriores correspondem ao mesmo texto que foi correspondido anteriormente pelo grupo de captura. \k<name> Para fazer isso, use a sintaxe em sua expressão regular  :

fun backRef() {
    val regex = "(?<title>\\w+), yes \\k<title>".toRegex()
    val match = regex.find("Do you copy? Sir, yes Sir!")!!
    println(match.value) // "Sir, yes Sir"
    println(match.groups["title"]?.value) // "Sir"
}

Substituir grupos nomeados em expressões

Finalmente, referências de grupos nomeados podem ser usadas com expressões de substituição. Pense em funções que substituem todas as ocorrências de expressões regulares na entrada por expressões de substituição  replace() e funções que trocam apenas a primeira ocorrência  replaceFirst() .

Cada ocorrência na string de  ${name} substituição é substituída pela subsequência correspondente ao grupo de captura com o nome especificado. Compare as referências de grupo por nome e por índice:

fun dateReplace() {
    val dateRegex = Regex("(?<dd>\\d{2})-(?<mm>\\d{2})-(?<yyyy>\\d{4})")
    val input = "Date of birth: 27-04-2022"
    println(dateRegex.replace(input, "\${yyyy}-\${mm}-\${dd}")) // "Date of birth: 2022-04-27"  — by name
    println(dateRegex.replace(input, "\$3-\$2-\$1")) // "Date of birth: 2022-04-27" — by number
}

Experimente novos recursos e forneça feedback

Você pode usar esses novos recursos na visualização 1.7.0 Kotlin 1.7.0-Beta. Você pode instalá-lo facilmente no  IntelliJ IDEA  ou  no Android Studio  IDE.

Devido à renomeação do plug-in do Android Studio (beta), a instalação do plug-in é compatível com a versão 1.6.20 e posterior.

Instale o Kotlin 1.7.0-Beta:

  • Se você estiver usando o canal de atualização Early Access Preview , o IDE sugerirá uma atualização automática para 1.7.0-Beta assim que estiver disponível.
  • Se você estiver usando o canal de atualização estável , poderá  alternar para o canal de visualização de acesso antecipado a qualquer momento selecionando Tools  |  Kotlin  |  Configure Kotlin Plugin Updates em seu IDE. Em seguida, você poderá instalar a versão de visualização mais recente. Consulte estas instruções para obter detalhes.

Você sempre pode baixar as versões mais recentes desses IDEs para garantir suporte total ao Kotlin:

  • IntelliJ IDEA  - Para desenvolver aplicativos Kotlin para diferentes plataformas.
  • Android Studio  - Para desenvolver aplicativos móveis Android e multiplataforma.

Não se esqueça de alterar a .

Se você encontrar algum problema:

consulte Mais informação

Acho que você gosta

Origin www.oschina.net/news/197632/kotlin-1-7-0-beta-released
Recomendado
Clasificación