{"id":256277,"date":"2022-05-04T16:09:45","date_gmt":"2022-05-04T15:09:45","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kotlin\/2022\/05\/kotlin-1-7-0-beta\/"},"modified":"2022-06-15T06:55:56","modified_gmt":"2022-06-15T05:55:56","slug":"kotlin-1-7-0-beta","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/pt-br\/kotlin\/2022\/05\/kotlin-1-7-0-beta\/","title":{"rendered":"Lan\u00e7amento do Kotlin 1.7.0-Beta"},"content":{"rendered":"<p>A primeira demonstra\u00e7\u00e3o da vers\u00e3o 1.7.0 j\u00e1 est\u00e1 dispon\u00edvel. Apresentando o Kotlin 1.7.0-Beta! Alguns destaques desta vers\u00e3o de demonstra\u00e7\u00e3o:<\/p>\n<ul>\n<li>Altera\u00e7\u00f5es na infer\u00eancia de construtor.<\/li>\n<li>O retorno das fun\u00e7\u00f5es de cole\u00e7\u00e3o min() e max().<\/li>\n<li>Estabiliza\u00e7\u00e3o de tipos definitivamente n\u00e3o anul\u00e1veis.<\/li>\n<li>Atualiza\u00e7\u00f5es para o novo Kotlin\/Native Memory Manager.<\/li>\n<\/ul>\n<p>Instale o 1.7.0-Beta para experimentar esses recursos e <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">informe quaisquer issues<\/a> que voc\u00ea encontrar para nos ajudar a melhorar o Kotlin 1.7.0.<\/p>\n<p>Divulgaremos outros recursos empolgantes em postagens futuras. Fique ligado!<\/p>\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Instalar o Kotlin 1.7.0-Beta\" href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/05\/kotlin-1-7-0-beta\/#try-new-features\">Instalar o Kotlin 1.7.0-Beta<\/a><\/p>\n<p>A partir da vers\u00e3o 1.7.0, estamos atualizando nossa terminologia de cad\u00eancia, alterando \u201cMilestone\u201d para \u201cBeta\u201d. Existem algumas raz\u00f5es por detr\u00e1s dessa decis\u00e3o:<\/p>\n<ul>\n<li>Queremos que a terminologia dos builds do Kotlin esteja mais alinhada com a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Software_release_life_cycle#Beta\" target=\"_blank\" rel=\"noopener\">terminologia padr\u00e3o<\/a> do ciclo de lan\u00e7amento de software. Para sermos mais precisos, &#8220;Beta&#8221; significa que terminamos de acrescentar novos recursos a essa vers\u00e3o espec\u00edfica e estamos trabalhando na sua estabiliza\u00e7\u00e3o. At\u00e9 o final do processo, ser\u00e3o implementadas altera\u00e7\u00f5es, incluindo aquelas baseadas no feedback dos usu\u00e1rios.<\/li>\n<li>Algum tempo atr\u00e1s, compiladores de vers\u00e3o M estavam produzindo c\u00f3digo \u201cpr\u00e9-lan\u00e7amento\u201d, o que tornava essas vers\u00f5es mais dif\u00edceis de testar. Agora j\u00e1 n\u00e3o \u00e9 assim. Queremos evitar qualquer confus\u00e3o e enfatizar que testar as vers\u00f5es do Kotlin Beta \u00e9 um processo simples e altamente recomendado pela equipe do Kotlin.&nbsp;<\/li>\n<li>Por \u00faltimo, mas n\u00e3o menos importante, o termo &#8220;Beta&#8221; propriamente dito \u00e9 um pedido de feedback \u00e0 comunidade. N\u00f3s o usamos para que voc\u00ea saiba que queremos que voc\u00ea compartilhe seu feedback conosco.<\/li>\n<\/ul>\n<p>Avalie o Kotlin 1.7.0-Beta e compartilhe seu feedback conosco no <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a> e no <a href=\"https:\/\/kotlinlang.slack.com\/archives\/C0KLZSCHF\" target=\"_blank\" rel=\"noopener\">Slack<\/a> (para novos membros do Slack: <a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">inscreva-se para ser convidado<\/a>).<\/p>\n<h2><span id=\"Changes_to_builder_inference\" class=\"ez-toc-section\"><\/span>Altera\u00e7\u00f5es na infer\u00eancia de construtor<\/h2>\n<p>A infer\u00eancia de construtor \u00e9 um tipo especial de infer\u00eancia de tipo que \u00e9 \u00fatil ao chamar fun\u00e7\u00f5es gen\u00e9ricas de construtor. Ela ajuda o compilador a inferir os argumentos de tipo de uma chamada usando as informa\u00e7\u00f5es de tipo sobre outras chamadas dentro do seu argumento lambda.<\/p>\n<p>O Kotlin 1.7.0-Beta inclui outras altera\u00e7\u00f5es na infer\u00eancia de construtor. Isto nos aproxima da estabiliza\u00e7\u00e3o da infer\u00eancia de construtor e da conclus\u00e3o de um dos itens do nosso <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-45618\/Stabilize-builder-inference\" target=\"_blank\" rel=\"noopener\">roteiro<\/a>.<\/p>\n<p>Com este lan\u00e7amento, a infer\u00eancia de construtor \u00e9 ativada automaticamente quando uma infer\u00eancia de tipo regular n\u00e3o pode obter informa\u00e7\u00f5es suficientes sobre um tipo sem especificar a op\u00e7\u00e3o de compilador <code>-Xenable-builder-inference<\/code>, que <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew16.html#changes-to-builder-inference\" target=\"_blank\" rel=\"noopener\">introduzimos na vers\u00e3o 1.6.0<\/a>.<\/p>\n<p>Isto significa que, agora, voc\u00ea pode escrever seus pr\u00f3prios construtores que usam a infer\u00eancia de tipo de construtor sem precisar aplicar nenhuma anota\u00e7\u00e3o ou op\u00e7\u00e3o adicional. <a href=\"https:\/\/kotlinlang.org\/docs\/using-builders-with-builder-inference.html\" target=\"_blank\" rel=\"noopener\">Saiba como escrever construtores gen\u00e9ricos personalizados<\/a>.<\/p>\n<h2><span id=\"The_return_of_the_min_and_max_collection_functions\" class=\"ez-toc-section\"><\/span>O retorno das fun\u00e7\u00f5es de cole\u00e7\u00e3o min() e max()<\/h2>\n<p>No <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew14.html#collections\" target=\"_blank\" rel=\"noopener\">Kotlin 1.4<\/a>, renomeamos as fun\u00e7\u00f5es de cole\u00e7\u00e3o <code>min()<\/code> e <code>max()<\/code> para <code>minOrNull()<\/code> e <code>maxOrNull()<\/code>. Esses novos nomes refletem melhor seu comportamento: retornando <code>null<\/code> se a cole\u00e7\u00e3o receptora estiver vazia. Isso tamb\u00e9m ajudou a alinhar o comportamento das fun\u00e7\u00f5es com conven\u00e7\u00f5es de nomenclatura usadas em toda a API de cole\u00e7\u00f5es do Kotlin.<\/p>\n<p>O mesmo aconteceu com <code>minBy()<\/code>, <code>maxBy()<\/code>, <code>minWith()<\/code> e <code>maxWith()<\/code>, que ganharam seus sin\u00f4nimos <code>*OrNull()<\/code> no Kotlin 1.4. Fun\u00e7\u00f5es mais antigas afetadas por essa mudan\u00e7a foram deprecadas gradualmente.<\/p>\n<p>O Kotlin 1.7.0-Beta reintroduz os nomes de fun\u00e7\u00f5es originais, mas com um tipo de retorno n\u00e3o anul\u00e1vel. Os novos m\u00e9todos <code>min()<\/code>, <code>max()<\/code>, <code>minBy()<\/code>, <code>maxBy()<\/code>, <code>minWith()<\/code> e <code>maxWith()<\/code> agora retornam estritamente o elemento da cole\u00e7\u00e3o ou lan\u00e7am uma exce\u00e7\u00e3o.<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">fun main() {\n    val numbers = listOf&lt;Int&gt;()\n    println(numbers.maxOrNull()) \/\/ \"null\"\n    println(numbers.max()) \/\/ \"Exception in\u2026 Collection is empty.\"\n}\n<\/pre>\n<p>Consulte <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-38854\" target=\"_blank\" rel=\"noopener\">este issue do YouTrack<\/a> para obter detalhes.<\/p>\n<h2><span id=\"Stabilizing_of_definitely_non-nullable_types\" class=\"ez-toc-section\"><\/span>Estabiliza\u00e7\u00e3o de tipos definitivamente n\u00e3o anul\u00e1veis<\/h2>\n<p>O Kotlin 1.7.0 ter\u00e1 tipos est\u00e1veis definitivamente n\u00e3o anul\u00e1veis, que foram <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1620.html#definitely-non-nullable-types\" target=\"_blank\" rel=\"noopener\">introduzidos no Kotlin 1.6.20<\/a>.<\/p>\n<p>Esses tipos foram adicionados para fornecer melhor interoperabilidade ao estender classes e interfaces Java gen\u00e9ricas.<\/p>\n<p>A partir do Kotlin 1.6.20, voc\u00ea pode usar a nova sintaxe <code>T &amp; Any<\/code> para especificar par\u00e2metros de tipo gen\u00e9ricos como absolutamente n\u00e3o anul\u00e1veis \u200b\u200bonde s\u00e3o usados. A forma sint\u00e1tica vem de uma nota\u00e7\u00e3o de <a href=\"https:\/\/en.wikipedia.org\/wiki\/Intersection_type\" target=\"_blank\" rel=\"noopener\">tipos de interse\u00e7\u00e3o<\/a> e agora est\u00e1 limitada a um par\u00e2metro de tipo com limites superiores anul\u00e1veis no lado esquerdo de <code>&amp;<\/code> e <code>Any<\/code> n\u00e3o anul\u00e1vel no lado direito:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">fun &lt;T&gt; elvisLike(x: T, y: T &amp; Any): T &amp; Any = x ?: y\n\nfun main() {\n    elvisLike&lt;String&gt;(\"\", \"\").length \/\/ OK\n    elvisLike&lt;String&gt;(\"\", null).length \/\/ Error: 'null' cannot be a value of a non-null type\n\n    elvisLike&lt;String?&gt;(null, \"\").length \/\/ OK\n    elvisLike&lt;String?&gt;(null, null).length \/\/ Error: 'null' cannot be a value of a non-null type\n}\n<\/pre>\n<p>Tipos definitivamente n\u00e3o anul\u00e1veis s\u00e3o habilitados por padr\u00e3o nesta vers\u00e3o Beta. Nenhuma etapa adicional \u00e9 necess\u00e1ria.<\/p>\n<p>Saiba mais sobre tipos definitivamente n\u00e3o anul\u00e1veis no <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/c72601cf35c1e95a541bb4b230edb474a6d1d1a8\/proposals\/definitely-non-nullable-types.md\" target=\"_blank\" rel=\"noopener\">KEEP<\/a>.<\/p>\n<h2><span id=\"Matching_with_Regex_at_a_particular_position\" class=\"ez-toc-section\"><\/span>Correspond\u00eancia com Regex em uma posi\u00e7\u00e3o espec\u00edfica<\/h2>\n<p>As fun\u00e7\u00f5es <code>Regex.matchAt()<\/code> e <code>Regex.matchesAt()<\/code>, <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#matching-with-regex-at-a-particular-position\" target=\"_blank\" rel=\"noopener\">introduzidas na vers\u00e3o 1.5.30<\/a>, agora est\u00e3o est\u00e1veis. Elas fornecem uma maneira de verificar se uma express\u00e3o regular tem uma correspond\u00eancia exata em uma posi\u00e7\u00e3o espec\u00edfica em uma <code>String<\/code> ou <code>CharSequence<\/code>.<\/p>\n<ul>\n<li><code>matchesAt()<\/code> verifica se h\u00e1 uma correspond\u00eancia e retorna um resultado booleano:<\/li>\n<\/ul>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">fun main(){\n    val releaseText = \"Kotlin 1.7.0 is on its way!\"\n    \/\/ regular expression: one digit, dot, one digit, dot, one or more digits\n    val versionRegex = \"\\\\d[.]\\\\d[.]\\\\d+\".toRegex()\n\n    println(versionRegex.matchesAt(releaseText, 0)) \/\/ \"false\"\n    println(versionRegex.matchesAt(releaseText, 7)) \/\/ \"true\"\n}\n<\/pre>\n<ul>\n<li><code>matchAt()<\/code> retorna a correspond\u00eancia, se for encontrada, ou <code>null<\/code> se n\u00e3o for encontrada:<\/li>\n<\/ul>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">fun main(){\n    val releaseText = \"Kotlin 1.7.0 is on its way!\"\n    val versionRegex = \"\\\\d[.]\\\\d[.]\\\\d+\".toRegex()\n\n    println(versionRegex.matchAt(releaseText, 0)) \/\/ \"null\"\n    println(versionRegex.matchAt(releaseText, 7)?.value) \/\/ \"1.7.0\"\n}\n<\/pre>\n<p>Agradecemos por deixar seu feedback neste <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-34021\" target=\"_blank\" rel=\"noopener\">issue do YouTrack<\/a>.<\/p>\n<h2><span id=\"New_KotlinNative_Memory_Manager\" class=\"ez-toc-section\"><\/span>Novo Kotlin\/Native Memory Manager<\/h2>\n<p>Continuamos a coletar feedback e a melhorar o novo Kotlin\/Native Memory Manager. No momento, voc\u00ea pode experimentar a vers\u00e3o Alpha nos seus projetos. O Kotlin 1.7.0-Beta traz melhorias de desempenho adicionais que tornar\u00e3o a esperi\u00eancia dos desenvolvedores ainda melhor.<\/p>\n<p>O novo gerenciador de mem\u00f3ria elimina as diferen\u00e7as entre as plataformas JVM e Native. Ele fornece uma experi\u00eancia consistente ao desenvolvedor em projetos multiplataforma. Por exemplo, voc\u00ea ter\u00e1 muito mais facilidade para criar novos aplicativos m\u00f3veis multiplataforma que funcionem no Android e no iOS.<\/p>\n<p>O novo Kotlin\/Native Memory Manager elimina as restri\u00e7\u00f5es de compartilhamento de objetos entre threads. Ele tamb\u00e9m fornece primitivas de programa\u00e7\u00e3o simult\u00e2nea sem vazamentos que s\u00e3o seguras e n\u00e3o requerem nenhum gerenciamento ou anota\u00e7\u00f5es especiais.<\/p>\n<p>O novo gerenciador de mem\u00f3ria se tornar\u00e1 o padr\u00e3o em vers\u00f5es futuras, ent\u00e3o recomendamos que voc\u00ea experimente agora. <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/08\/try-the-new-kotlin-native-memory-manager-development-preview\/\">Saiba mais<\/a> sobre o novo gerenciador de mem\u00f3ria e explore projetos de demonstra\u00e7\u00e3o ou v\u00e1 direto para as <a href=\"https:\/\/github.com\/JetBrains\/kotlin\/blob\/master\/kotlin-native\/NEW_MM.md\" target=\"_blank\" rel=\"noopener\">instru\u00e7\u00f5es de migra\u00e7\u00e3o<\/a> para experimentar voc\u00ea mesmo.<\/p>\n<p>Tente usar o novo gerenciador de mem\u00f3ria em seus projetos para ver como ele funciona e compartilhe seus coment\u00e1rios em nosso rastreador de issues, o <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-48525\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>.<\/p>\n<h2><span id=\"Support_for_named_capturing_groups_in_JS_and_Native\" class=\"ez-toc-section\"><\/span>Suporte para grupos de captura nomeados em JS e Native<\/h2>\n<p>Desde o Kotlin 1.7.0-Beta, grupos de captura nomeados t\u00eam suporte n\u00e3o apenas em JVM (1.8 e posterior), mas tamb\u00e9m em JS e Native.<\/p>\n<p>Para dar um nome a um grupo de captura, use a sintaxe <code>(?&lt;name&gt;group)<\/code> na sua express\u00e3o regular. Para obter o texto correspondente a um grupo, chame a rec\u00e9m-introduzida fun\u00e7\u00e3o <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/get.html\" target=\"_blank\" rel=\"noopener\"><code>MatchGroupCollection.get()<\/code><\/a> e passe o nome do grupo.<\/p>\n<h3><span id=\"Retrieve_matched_group_value_by_name\" class=\"ez-toc-section\"><\/span>Recuperar o valor do grupo correspondente por nome<\/h3>\n<p>Considere este exemplo para fazer correspond\u00eancia com as coordenadas da cidade. Para obter uma cole\u00e7\u00e3o de grupos correspondidos pela express\u00e3o regular, use <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-match-result\/groups.html\" target=\"_blank\" rel=\"noopener\"><code>groups<\/code><\/a>. Compare a recupera\u00e7\u00e3o do conte\u00fado de um grupo por seu n\u00famero (\u00edndice) e por seu nome usando <code>value<\/code>:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">fun main() {\n    val regex = \"\\\\b(?&lt;city&gt;[A-Za-z\\\\s]+),\\\\s(?&lt;state&gt;[A-Z]{2}):\\\\s(?&lt;areaCode&gt;[0-9]{3})\\\\b\".toRegex()\n    val input = \"Coordinates: Austin, TX: 123\"\n \n    val match = regex.find(input)!!\n    println(match.groups[\"city\"]?.value) \/\/ \"Austin\" \u2014 by name\n    println(match.groups[2]?.value) \/\/ \"TX\" \u2014 by number\n}\n<\/pre>\n<h3><span id=\"Named_backreferencing\" class=\"ez-toc-section\"><\/span>Refer\u00eancia de retorno nomeada<\/h3>\n<p>Agora, voc\u00ea tamb\u00e9m pode usar nomes de grupos ao fazer refer\u00eancia de retorno a grupos. As refer\u00eancias de retorno correspondem ao mesmo texto anteriormente correspondido por um grupo de captura. Para isso, use a sintaxe <code>\\k&lt;name&gt;<\/code>&nbsp; em sua express\u00e3o regular:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">fun backRef() {\n    val regex = \"(?&lt;title&gt;\\\\w+), yes \\\\k&lt;title&gt;\".toRegex()\n    val match = regex.find(\"Do you copy? Sir, yes Sir!\")!!\n    println(match.value) \/\/ \"Sir, yes Sir\"\n    println(match.groups[\"title\"]?.value) \/\/ \"Sir\"\n}\n<\/pre>\n<h3><span id=\"Named_groups_in_replacement_expressions\" class=\"ez-toc-section\"><\/span>Grupos nomeados em express\u00f5es de substitui\u00e7\u00e3o<\/h3>\n<p>Finalmente, refer\u00eancias nomeadas para grupos podem ser usadas com express\u00f5es de substitui\u00e7\u00e3o. Considere a fun\u00e7\u00e3o <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-regex\/replace.html\" target=\"_blank\" rel=\"noopener\"><code>replace()<\/code><\/a>, que substitui todas as ocorr\u00eancias da express\u00e3o regular na entrada por uma express\u00e3o de substitui\u00e7\u00e3o, e a fun\u00e7\u00e3o <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-regex\/replace-first.html\" target=\"_blank\" rel=\"noopener\"><code>replaceFirst()<\/code><\/a>, que troca apenas a primeira correspond\u00eancia.<\/p>\n<p>As ocorr\u00eancias de <code>${name}<\/code> na string de substitui\u00e7\u00e3o s\u00e3o substitu\u00eddas pelas subsequ\u00eancias correspondentes aos grupos capturados com o nome especificado. Compare as substitui\u00e7\u00f5es na refer\u00eancia do grupo por nome e por \u00edndice:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">fun dateReplace() {\n    val dateRegex = Regex(\"(?&lt;dd&gt;\\\\d{2})-(?&lt;mm&gt;\\\\d{2})-(?&lt;yyyy&gt;\\\\d{4})\")\n    val input = \"Date of birth: 27-04-2022\"\n    println(dateRegex.replace(input, \"\\${yyyy}-\\${mm}-\\${dd}\")) \/\/ \"Date of birth: 2022-04-27\"  \u2014 by name\n    println(dateRegex.replace(input, \"\\$3-\\$2-\\$1\")) \/\/ \"Date of birth: 2022-04-27\" \u2014 by number\n}\n<\/pre>\n<h2 id=\"try-new-features\"><span id=\"Try_new_features_and_provide_feedback\" class=\"ez-toc-section\"><\/span>Experimente novos recursos e deixe seu feedback&nbsp;<\/h2>\n<p>Esses novos recursos est\u00e3o dispon\u00edveis na vers\u00e3o de demonstra\u00e7\u00e3o 1.7.0: o Kotlin 1.7.0-Beta. Voc\u00ea pode instal\u00e1-lo facilmente no IDE <a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> ou <a href=\"https:\/\/developer.android.com\/studio\/preview\" target=\"_blank\" rel=\"noopener\">Android Studio<\/a>.<\/p>\n<div style=\"background-color: #f1f6fe; margin-bottom: 2px; padding: 5px; margin-right: 0%; text-align: left; min-height: px;\">\n<p>Devido \u00e0 renomea\u00e7\u00e3o dos plug-ins do Android Studio (Beta), a instala\u00e7\u00e3o de plug-ins est\u00e1 dispon\u00edvel a partir das vers\u00f5es 1.6.20+.<\/p>\n<\/div>\n<p>Instale o Kotlin 1.7.0-Beta de uma das seguintes maneiras:<\/p>\n<ul>\n<li>Se voc\u00ea usar o canal de atualiza\u00e7\u00e3o <em>Early Access Preview<\/em>, o IDE sugerir\u00e1 a atualiza\u00e7\u00e3o autom\u00e1tica para 1.7.0-Beta assim que ela estiver dispon\u00edvel.<\/li>\n<li>Se voc\u00ea usar o canal de atualiza\u00e7\u00e3o <em>Stable<\/em>, poder\u00e1 alterar o canal para <em>Early Access Preview<\/em> a qualquer momento, selecionando <strong>Tools<\/strong> | <strong>Kotlin<\/strong> | <strong>Configure Kotlin Plugin Updates<\/strong> no seu IDE. Voc\u00ea poder\u00e1 ent\u00e3o instalar a mais recente vers\u00e3o de demonstra\u00e7\u00e3o. Confira <a href=\"https:\/\/kotlinlang.org\/docs\/install-eap-plugin.html\" target=\"_blank\" rel=\"noopener\">estas instru\u00e7\u00f5es<\/a> para mais detalhes.<\/li>\n<\/ul>\n<p>Sempre existe a chance de baixar as vers\u00f5es mais recentes desses IDEs para obter amplo suporte para o Kotlin:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> para desenvolver aplica\u00e7\u00f5es Kotlin para v\u00e1rias plataformas.<\/li>\n<li><a href=\"https:\/\/developer.android.com\/studio\/preview\" target=\"_blank\" rel=\"noopener\">Android Studio<\/a> para o desenvolvimento de aplica\u00e7\u00f5es m\u00f3veis Android e multiplataforma.<\/li>\n<\/ul>\n<p>Depois de instalar a vers\u00e3o 1.7.0-Beta, n\u00e3o se esque\u00e7a de <a href=\"https:\/\/kotlinlang.org\/docs\/configure-build-for-eap.html\" target=\"_blank\" rel=\"noopener\">alterar a vers\u00e3o do Kotlin<\/a> para 1.7.0-Beta nos seus scripts de build.<\/p>\n<h3><span id=\"If_you_run_into_any_problems\" class=\"ez-toc-section\"><\/span>Se voc\u00ea tiver algum problema:<\/h3>\n<ul>\n<li>Informe issues no <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">nosso rastreador de issues, o YouTrack<\/a>.<\/li>\n<li>Encontre ajuda no <a href=\"https:\/\/app.slack.com\/client\/T09229ZC6\/C0KLZSCHF\" target=\"_blank\" rel=\"noopener\">canal #eap no Kotlin Slack<\/a> (<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">receber um convite<\/a>).<\/li>\n<li>Reverta para a vers\u00e3o est\u00e1vel mais recente. <a href=\"https:\/\/kotlinlang.org\/docs\/install-eap-plugin.html#if-you-run-into-any-problems\" target=\"_blank\" rel=\"noopener\">Saiba como<\/a>.<\/li>\n<\/ul>\n<h3><span id=\"Read_more\" class=\"ez-toc-section\"><\/span>Leia mais<\/h3>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/eap.html\" target=\"_blank\" rel=\"noopener\">Participe do programa de acesso antecipado<\/a><\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\" target=\"_blank\" rel=\"noopener\">Roadmap do Kotlin<\/a><\/li>\n<\/ul>\n<p><em>Artigo original em ingl\u00eas por:<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":244616,"comment_status":"closed","ping_status":"closed","template":"","categories":[826],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/256277"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=256277"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/256277\/revisions"}],"predecessor-version":[{"id":256330,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/256277\/revisions\/256330"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/244616"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=256277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=256277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=256277"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=256277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}