{"id":217911,"date":"2021-12-09T17:01:21","date_gmt":"2021-12-09T16:01:21","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kotlin\/2021\/12\/kotlin-features-survey-2021-results\/"},"modified":"2022-01-17T14:53:51","modified_gmt":"2022-01-17T13:53:51","slug":"resultats-de-l-enquete-2021-sur-les-fonctionnalites-de-kotlin","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/fr\/kotlin\/2021\/12\/resultats-de-l-enquete-2021-sur-les-fonctionnalites-de-kotlin\/","title":{"rendered":"R\u00e9sultats de l&#8217;Enqu\u00eate 2021 sur les fonctionnalit\u00e9s de Kotlin"},"content":{"rendered":"<p>Il y a quelques mois, nous avons organis\u00e9 le deuxi\u00e8me <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/06\/kotlin-features-survey-edition-2\/\">sondage sur les fonctionnalit\u00e9s de Kotlin les plus attendues<\/a>. Les principaux objectifs de cette enqu\u00eate \u00e9taient de savoir quelles futures fonctionnalit\u00e9s de Kotlin \u00e9taient les plus importantes pour les utilisateurs et de d\u00e9terminer la diversit\u00e9s des cas d&#8217;usage. Les r\u00e9sultats de cette enqu\u00eate vont nous aider \u00e0 \u00e9tablir les priorit\u00e9s de nos plans de d\u00e9veloppement du langage sur le long terme. Merci \u00e0 toutes les personnes qui ont r\u00e9pondu aux questions !<\/p>\n<p>Vous trouverez ci-dessous les r\u00e9sultats de l&#8217;enqu\u00eate et un compte rendu de <a class=\"ek-link\" href=\"https:\/\/twitter.com\/relizarov\" target=\"_blank\" rel=\"noopener\">Roman Elizarov<\/a>, Chef de projet pour Kotlin, sur nos projets concernant les fonctionnalit\u00e9s ayant re\u00e7u le plus de votes. Pour en savoir plus, vous pouvez consulter <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/06\/kotlin-features-survey-edition-2\/#feature-descriptions\">les descriptions des fonctionnalit\u00e9s<\/a> et <a href=\"https:\/\/youtu.be\/MBKxQcAxLhk\" target=\"_blank\" rel=\"noopener\">le webinaire r\u00e9alis\u00e9 par Roman Elizarov et Svetlana Isakova<\/a>.\u00a0<\/p>\n<div style=\"background-color: #f1f6fe; margin-bottom: 2px; padding: 5px; margin-right: 0%; text-align: left; min-height: px;\">\n<p><strong>Veuillez noter<\/strong> que cette enqu\u00eate n&#8217;est pas exhaustive car elle ne couvrait pas les fonctionnalit\u00e9s sur lesquelles nous travaillons actuellement et les fonctionnalit\u00e9s mentionn\u00e9es dans l&#8217;enqu\u00eate sont \u00e0 diff\u00e9rents stades de d\u00e9veloppement. M\u00eame si une fonctionnalit\u00e9 a re\u00e7u de nombreux votes, nous ne pouvons pas promettre qu&#8217;elle sera ajout\u00e9e au langage prochainement. Vous ne trouverez pas ces fonctionnalit\u00e9s dans les versions 1.6.x car vos votes nous aident \u00e0 \u00e9tablir des priorit\u00e9s pour notre travail \u00e0 long terme.<\/p>\n<\/div>\n<p>Dans ce cadre de cette enqu\u00eate, trois choses \u00e9taient attendues de la part des participants :<\/p>\n<ol>\n<li>Choisir jusqu&#8217;\u00e0 3 fonctionnalit\u00e9s qu&#8217;ils souhaiteraient voir ajout\u00e9es au langage (obligatoire).<\/li>\n<li>S\u00e9lectionner une fonctionnalit\u00e9 qu&#8217;ils ne voudraient jamais voir impl\u00e9ment\u00e9e (facultatif).<\/li>\n<li>Pr\u00e9ciser pourquoi ils n&#8217;aimeraient pas avoir cette fonctionnalit\u00e9 dans le langage (facultatif).<\/li>\n<\/ol>\n<p>Nous avons \u00e9galement donn\u00e9 aux participants la possibilit\u00e9 de partager des informations sur leur nombre d&#8217;ann\u00e9es d&#8217;exp\u00e9rience avec Kotlin, leurs objectifs d&#8217;utilisation de Kotlin et les types de d\u00e9veloppement logiciel r\u00e9alis\u00e9s avec Kotlin, ce qui nous a permis de mieux comprendre la nature des cas d&#8217;utilisation du langage.<\/p>\n<p>Nous avons re\u00e7u 1 540 r\u00e9ponses compl\u00e8tes. Les <a class=\"ek-link\" href=\"https:\/\/docs.google.com\/spreadsheets\/d\/17cgK6kO--5HmZ3M23sGNdbdWn7MeYe8dKVUNfuvrXbA\/edit#gid=351766805\" target=\"_blank\" rel=\"noopener\">donn\u00e9es brutes anonymis\u00e9es<\/a> sont disponibles, au cas o\u00f9 vous auriez envie d&#8217;approfondir la question.<\/p>\n<h2>Les fonctionnalit\u00e9s les plus attendues<\/h2>\n<p>Les 3 fonctionnalit\u00e9s ayant re\u00e7u le plus de votes sont les suivantes\u00a0:<\/p>\n<ol>\n<li>Multicatch et types d&#8217;union (45\u00a0%)<\/li>\n<li>Les litt\u00e9raux de collection (32\u00a0%)<\/li>\n<li>R\u00e9cepteurs multiples sur les fonctions et propri\u00e9t\u00e9s des extensions (30\u00a0%)<\/li>\n<\/ol>\n<p>Toutefois, les fonctionnalit\u00e9s de la liste occupant de la 4e \u00e0 la 9e position ont \u00e9galement \u00e9t\u00e9 largement pl\u00e9biscit\u00e9es par la communaut\u00e9. Les six fonctionnalit\u00e9s en bas de la liste ont toutes re\u00e7u nettement moins de votes. Certaines d&#8217;entre elles se sont \u00e9galement retrouv\u00e9es dans le top 3 des fonctionnalit\u00e9s les plus moins demand\u00e9es, comme <em>Lateinit pour les types nullables et primitifs<\/em> et les <em>op\u00e9rateurs bit \u00e0 bit surchargeables comme I et &amp;<\/em>.\u00a0<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-211842\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/12\/Future-Features-report-blog-post-4-01.png\" alt=\"\" width=\"1921\" height=\"1401\" \/><\/figure>\n<p>\u00c9tant donn\u00e9 qu&#8217;il existe \u00e9galement plus d&#8217;une fa\u00e7on de mettre en \u0153uvre la caract\u00e9ristique <em>Multicatch et les types d&#8217;union<\/em>, nous avons demand\u00e9 \u00e0 la communaut\u00e9 Kotlin de nous indiquer laquelle des deux impl\u00e9mentations possibles elle pr\u00e9f\u00e9rait :\u00a0<\/p>\n<ul>\n<li>87\u00a0% ont vot\u00e9 en faveur des types d&#8217;union, cela permettrait de d\u00e9clarer une fonction retournant une des valeurs possibles sans avoir \u00e0 introduire un type <code>ParseResult<\/code> d\u00e9di\u00e9.<\/li>\n<li>13 % ont sugg\u00e9r\u00e9 de ne pas apporter de modifications sp\u00e9cifiques aux exceptions, car les API Java modernes n&#8217;ont pas une utilisation abusive des exceptions (et les anciennes seront finalement remplac\u00e9es). Les participants pr\u00e9f\u00e9reraient disposer d&#8217;une syntaxe concise de type enum pour d\u00e9clarer les classes scell\u00e9es, afin de faciliter l&#8217;\u00e9criture des fonctions de retour d&#8217;erreur de type Kotlin.<\/li>\n<\/ul>\n<h2>Les fonctionnalit\u00e9s les moins demand\u00e9es<\/h2>\n<p>Les r\u00e9pondants n&#8217;ont pas massivement vot\u00e9 contre des fonctionnalit\u00e9s. 40 % d&#8217;entre eux ont d\u00e9clar\u00e9 qu&#8217;ils n&#8217;avaient aucun probl\u00e8me avec l&#8217;impl\u00e9mentation des fonctionnalit\u00e9s propos\u00e9es. Les autres r\u00e9ponses \u00e9taient r\u00e9parties comme suit. Les 3\u00a0fonctionnalit\u00e9s les plus cit\u00e9es\u00a0ont \u00e9t\u00e9 :<\/p>\n<ul>\n<li>Op\u00e9rateurs bit \u00e0 bit surchargeables comme I et &amp;\u00a0: 10\u00a0%.<\/li>\n<li>Visibilit\u00e9 priv\u00e9e des paquets : 7\u00a0%.<\/li>\n<li>Lateinit pour les types nullables et primitifs\u00a0: 6 %.<\/li>\n<\/ul>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-212122\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/12\/Future-Features-report-blog-post-4-02-1-1.png\" alt=\"\" width=\"1920\" height=\"1400\" \/><\/figure>\n<h2>Donn\u00e9es d\u00e9mographiques<\/h2>\n<p>71 % des r\u00e9pondants ont plus de deux ans d&#8217;exp\u00e9rience avec Kotlin.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-211864\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/12\/Future-Features-report-blog-post-3-03.png\" alt=\"\" width=\"1920\" height=\"1080\" \/><\/figure>\n<p>85\u00a0% d&#8217;entre eux ont d\u00e9clar\u00e9 utiliser Kotlin dans le code en production\u00a0<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-211886\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/12\/Future-Features-report-blog-post-3-05.png\" alt=\"\" width=\"1920\" height=\"1080\" \/><\/figure>\n<p>Voici la liste des types de logiciels d\u00e9velopp\u00e9s par les participants.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-211897\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/12\/Future-Features-report-blog-post-3-07.png\" alt=\"\" width=\"1920\" height=\"1080\" \/><\/figure>\n<h2>Conclusion et \u00e9tat des lieux par Roman Elizarov<\/h2>\n<p>Pratiquement toutes les caract\u00e9ristiques qui ont re\u00e7u le plus de votes sont \u00e0 diff\u00e9rents stades de recherche dans l&#8217;\u00e9quipe Kotlin.\u00a0<\/p>\n<ul>\n<li>Les <strong>types d&#8217;union et multicatch<\/strong><a class=\"ek-link\" href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-13108\" target=\"_blank\" rel=\"noopener\"> (KT-13108<\/a>) sont l&#8217;ajout potentiel le plus populaire au langage, mais \u00e9galement le plus complexe \u00e0 y int\u00e9grer. Cette impl\u00e9mentation n\u00e9cessitera l&#8217;intervention d&#8217;un grand nombre d&#8217;experts de l&#8217;\u00e9quipe en charge du compilateur principal. Il ne faut donc pas s&#8217;attendre \u00e0 une avanc\u00e9e significative tant que cette \u00e9quipe est occup\u00e9e \u00e0 mettre en production le frontend du compilateur K2. Mais une fois que cela sera fait, nous commencerons \u00e0 travailler activement sur les types d&#8217;union.<\/li>\n<li>Les <strong>litt\u00e9raux de collection<\/strong><a class=\"ek-link\" href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-43871\" target=\"_blank\" rel=\"noopener\"> (KT-43871<\/a>) n&#8217;ont pas \u00e9t\u00e9 int\u00e9gr\u00e9s \u00e0 notre <a class=\"ek-link\" href=\"https:\/\/kotlinlang.org\/docs\/roadmap.html\" target=\"_blank\" rel=\"noopener\">feuille de route publique actuelle<\/a>, mais nous avons commenc\u00e9 \u00e0 r\u00e9aliser des prototypes pour d\u00e9terminer les approches de conception les plus adapt\u00e9es.<\/li>\n<li>Les <strong>r\u00e9cepteurs multiples<\/strong><a class=\"ek-link\" href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-10468\" target=\"_blank\" rel=\"noopener\"> (KT-10468<\/a>) sont tr\u00e8s proches d&#8217;une publication en preview. Vous pourrez bient\u00f4t vous amuser avec cette caract\u00e9ristique \u00e0 l&#8217;aide d&#8217;un commutateur de compilateur en avant-premi\u00e8re. Restez \u00e0 l&#8217;\u00e9coute\u00a0!<\/li>\n<li>La <strong>d\u00e9structuration bas\u00e9e sur les noms<\/strong><a class=\"ek-link\" href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-19627\" target=\"_blank\" rel=\"noopener\"> (KT-19627<\/a>) op\u00e8re des choix syntaxiques assez controvers\u00e9s. Nous planifions donc une \u00e9tude d&#8217;ergonomie sur les diff\u00e9rentes options syntaxiques pour d\u00e9terminer les plus compr\u00e9hensibles pour les d\u00e9veloppeurs Kotlin.<\/li>\n<li>Les <strong>types de propri\u00e9t\u00e9s \u00ab\u00a0publics\u00a0\u00bb et \u00ab\u00a0priv\u00e9s\u00a0\u00bb<\/strong><a class=\"ek-link\" href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-14663\" target=\"_blank\" rel=\"noopener\"> (KT-14663<\/a>) se sont av\u00e9r\u00e9s relativement faciles \u00e0 impl\u00e9menter dans l&#8217;architecture du nouveau frontend du compilateur K2 et ils seront disponibles en preview avec le nouveau compilateur.<\/li>\n<li>La <strong>visibilit\u00e9 priv\u00e9e des paquets<\/strong> (<a class=\"ek-link\" href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-29227\" target=\"_blank\" rel=\"noopener\">KT-29227<\/a>) a re\u00e7u beaucoup de votes mais arrive \u00e9galement en deuxi\u00e8me place des fonctionnalit\u00e9s les moins souhait\u00e9es. Elle permet plusieurs options de conception et certaines d&#8217;entre elles peuvent compliquer l&#8217;apprentissage du langage, car elles exigeront des novices d&#8217;appr\u00e9hender davantage de choix. Nous prenons cette question au s\u00e9rieux et, tout comme pour l&#8217;approche originale de la conception des visibilit\u00e9s en Kotlin, nous \u00e9tudions actuellement les donn\u00e9es r\u00e9elles sur la fa\u00e7on dont les d\u00e9veloppeurs Kotlin structurent leurs bases de code pour d\u00e9terminer quel type de solution, avec quel type de param\u00e8tres par d\u00e9faut, conserverait l&#8217;esprit de Kotlin : des param\u00e8tres par d\u00e9faut qui vous permettent de d\u00e9marrer facilement tout en vous offrant la possibilit\u00e9 de les ajuster et de les personnaliser au fil de la complexification de votre projet.<\/li>\n<\/ul>\n\n\n<p><em>Auteur de l&#8217;article 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":217926,"comment_status":"closed","ping_status":"closed","template":"","categories":[89],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/217911"}],"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=217911"}],"version-history":[{"count":11,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/217911\/revisions"}],"predecessor-version":[{"id":218002,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/kotlin\/217911\/revisions\/218002"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/217926"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=217911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=217911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=217911"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=217911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}