{"id":256299,"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:57:12","modified_gmt":"2022-06-15T05:57:12","slug":"kotlin-1-7-0-beta","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/es\/kotlin\/2022\/05\/kotlin-1-7-0-beta\/","title":{"rendered":"Lanzamiento de Kotlin 1.7.0 Beta"},"content":{"rendered":"<p>Ya est\u00e1 disponible la primera vista previa de la versi\u00f3n 1.7.0. \u00a1Presentamos Kotlin 1.7.0-Beta! Algunos puntos destacados de este avance:<\/p>\n<ul>\n<li>Cambios en la inferencia del compilador.<\/li>\n<li>El retorno de las funciones de colecci\u00f3n min() y max().<\/li>\n<li>Estabilizaci\u00f3n de tipos definitivamente no anulables.<\/li>\n<li>Actualizaciones para el nuevo gestor de memoria Kotlin\/Native.<\/li>\n<\/ul>\n<p>Instale la versi\u00f3n 1.7.0-Beta para probar estas funcionalidades e <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">informe de cualquier incidencia<\/a> que encuentre para ayudarnos a mejorar Kotlin 1.7.0.<\/p>\n<p>Le hablaremos de otras funcionalidades geniales en pr\u00f3ximos art\u00edculos. \u00a1Est\u00e9 atento!<\/p>\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Instalar Kotlin 1.7.0-Beta\" href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/05\/kotlin-1-7-0-beta\/#try-new-features\">Instalar Kotlin 1.7.0-Beta<\/a><\/p>\n<p>A partir de la versi\u00f3n 1.7.0, vamos a actualizar nuestra terminolog\u00eda de cadencia cambiando \u00abMilestone\u00bb por \u00abBeta\u00bb. Esta decisi\u00f3n se debe a varias razones:<\/p>\n<ul>\n<li>Queremos que la terminolog\u00eda de las compilaciones de Kotlin est\u00e9 m\u00e1s alineada con <a href=\"https:\/\/en.wikipedia.org\/wiki\/Software_release_life_cycle#Beta\" target=\"_blank\" rel=\"noopener\">la terminolog\u00eda est\u00e1ndar<\/a> del ciclo de lanzamiento de software. Para ser m\u00e1s precisos, \u00abBeta\u00bb significa que hemos terminado de a\u00f1adir nuevas funcionalidades a esa versi\u00f3n espec\u00edfica y estamos estabiliz\u00e1ndola. Aunque los cambios finales se aplicar\u00e1n, incluyendo los cambios basados en sus comentarios.<\/li>\n<li>Hace alg\u00fan tiempo, los compiladores de la versi\u00f3n M produc\u00edan c\u00f3digo \u00abprelanzamiento\u00bb, lo que hac\u00eda que estas versiones fueran m\u00e1s dif\u00edciles de probar. Pero ya no es as\u00ed. Queremos evitar cualquier confusi\u00f3n y hacer hincapi\u00e9 en que probar las versiones beta de Kotlin es un proceso sencillo y que el equipo de Kotlin recomienda encarecidamente.<\/li>\n<li>Por \u00faltimo, pero no por ello menos importante, el t\u00e9rmino \u00abBeta\u00bb en s\u00ed mismo es una llamada a recibir comentarios de la comunidad. Lo utilizamos para hacerle saber que queremos que comparta su opini\u00f3n con nosotros.<\/li>\n<\/ul>\n<p>Le invitamos a evaluar Kotlin 1.7.0-Beta y compartir sus comentarios con nosotros en <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a> y <a href=\"https:\/\/kotlinlang.slack.com\/archives\/C0KLZSCHF\" target=\"_blank\" rel=\"noopener\">Slack<\/a> (si es nuevo miembro de Slack: solicite <a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">una invitaci\u00f3n<\/a>).<\/p>\n<h2><span id=\"Changes_to_builder_inference\" class=\"ez-toc-section\"><\/span>Cambios en la inferencia del compilador<\/h2>\n<p>La inferencia del compilador es un tipo especial de inferencia de tipo que es \u00fatil cuando se llama a funciones gen\u00e9ricas del compilador. Ayuda al compilador a inferir el tipo de argumentos de una llamada utilizando la informaci\u00f3n de tipo de otras llamadas dentro de su argumento lambda.<\/p>\n<p>Kotlin 1.7.0-Beta incluye m\u00e1s cambios en la inferencia del compilador. Nos acerca a la estabilizaci\u00f3n de la inferencia del compilador y a la finalizaci\u00f3n de uno de los elementos de nuestra <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-45618\/Stabilize-builder-inference\" target=\"_blank\" rel=\"noopener\">hoja de ruta<\/a>.<\/p>\n<p>Con esta versi\u00f3n, la inferencia del compilador se activa autom\u00e1ticamente si una inferencia de tipo regular no puede obtener suficiente informaci\u00f3n sobre un tipo sin especificar la opci\u00f3n del compilador <code>-Xenable-builder-inference<\/code>, que <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew16.html#changes-to-builder-inference\" target=\"_blank\" rel=\"noopener\">introdujimos en la versi\u00f3n 1.6.0<\/a>.<\/p>\n<p>Esto significa que ahora puede escribir sus propios compiladores que utilicen la inferencia de tipo del compilador sin aplicar ninguna anotaci\u00f3n u opci\u00f3n adicional. <a href=\"https:\/\/kotlinlang.org\/docs\/using-builders-with-builder-inference.html\" target=\"_blank\" rel=\"noopener\">Aprenda a escribir compiladores gen\u00e9ricos personalizados<\/a>.<\/p>\n<h2><span id=\"The_return_of_the_min_and_max_collection_functions\" class=\"ez-toc-section\"><\/span>El retorno de las funciones de recogida min() y max()<\/h2>\n<p>En <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew14.html#collections\" target=\"_blank\" rel=\"noopener\">Kotlin 1.4<\/a>, cambiamos el nombre de las funciones de colecci\u00f3n <code>min()<\/code> y <code>max()<\/code> a <code>minOrNull()<\/code> y <code>maxOrNull()<\/code>. Estos nuevos nombres reflejan mejor su comportamiento: devuelven <code>null<\/code> si la colecci\u00f3n de receptores est\u00e1 vac\u00eda. Tambi\u00e9n ha ayudado a alinear el comportamiento de las funciones con las convenciones de nomenclatura utilizadas en toda la API de colecciones de Kotlin.<\/p>\n<p>Lo mismo ocurri\u00f3 con <code>minBy()<\/code>, <code>maxBy()<\/code>, <code>minWith()<\/code> y <code>maxWith()<\/code>, que obtuvieron sus sin\u00f3nimos <code>*OrNull()<\/code> en Kotlin 1.4. Las funciones antiguas afectadas por este cambio se han ido eliminando gradualmente.<\/p>\n<p>Kotlin 1.7.0-Beta vuelve a introducir los nombres originales de las funciones, pero con un tipo de retorno no anulable. Los renovados <code>min()<\/code>, <code>max()<\/code>, <code>minBy()<\/code>, <code>maxBy()<\/code>, <code>minWith()<\/code> y <code>maxWith()<\/code> ahora devuelven estrictamente el elemento de la colecci\u00f3n o lanzan una excepci\u00f3n.<\/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\">esta incidencia de YouTrack<\/a> para obtener m\u00e1s detalles.<\/p>\n<h2><span id=\"Stabilizing_of_definitely_non-nullable_types\" class=\"ez-toc-section\"><\/span>Estabilizaci\u00f3n de tipos definitivamente no anulables<\/h2>\n<p>Kotlin 1.7.0 contar\u00e1 con tipos estables definitivamente no anulables, que se <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1620.html#definitely-non-nullable-types\" target=\"_blank\" rel=\"noopener\">introdujeron en Kotlin 1.6.20<\/a>.<\/p>\n<p>Estos tipos se han a\u00f1adido para proporcionar una mejor interoperabilidad cuando se extienden las clases e interfaces gen\u00e9ricas de Java.<\/p>\n<p>Desde Kotlin 1.6.20, se puede marcar un par\u00e1metro de tipo gen\u00e9rico como definitivamente no anulable en el lugar de uso con la nueva sintaxis <code>T &amp; Any<\/code>. La forma sint\u00e1ctica proviene de una notaci\u00f3n de <a href=\"https:\/\/en.wikipedia.org\/wiki\/Intersection_type\" target=\"_blank\" rel=\"noopener\">tipos de intersecci\u00f3n<\/a> y ahora se limita a un par\u00e1metro de tipo con l\u00edmites superiores anulables en el lado izquierdo de <code>&amp;<\/code> y <code>Any<\/code> no anulable en el lado derecho:<\/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>Los tipos definitivamente no anulables est\u00e1n habilitados por defecto en esta versi\u00f3n Beta. No tendr\u00e1 que hacer nada m\u00e1s.<\/p>\n<p>Descubra m\u00e1s sobre los tipos definitivamente no anulables en <a href=\"https:\/\/github.com\/Kotlin\/KEEP\/blob\/c72601cf35c1e95a541bb4b230edb474a6d1d1a8\/proposals\/definitely-non-nullable-types.md\" target=\"_blank\" rel=\"noopener\">la secci\u00f3n KEEP<\/a>.<\/p>\n<h2><span id=\"Matching_with_Regex_at_a_particular_position\" class=\"ez-toc-section\"><\/span>Coincidencia con Regex en una posici\u00f3n determinada<\/h2>\n<p>Las funciones <code>Regex.matchAt()<\/code> y <code>Regex.matchesAt()<\/code>, <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#matching-with-regex-at-a-particular-position\" target=\"_blank\" rel=\"noopener\">introducidas en 1.5.30<\/a>, son ahora estables. Proporcionan una forma de comprobar si una expresi\u00f3n regular presenta una coincidencia exacta en una posici\u00f3n concreta en una <code>String<\/code> o <code>CharSequence<\/code>.<\/p>\n<ul>\n<li><code>matchesAt()<\/code> busca una coincidencia y devuelve un 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> devuelve la coincidencia si se encuentra, o <code>null<\/code> si no se encuentra:<\/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>Le agradeceremos sus comentarios en <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-34021\" target=\"_blank\" rel=\"noopener\">esta incidencia de YouTrack<\/a>.<\/p>\n<h2><span id=\"New_KotlinNative_Memory_Manager\" class=\"ez-toc-section\"><\/span>Nuevo gestor de memoria Kotlin\/Native<\/h2>\n<p>Continuamos recopilando opiniones sobre el uso y mejorando el nuevo gestor de memoria Kotlin\/Native. Actualmente, puede probar la versi\u00f3n Alpha en sus proyectos. Kotlin 1.7.0-Beta incorpora nuevas mejoras de rendimiento que mejorar\u00e1n la experiencia de los desarrolladores.<\/p>\n<p>El nuevo gestor de memoria elimina las diferencias entre JVM y las plataformas nativas. Proporciona una experiencia coherente al desarrollador en proyectos multiplataforma. Por ejemplo, le resultar\u00e1 mucho m\u00e1s f\u00e1cil crear nuevas aplicaciones m\u00f3viles multiplataforma que funcionen tanto en Android como en iOS.<\/p>\n<p>El nuevo gestor de memoria de Kotlin\/Native elimina las restricciones para compartir objetos entre hilos. Tambi\u00e9n proporciona primitivas de programaci\u00f3n concurrente sin fugas que son seguras y no requieren ninguna gesti\u00f3n ni anotaciones especiales.<\/p>\n<p>El nuevo gestor de memoria se convertir\u00e1 en el predeterminado en futuras versiones, as\u00ed que te animamos a que lo pruebes ahora. <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/08\/try-the-new-kotlin-native-memory-manager-development-preview\/\">Obtenga m\u00e1s<\/a> informaci\u00f3n sobre el nuevo gestor de memoria y explore los proyectos demo, o pase directamente a las <a href=\"https:\/\/github.com\/JetBrains\/kotlin\/blob\/master\/kotlin-native\/NEW_MM.md\" target=\"_blank\" rel=\"noopener\">instrucciones de migraci\u00f3n<\/a> para probarlo usted mismo.<\/p>\n<p>Pruebe a utilizar el nuevo gestor de memoria en sus proyectos para ver c\u00f3mo funciona y comparta sus comentarios en nuestro sistema de seguimiento de incidencias, <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>Compatibilidad con grupos de captura con nombre en JS y Native<\/h2>\n<p>Desde Kotlin 1.7.0-Beta, los grupos de captura con nombre se admiten no solo en la JVM (1.8 y posteriores) sino tambi\u00e9n en JS y Native.<\/p>\n<p>Para asignar un nombre a un grupo de captura, utilice la sintaxis <code>(?&lt;name&gt;group)<\/code> en su expresi\u00f3n regular. Para obtener el texto coincidente con un grupo, llame a la nueva funci\u00f3n <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/get.html\" target=\"_blank\" rel=\"noopener\"><code>MatchGroupCollection.get()<\/code><\/a> y pase el nombre del grupo.<\/p>\n<h3><span id=\"Retrieve_matched_group_value_by_name\" class=\"ez-toc-section\"><\/span>Recuperar el valor del grupo coincidente por su nombre<\/h3>\n<p>Considere este ejemplo para hacer coincidir las coordenadas de la ciudad. Para obtener una colecci\u00f3n de grupos que coincidan con la expresi\u00f3n regular, utilice <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-match-result\/groups.html\" target=\"_blank\" rel=\"noopener\"><code>groups<\/code><\/a>. Compare la recuperaci\u00f3n del contenido de un grupo por su n\u00famero (\u00edndice) y por su nombre mediante <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>Referencia de retorno con nombre<\/h3>\n<p>Ahora tambi\u00e9n se pueden utilizar los nombres de los grupos cuando se hace referencia a ellos. Las referencias de retorno coinciden con el mismo texto que previamente ha coincidido con un grupo de captura. Para ello, utilice la sintaxis <code>\\k&lt;name&gt;<\/code> en su expresi\u00f3n 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 con nombre en expresiones de sustituci\u00f3n<\/h3>\n<p>Por \u00faltimo, las referencias a grupos con nombre pueden utilizarse con expresiones de sustituci\u00f3n. Considere la funci\u00f3n <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-regex\/replace.html\" target=\"_blank\" rel=\"noopener\"><code>replace()<\/code><\/a> que sustituye todas las apariciones de la expresi\u00f3n regular en la entrada por una expresi\u00f3n de sustituci\u00f3n, y la funci\u00f3n <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-regex\/replace-first.html\" target=\"_blank\" rel=\"noopener\"><code>replaceFirst()<\/code><\/a> que sustituye solo la primera coincidencia.<\/p>\n<p>Las ocurrencias de <code>${name}<\/code> en la cadena de sustituci\u00f3n se sustituyen por las subsecuencias correspondientes a los grupos capturados con el nombre especificado. Compare los reemplazos en la referencia del grupo por nombre y 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>Pruebe nuevas funcionalidades y cu\u00e9ntenos su opini\u00f3n<\/h2>\n<p>Estas nuevas funcionalidades est\u00e1n disponibles en la versi\u00f3n de avance 1.7.0, Kotlin 1.7.0-Beta. Puede instalarla f\u00e1cilmente en su IDE <a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">IntelliJ<\/a> o <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>Debido al cambio de nombre de los complementos de Android Studio (Beta), la instalaci\u00f3n de los complementos est\u00e1 disponible a partir de la versi\u00f3n 1.6.20.<\/p>\n<\/div>\n<p>Instale Kotlin 1.7.0-Beta de cualquiera de las siguientes maneras:<\/p>\n<ul>\n<li>Si utiliza el canal de actualizaci\u00f3n <em>Early Access Preview<\/em>, el IDE le sugerir\u00e1 la actualizaci\u00f3n autom\u00e1tica a la versi\u00f3n 1.7.0-Beta en cuanto est\u00e9 disponible.<\/li>\n<li>Si utiliza el canal de actualizaci\u00f3n <em>Stable<\/em>, puede cambiar el canal a <em>Early Access Preview<\/em> en cualquier momento seleccionando <strong>Tools<\/strong> | <strong>Kotlin<\/strong> | <strong>Configure Kotlin Plugin Updates<\/strong> en su IDE. Ahora ya podr\u00e1 instalar la \u00faltima versi\u00f3n de avance. Consulte <a href=\"https:\/\/kotlinlang.org\/docs\/install-eap-plugin.html\" target=\"_blank\" rel=\"noopener\">estas instrucciones<\/a> para obtener m\u00e1s detalles.<\/li>\n<\/ul>\n<p>Siempre puede descargar las versiones m\u00e1s recientes de estos IDE para beneficiarse de la amplia compatibilidad con Kotlin:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> para el desarrollo de aplicaciones Kotlin para diversas plataformas.<\/li>\n<li><a href=\"https:\/\/developer.android.com\/studio\/preview\" target=\"_blank\" rel=\"noopener\">Android Studio<\/a> para desarrollar aplicaciones m\u00f3viles Android y multiplataforma.<\/li>\n<\/ul>\n<p>Una vez que haya instalado la versi\u00f3n 1.7.0-Beta, no olvide <a href=\"https:\/\/kotlinlang.org\/docs\/configure-build-for-eap.html\" target=\"_blank\" rel=\"noopener\">cambiar la versi\u00f3n de Kotlin<\/a> a 1.7.0-Beta en sus scripts de compilaci\u00f3n.<\/p>\n<h3><span id=\"If_you_run_into_any_problems\" class=\"ez-toc-section\"><\/span>Si le surge alg\u00fan problema:<\/h3>\n<ul>\n<li>Informe acerca de los problemas en <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">nuestro sistema de seguimiento de incidencias, YouTrack<\/a>.<\/li>\n<li>Busque ayuda en el <a href=\"https:\/\/app.slack.com\/client\/T09229ZC6\/C0KLZSCHF\" target=\"_blank\" rel=\"noopener\"> canal #eap en Kotlin Slack<\/a> (<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">obtenga una invitaci\u00f3n<\/a>).<\/li>\n<li>Retroceda a la \u00faltima versi\u00f3n estable. <a href=\"https:\/\/kotlinlang.org\/docs\/install-eap-plugin.html#if-you-run-into-any-problems\" target=\"_blank\" rel=\"noopener\">Aprenda c\u00f3mo hacerlo<\/a>.<\/li>\n<\/ul>\n<h3><span id=\"Read_more\" class=\"ez-toc-section\"><\/span>Leer m\u00e1s<\/h3>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/eap.html\" target=\"_blank\" rel=\"noopener\">Participar en el programa de acceso anticipado<\/a><\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\" target=\"_blank\" rel=\"noopener\">Hoja de ruta de Kotlin<\/a><\/li>\n<\/ul>\n<p><em>Art\u00edculo original en ingl\u00e9s de:<\/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":244618,"comment_status":"closed","ping_status":"closed","template":"","categories":[826],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/256299"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=256299"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/256299\/revisions"}],"predecessor-version":[{"id":257350,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/256299\/revisions\/257350"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/244618"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=256299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=256299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=256299"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=256299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}