{"id":254299,"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-08T09:01:37","modified_gmt":"2022-06-08T08:01:37","slug":"kotlin-1-7-0-beta","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/fr\/kotlin\/2022\/05\/kotlin-1-7-0-beta\/","title":{"rendered":"Publication de Kotlin 1.7.0-Beta"},"content":{"rendered":"<p>La premi\u00e8re pr\u00e9version de Kotlin 1.7.0 est disponible. D\u00e9couvrez Kotlin 1.7.0-Beta ! Voici quelques-unes des \u00e9volutions qu&#8217;elle apporte :<\/p>\n<ul>\n<li>des modifications de l&#8217;inf\u00e9rence des constructeurs.<\/li>\n<li>le retour des fonctions de collection min() et max().<\/li>\n<li>la stabilisation des types d\u00e9finitivement non nullables.<\/li>\n<li>des mises \u00e0 jour pour le nouveau gestionnaire de m\u00e9moire Kotlin\/Native.<\/li>\n<\/ul>\n<p>Installez la version 1.7.0-Beta pour tester ces fonctionnalit\u00e9s et nous <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">signaler tout probl\u00e8me<\/a> afin de nous aider \u00e0 am\u00e9liorer Kotlin 1.7.0.<\/p>\n<p>Nous vous en dirons plus sur d&#8217;autres fonctionnalit\u00e9s int\u00e9ressantes dans de prochains articles. Restez \u00e0 l&#8217;\u00e9coute\u00a0!<\/p>\n<p align=\"center\"><a class=\"ek-link jb-download-button\" title=\"Installer Kotlin 1.7.0-Beta\" href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/05\/kotlin-1-7-0-beta\/#try-new-features\">Installer Kotlin 1.7.0-Beta<\/a><\/p>\n<p>\u00c0 partir de la version 1.7.0, nous mettons \u00e0 jour notre terminologie concernant la cadence des publications en rempla\u00e7ant \u00ab\u00a0Milestone\u00a0\u00bb par \u00ab\u00a0Beta\u00a0\u00bb. Voici les raisons de cette d\u00e9cision :<\/p>\n<ul>\n<li>Nous souhaitons aligner la terminologie des builds de Kotlin sur la <a href=\"https:\/\/en.wikipedia.org\/wiki\/Software_release_life_cycle#Beta\" target=\"_blank\" rel=\"noopener\">terminologie standard<\/a> du cycle de publication logiciel. La mention \u00ab\u00a0Beta\u00a0\u00bb signifie que nous avons fini d&#8217;ajouter de nouvelles fonctionnalit\u00e9s \u00e0 une version et que nous travaillons \u00e0 sa stabilisation. Pour autant, cette version peut encore faire l&#8217;objet de modifications, notamment sur la base de vos retours d&#8217;exp\u00e9rience et commentaires.<\/li>\n<li>Il y a quelque temps, les compilateurs M-release produisaient du code \u00ab\u00a0pre-release\u00a0\u00bb, ce qui compliquait les tests de ces versions. Mais ce n&#8217;est plus le cas. Nous voulons \u00e9viter toute confusion et souligner qu&#8217;essayer les versions b\u00eata de Kotlin est un processus simple et fortement encourag\u00e9 par l&#8217;\u00e9quipe Kotlin.<\/li>\n<li>Enfin, le terme \u00ab\u00a0Beta\u00a0\u00bb lui-m\u00eame est un appel aux retours d&#8217;exp\u00e9rience de la communaut\u00e9. Il est utile pour vous informer que nous souhaitons recevoir vos commentaires.<\/li>\n<\/ul>\n<p>Nous vous invitons \u00e0 \u00e9valuer Kotlin 1.7.0-Beta et \u00e0 nous faire part de vos commentaires sur <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a> et <a href=\"https:\/\/kotlinlang.slack.com\/archives\/C0KLZSCHF\" target=\"_blank\" rel=\"noopener\">Slack<\/a> (pour les nouveaux membres de Slack : <a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">demandez \u00e0 participer<\/a>).<\/p>\n<h2><span id=\"Changes_to_builder_inference\" class=\"ez-toc-section\"><\/span>Modifications de l&#8217;inf\u00e9rence des constructeurs<\/h2>\n<p>L&#8217;inf\u00e9rence des constructeurs est un type particulier d&#8217;inf\u00e9rence de type, utile lors de l&#8217;appel de fonctions de constructeur g\u00e9n\u00e9riques. Il aide le compilateur \u00e0 inf\u00e9rer les arguments de type d&#8217;un appel en utilisant les informations de type sur les autres appels dans son argument lambda.<\/p>\n<p>La version 1.7.0-Beta de Kotlin apporte de nouvelles modifications \u00e0 l&#8217;inf\u00e9rence des constructeurs. Nous nous rapprochons ainsi de la stabilisation de l&#8217;inf\u00e9rence des constructeurs et de la r\u00e9alisation de l&#8217;un des points de notre <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-45618\/Stabilize-builder-inference\" target=\"_blank\" rel=\"noopener\">feuille de route<\/a>.<\/p>\n<p>Avec cette publication, l&#8217;inf\u00e9rence de constructeur est automatiquement activ\u00e9e si une inf\u00e9rence de type standard ne peut pas obtenir suffisamment d&#8217;informations sur un type sans sp\u00e9cifier l&#8217;option de compilation <code>-Xenable-builder-inference<\/code>, que nous avons <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew16.html#changes-to-builder-inference\" target=\"_blank\" rel=\"noopener\">introduite dans la version 1.6.0<\/a>.<\/p>\n<p>Vous pouvez donc maintenant \u00e9crire vos propres constructeurs qui utilisent l&#8217;inf\u00e9rence de type de constructeur sans appliquer d&#8217;annotations ou d&#8217;options suppl\u00e9mentaires. <a href=\"https:\/\/kotlinlang.org\/docs\/using-builders-with-builder-inference.html\" target=\"_blank\" rel=\"noopener\">Apprenez \u00e0 \u00e9crire des constructeurs g\u00e9n\u00e9riques personnalis\u00e9s<\/a>.<\/p>\n<h2><span id=\"The_return_of_the_min_and_max_collection_functions\" class=\"ez-toc-section\"><\/span>Retour des fonctions de collection min() et max()<\/h2>\n<p>Dans <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew14.html#collections\" target=\"_blank\" rel=\"noopener\">Kotlin 1.4<\/a>, nous avons renomm\u00e9 les fonctions de collection <code>min()<\/code> et <code>max()<\/code> en <code>minOrNull()<\/code> et <code>maxOrNull()<\/code>. Ces nouveaux noms refl\u00e8tent mieux leur comportement : renvoyer <code>null<\/code> si la collection est vide. Cela a \u00e9galement permis d&#8217;aligner le comportement des fonctions sur les conventions de nommage utilis\u00e9es dans l&#8217;API des collections Kotlin.<\/p>\n<p>De m\u00eame, <code>minBy()<\/code>, <code>maxBy()<\/code>, <code>minWith()<\/code> et <code>maxWith()<\/code> ont obtenu leurs synonymes <code>*OrNull()<\/code> dans Kotlin 1.4. Les anciennes fonctions affect\u00e9es par ce changement ont \u00e9t\u00e9 progressivement rendues obsol\u00e8tes.<\/p>\n<p>Kotlin 1.7.0-Beta r\u00e9introduit les noms d&#8217;origine des fonctions, mais avec un type de retour non nullable. Les nouvelles fonctions <code>min()<\/code>, <code>max()<\/code>, <code>minBy()<\/code>, <code>maxBy()<\/code>, <code>minWith()<\/code> et <code>maxWith()<\/code> retournent maintenant strictement l&#8217;\u00e9l\u00e9ment de la collection ou lancent une exception.<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun main() {\n    val numbers = listOf&lt;Int&gt;()\n    println(numbers.maxOrNull()) \/\/ &quot;null&quot;\n    println(numbers.max()) \/\/ &quot;Exception in\u2026 Collection is empty.&quot;\n}\n<\/pre>\n\n\n<p>Consultez <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-38854\" target=\"_blank\" rel=\"noopener\">ce ticket YouTrack<\/a> pour plus de d\u00e9tails.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Stabilizing_of_definitely_non-nullable_types\"><\/span>Stabilisation des types d\u00e9finitivement non nullables<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Les types d\u00e9finitivement non nullables <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1620.html#definitely-non-nullable-types\" target=\"_blank\" rel=\"noopener\">introduits dans Kotlin 1.6.20<\/a> seront stables dans Kotlin 1.7.0.<\/p>\n<p>Ces types ont \u00e9t\u00e9 ajout\u00e9s pour fournir une meilleure interop\u00e9rabilit\u00e9 lors de l&#8217;extension des classes et interfaces Java g\u00e9n\u00e9riques.<\/p>\n<p>Depuis Kotlin 1.6.20, il est possible de marquer un param\u00e8tre de type g\u00e9n\u00e9rique comme d\u00e9finitivement non nullable sur le site d&#8217;utilisation avec la nouvelle syntaxe <code>T &amp; Any<\/code>. La forme syntaxique provient d&#8217;une notation de <a href=\"https:\/\/en.wikipedia.org\/wiki\/Intersection_type\" target=\"_blank\" rel=\"noopener\">types d&#8217;intersection<\/a>. Elle est maintenant limit\u00e9e \u00e0 un param\u00e8tre de type avec des limites sup\u00e9rieures nullables sur le c\u00f4t\u00e9 gauche de <code>&amp;<\/code> et non-nullables <code>Any<\/code> sur le c\u00f4t\u00e9 droit&nbsp;:<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun &lt;T&gt; elvisLike(x: T, y: T &amp; Any): T &amp; Any = x ?: y\n\nfun main() {\n    elvisLike&lt;String&gt;(&quot;&quot;, &quot;&quot;).length \/\/ OK\n    elvisLike&lt;String&gt;(&quot;&quot;, null).length \/\/ Error: &#039;null&#039; cannot be a value of a non-null type\n\n    elvisLike&lt;String?&gt;(null, &quot;&quot;).length \/\/ OK\n    elvisLike&lt;String?&gt;(null, null).length \/\/ Error: &#039;null&#039; cannot be a value of a non-null type\n}\n<\/pre>\n\n\n<p>Les types d\u00e9finitivement non nullables sont activ\u00e9s par d\u00e9faut dans cette version b\u00eata. Aucune \u00e9tape suppl\u00e9mentaire n&#8217;est requise.<\/p>\n<p>Pour en savoir plus sur les types d\u00e9finitivement non-nullables, consultez le <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 class=\"ez-toc-section\" id=\"Matching_with_Regex_at_a_particular_position\"><\/span>Correspondance avec une expression r\u00e9guli\u00e8re (regex) \u00e0 une position particuli\u00e8re<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Les fonctions <code>Regex.matchAt()<\/code> et <code>Regex.matchesAt()<\/code>, <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew1530.html#matching-with-regex-at-a-particular-position\" target=\"_blank\" rel=\"noopener\"> introduites dans la version 1.5.30<\/a>, sont maintenant stables. Elles permettent de v\u00e9rifier si une expression r\u00e9guli\u00e8re a une correspondance exacte \u00e0 une position particuli\u00e8re dans une <code>String<\/code> ou <code>CharSequence<\/code>.<\/p>\n<ul>\n<li><code>matchesAt()<\/code> recherche une correspondance et renvoie un r\u00e9sultat bool\u00e9en :<\/li>\n<\/ul>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun main(){\n    val releaseText = &quot;Kotlin 1.7.0 is on its way!&quot;\n    \/\/ regular expression: one digit, dot, one digit, dot, one or more digits\n    val versionRegex = &quot;\\\\d[.]\\\\d[.]\\\\d+&quot;.toRegex()\n\n    println(versionRegex.matchesAt(releaseText, 0)) \/\/ &quot;false&quot;\n    println(versionRegex.matchesAt(releaseText, 7)) \/\/ &quot;true&quot;\n}\n<\/pre>\n\n\n<ul>\n<li><code>matchAt()<\/code> renvoie la correspondance si elle est trouv\u00e9e, ou renvoie <code>null<\/code> si elle ne l&#8217;est pas :<\/li>\n<\/ul>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun main(){\n    val releaseText = &quot;Kotlin 1.7.0 is on its way!&quot;\n    val versionRegex = &quot;\\\\d[.]\\\\d[.]\\\\d+&quot;.toRegex()\n\n    println(versionRegex.matchAt(releaseText, 0)) \/\/ &quot;null&quot;\n    println(versionRegex.matchAt(releaseText, 7)?.value) \/\/ &quot;1.7.0&quot;\n}\n<\/pre>\n\n\n<p>N&#8217;h\u00e9sitez pas \u00e0 nous faire part de vos retours dans <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-34021\" target=\"_blank\" rel=\"noopener\">ce ticket YouTrack<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"New_KotlinNative_Memory_Manager\"><\/span>Nouveau gestionnaire de m\u00e9moire Kotlin\/Native<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nous continuons \u00e0 collecter les retours en vue d&#8217;am\u00e9liorer le nouveau gestionnaire de m\u00e9moire Kotlin\/Native. Vous pouvez actuellement essayer la version Alpha dans vos projets. Kotlin 1.7.0-Beta apporte de nouvelles am\u00e9liorations de performance qui permettront d&#8217;am\u00e9liorer l&#8217;exp\u00e9rience de d\u00e9veloppement.<\/p>\n<p>Le nouveau gestionnaire de m\u00e9moire \u00e9limine les diff\u00e9rences entre les plateformes JVM et Native. Il offre une exp\u00e9rience de d\u00e9veloppement coh\u00e9rente dans les projets multiplateformes. Il vous sera par exemple beaucoup plus facile de cr\u00e9er de nouvelles applications mobiles multiplateformes fonctionnant \u00e0 la fois sur Android et iOS.<\/p>\n<p>Le nouveau gestionnaire de m\u00e9moire Kotlin\/Native l\u00e8ve les restrictions sur le partage d&#8217;objets entre les threads. Il fournit \u00e9galement des primitives de programmation concurrente sans fuite qui sont s\u00fbres et ne n\u00e9cessitent aucune gestion ou annotation sp\u00e9ciale.<\/p>\n<p>Le nouveau gestionnaire de m\u00e9moire deviendra le gestionnaire par d\u00e9faut dans les futures versions, nous vous encourageons donc \u00e0 l&#8217;essayer d\u00e8s maintenant. <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/08\/try-the-new-kotlin-native-memory-manager-development-preview\/\">Apprenez-en davantage<\/a> sur le nouveau gestionnaire de m\u00e9moire, d\u00e9couvrez des projets de d\u00e9mon ou allez directement aux <a href=\"https:\/\/github.com\/JetBrains\/kotlin\/blob\/master\/kotlin-native\/NEW_MM.md\" target=\"_blank\" rel=\"noopener\">instructions de migration<\/a> pour l&#8217;essayer.<\/p>\n<p>Essayez d&#8217;utiliser le nouveau gestionnaire de m\u00e9moire dans vos projets pour d\u00e9couvrir son fonctionnement et partagez vos retours d&#8217;exp\u00e9rience dans notre outil de suivi des tickets, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-48525\" target=\"_blank\" rel=\"noopener\">YouTrack<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Support_for_named_capturing_groups_in_JS_and_Native\"><\/span>Prise en charge des groupes de capture nomm\u00e9s en JS et Native<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Depuis Kotlin 1.7.0-Beta, les groupes de capture nomm\u00e9s sont pris en charge non seulement sur la JVM (1.8 et plus) mais aussi sur JS et Native.<\/p>\n<p>Pour donner un nom \u00e0 un groupe de capture, utilisez la syntaxe <code>(?&lt;name&gt;group)<\/code> dans votre expression r\u00e9guli\u00e8re. Pour obtenir le texte correspondant \u00e0 un groupe, appelez la nouvelle fonction <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/get.html\" target=\"_blank\" rel=\"noopener\"><code>MatchGroupCollection.get()<\/code><\/a> et envoyez le nom du groupe.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Retrieve_matched_group_value_by_name\"><\/span>R\u00e9cup\u00e9rer la valeur du groupe correspondant par nom<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Prenons l&#8217;exemple suivant pour faire correspondre les coordonn\u00e9es d&#8217;une ville. Pour obtenir une collection de groupes correspondant \u00e0 l&#8217;expression r\u00e9guli\u00e8re, utilisez <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-match-result\/groups.html\" target=\"_blank\" rel=\"noopener\"><code>groups<\/code><\/a>. Comparez la r\u00e9cup\u00e9ration du contenu d&#8217;un groupe par son num\u00e9ro (index) et par son nom en utilisant <code>value<\/code>&nbsp;:<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun main() {\n    val regex = &quot;\\\\b(?&lt;city&gt;[A-Za-z\\\\s]+),\\\\s(?&lt;state&gt;[A-Z]{2}):\\\\s(?&lt;areaCode&gt;[0-9]{3})\\\\b&quot;.toRegex()\n    val input = &quot;Coordinates: Austin, TX: 123&quot;\n \n    val match = regex.find(input)!!\n    println(match.groups[&quot;city&quot;]?.value) \/\/ &quot;Austin&quot; \u2014 by name\n    println(match.groups[2]?.value) \/\/ &quot;TX&quot; \u2014 by number\n}\n<\/pre>\n\n\n<h3><span class=\"ez-toc-section\" id=\"Named_backreferencing\"><\/span>R\u00e9f\u00e9rencement arri\u00e8re nomm\u00e9<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>D\u00e9sormais, vous pouvez \u00e9galement utiliser les noms de groupe lors du r\u00e9f\u00e9rencement arri\u00e8re de groupes. Les r\u00e9f\u00e9rences arri\u00e8re correspondent au texte pr\u00e9c\u00e9demment obtenu par un groupe de capture. Pour cela, utilisez la syntaxe <code>\\k&lt;name&gt;<\/code>&nbsp; dans votre expression r\u00e9guli\u00e8re :<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun backRef() {\n    val regex = &quot;(?&lt;title&gt;\\\\w+), yes \\\\k&lt;title&gt;&quot;.toRegex()\n    val match = regex.find(&quot;Do you copy? Sir, yes Sir!&quot;)!!\n    println(match.value) \/\/ &quot;Sir, yes Sir&quot;\n    println(match.groups[&quot;title&quot;]?.value) \/\/ &quot;Sir&quot;\n}\n<\/pre>\n\n\n<h3><span class=\"ez-toc-section\" id=\"Named_groups_in_replacement_expressions\"><\/span>Groupes nomm\u00e9s dans les expressions de remplacement<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Enfin, les r\u00e9f\u00e9rences de groupes nomm\u00e9s peuvent \u00eatre utilis\u00e9es avec des expressions de remplacement. Consid\u00e9rons la fonction <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-regex\/replace.html\" target=\"_blank\" rel=\"noopener\"><code>replace()<\/code><\/a> qui substitue toutes les occurrences de l&#8217;expression r\u00e9guli\u00e8re dans l&#8217;entr\u00e9e par une expression de remplacement, et la fonction <a href=\"https:\/\/kotlinlang.org\/api\/latest\/jvm\/stdlib\/kotlin.text\/-regex\/replace-first.html\" target=\"_blank\" rel=\"noopener\"><code>replaceFirst()<\/code><\/a> qui remplace uniquement la premi\u00e8re correspondance.<\/p>\n<p>Les occurrences de <code>${name}<\/code> dans la cha\u00eene de remplacement sont remplac\u00e9es par les sous-s\u00e9quences correspondant aux groupes captur\u00e9s avec le nom sp\u00e9cifi\u00e9. Comparez les remplacements dans la r\u00e9f\u00e9rence du groupe par nom et par index :<\/p>\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\nfun dateReplace() {\n    val dateRegex = Regex(&quot;(?&lt;dd&gt;\\\\d{2})-(?&lt;mm&gt;\\\\d{2})-(?&lt;yyyy&gt;\\\\d{4})&quot;)\n    val input = &quot;Date of birth: 27-04-2022&quot;\n    println(dateRegex.replace(input, &quot;\\${yyyy}-\\${mm}-\\${dd}&quot;)) \/\/ &quot;Date of birth: 2022-04-27&quot;  \u2014 by name\n    println(dateRegex.replace(input, &quot;\\$3-\\$2-\\$1&quot;)) \/\/ &quot;Date of birth: 2022-04-27&quot; \u2014 by number\n}\n<\/pre>\n\n\n<h2 id=\"try-new-features\"><span id=\"Try_new_features_and_provide_feedback\" class=\"ez-toc-section\"><\/span>Essayez les nouvelles fonctionnalit\u00e9s et donnez votre avis<\/h2>\n<p>Ces nouvelles fonctionnalit\u00e9s sont disponibles dans la pr\u00e9version 1.7.0, Kotlin 1.7.0-Beta. Vous pouvez facilement l&#8217;installer dans votre 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>En raison du changement de nom des plugins Android Studio (B\u00eata), l&#8217;installation des plugins est disponible \u00e0 partir des versions 1.6.20 et ult\u00e9rieures.<\/p>\n<\/div>\n<p>Il y a plusieurs fa\u00e7ons d&#8217;installer Kotlin 1.7.0-Beta :<\/p>\n<ul>\n<li>Si vous utilisez le canal de mise \u00e0 jour <em>Early Access Preview<\/em>, l&#8217;IDE vous propose automatiquement la mise \u00e0 jour vers la version 1.7.0-Beta d\u00e8s qu&#8217;elle est disponible.<\/li>\n<li>Si vous utilisez le canal de mise \u00e0 jour <em>Stable<\/em>, vous pouvez passer au canal <em> Early Access Preview<\/em> \u00e0 tout moment en cliquant sur <strong>Tools<\/strong> | <strong>Kotlin<\/strong> | <strong>Configure Kotlin Plugin Updates<\/strong> dans votre IDE. Vous pourrez alors installer la derni\u00e8re pr\u00e9version. Consultez <a href=\"https:\/\/kotlinlang.org\/docs\/install-eap-plugin.html\" target=\"_blank\" rel=\"noopener\">ces instructions<\/a> pour en savoir plus.<\/li>\n<\/ul>\n<p>Vous pouvez toujours t\u00e9l\u00e9charger les derni\u00e8res versions des IDE suivants pour b\u00e9n\u00e9ficier d&#8217;une prise en charge \u00e9tendue pour Kotlin :<\/p>\n<ul>\n<li><a href=\"https:\/\/www.jetbrains.com\/idea\/download\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> pour le d\u00e9veloppement d&#8217;applications Kotlin pour diverses plateformes.<\/li>\n<li><a href=\"https:\/\/developer.android.com\/studio\/preview\" target=\"_blank\" rel=\"noopener\">Android Studio<\/a> pour le d\u00e9veloppement d&#8217;applications mobiles Android et multiplateformes.<\/li>\n<\/ul>\n<p>Une fois que vous aurez install\u00e9 la version 1.7.0-Beta, n&#8217;oubliez pas de <a href=\"https:\/\/kotlinlang.org\/docs\/configure-build-for-eap.html\" target=\"_blank\" rel=\"noopener\">modifier la version de Kotlin<\/a> en 1.7.0-Beta dans vos scripts de builds.<\/p>\n<h3><span id=\"If_you_run_into_any_problems\" class=\"ez-toc-section\"><\/span>En cas de probl\u00e8me<\/h3>\n<ul>\n<li>Signalez-nous les probl\u00e8mes sur <a href=\"https:\/\/kotl.in\/issue\" target=\"_blank\" rel=\"noopener\">YouTrack, notre outil de suivi des tickets<\/a>.<\/li>\n<li>Trouvez de l&#8217;aide sur le <a href=\"https:\/\/app.slack.com\/client\/T09229ZC6\/C0KLZSCHF\" target=\"_blank\" rel=\"noopener\">canal #eap du Slack Kotlin<\/a> (<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">obtenir une invitation<\/a>).<\/li>\n<li>Revenez \u00e0 la derni\u00e8re version stable. <a href=\"https:\/\/kotlinlang.org\/docs\/install-eap-plugin.html#if-you-run-into-any-problems\" target=\"_blank\" rel=\"noopener\">Voir comment<\/a>.<\/li>\n<\/ul>\n<h3><span id=\"Read_more\" class=\"ez-toc-section\"><\/span>En lire plus<\/h3>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/eap.html\" target=\"_blank\" rel=\"noopener\">Participez au programme d&#8217;acc\u00e8s anticip\u00e9 (EAP)<\/a><\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\" target=\"_blank\" rel=\"noopener\">Feuille de route de Kotlin<\/a><\/li>\n<\/ul>\n\n\n<p>Auteur de l&#8217;arti<em>cle original en anglais<\/em> :<\/p>\n\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":813,"featured_media":244612,"comment_status":"closed","ping_status":"closed","template":"","categories":[826],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/254299"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=254299"}],"version-history":[{"count":11,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/254299\/revisions"}],"predecessor-version":[{"id":256309,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/254299\/revisions\/256309"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/244612"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=254299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=254299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=254299"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=254299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}