<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Kotlin</title>
		<link>https://www.developpez.net/forums/</link>
		<description><![CDATA[Forum d'entraide sur la programmation en langage Kotlin]]></description>
		<language>fr</language>
		<lastBuildDate>Thu, 04 Jun 2026 18:44:29 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Kotlin</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title>Conçu pour la productivité : ce que les données révèlent sur Kotlin, selon une étude de JetBrains</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2184039&amp;goto=newpost</link>
			<pubDate>Tue, 02 Jun 2026 16:01:59 GMT</pubDate>
			<description>*Conçu pour la productivité :...</description>
			<content:encoded><![CDATA[<div><b><font size="4">Conçu pour la productivité : ce que les données révèlent sur Kotlin, selon une étude de JetBrains</font></b><br />
<br />
<b>Les années passées à concevoir un langage axé sur la productivité se reflètent désormais dans les données.</b><br />
<br />
Kotlin est un langage de programmation multiplateforme, de haut niveau, à usage général et à typage statique, doté d'une inférence de types. Kotlin est conçu pour interagir pleinement avec Java, et la version pour la machine virtuelle Java (JVM) de la bibliothèque standard de Kotlin s'appuie sur la bibliothèque de classes Java. Cependant, l'inférence de types permet une syntaxe plus concise. Kotlin cible principalement la JVM, mais se compile également en JavaScript (par exemple, pour les applications web front-end utilisant React) ou en code natif via LLVM (par exemple, pour les applications iOS natives partageant une logique métier avec des applications Android). JetBrains prend en charge les coûts de développement du langage, tandis que la Fondation Kotlin protège la marque Kotlin.<br />
<br />
Le pragmatisme est au cœur de la conception de Kotlin depuis le tout début. Le langage privilégie la commodité et la productivité du développeur plutôt que la pureté théorique ou l’ambition de proposer de nouvelles fonctionnalités.<br />
<br />
Les développeurs décrivent leur expérience avec Kotlin de manière assez uniforme : plus de temps consacré à ce qu’ils cherchent à créer, moins de temps perdu en formalités. Il y a moins de rituels à accomplir pour satisfaire le compilateur, et moins de code standard à écrire avant d'en venir à l'essentiel. Pendant des années, la question intéressante était de savoir si cet effet serait également visible à grande échelle.<br />
<br />
Nous disposons désormais de données. Une récente étude de JetBrains Research a mesuré le temps écoulé entre la première modification et la validation sur environ 28 millions d'exemples. Pour un travail comparable, les développeurs Kotlin ont passé environ 15 % à 20 % de temps en moins que les développeurs travaillant en Java.<br />
<br />
Cet écart est d’autant plus important aujourd’hui que de plus en plus de code est écrit par des agents IA et que les développeurs consacrent davantage de temps à lire, réviser et vérifier le code. Nous y reviendrons à la fin.<br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p676684d1780419462/autres-langages/autres-langages/kotlin/concu-productivite-donnees-revelent-kotlin-selon-etude-jetbrains/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 1361
Taille : 34,7 Ko"  style="float: CONFIG" /></div><br />
<b><font size="3">La productivité par conception : un bref historique</font></b><br />
<br />
Le pragmatisme se concrétise lorsque l’on examine les fonctionnalités qu’il produit. Voici cinq exemples tirés de plus d’une décennie de décisions de conception du langage et de l’écosystème.<br />
<br />
<b>Les classes de données</b><br />
<br />
Certains modèles se répètent dans toutes les bases de code. Objets de valeur, DTO, enveloppes de message et enregistrements de configuration : Kotlin capture ces formes en une seule déclaration.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">data</span> <span style="color: #0000ff;">class</span> User<span class="br0">&#40;</span><span style="color: #0000ff;">val</span> id: <span style="color: #0080ff;">Long</span>, <span style="color: #0000ff;">val</span> name: <span style="color: #0080ff;">String</span>, <span style="color: #0000ff;">val</span> email: <span style="color: #0080ff;">String</span><span class="br0">&#41;</span></code><hr />
</div><br />
<br />
Une seule ligne, un comportement de type valeur et un minimum de code standard. Vous bénéficiez automatiquement de l'égalité, du hachage, de la déstructuration structurelle, de toString() et d'un constructeur copy(). Ajouter un champ ne signifie pas réécrire six méthodes à la main.<br />
<br />
<b>Sécurité null</b><br />
<br />
Le système de types de Kotlin vérifie si une valeur peut être absente, et le compilateur ne vous laisse pas ignorer la question. Toute une catégorie d’erreurs d’exécution devient un retour d’information à la compilation.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">val</span> length: <span style="color: #0080ff;">Int</span> = user?.profile?.email?.length ?: 0</code><hr />
</div><br />
<br />
Une chaîne nullable s’exprime en une seule ligne, et le compilateur vérifie chaque étape. Les valeurs manquantes apparaissent à la compilation, et non plus tard en production.<br />
<br />
<b>Les petits gains</b><br />
<br />
Une poignée de fonctionnalités éliminent discrètement les frictions à chaque point d'appel. Les conversions intelligentes éliminent la saisie redondante une fois que la vérification de type a déjà eu lieu. Les arguments nommés avec des valeurs par défaut rendent la configuration lisible sans passer par la cérémonie du constructeur. Les lambdas en fin de ligne transforment les API basées sur des blocs en quelque chose qui se lit comme un flux de contrôle ordinaire.<br />
<br />
Chacune de ces fonctionnalités est mineure. Ensemble, elles façonnent l'apparence d'une fonction typique :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">fun</span> createUser<span class="br0">&#40;</span>
    name: <span style="color: #0080ff;">String</span>,
    role: Role = Role.MEMBER,
    email: <span style="color: #0080ff;">String</span>? = <span style="color: #0000ff;">null</span>,
<span class="br0">&#41;</span> = transaction <span class="br0">&#123;</span>                       <span style="color: #808080;">// trailing lambda</span>
    <span style="color: #0000ff;">val</span> user = Users.insert<span class="br0">&#40;</span>name, role, email<span class="br0">&#41;</span>
    <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>email != <span style="color: #0000ff;">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>                <span style="color: #808080;">// smart cast: email is now String</span>
        sendWelcome<span class="br0">&#40;</span>email.lowercase<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#125;</span>
    user
<span class="br0">&#125;</span>
&nbsp;
createUser<span class="br0">&#40;</span>name = <span style="color: #FF0000;">&quot;Anton&quot;</span>, role = Role.ADMIN<span class="br0">&#41;</span>   <span style="color: #808080;">// named args + default</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<i>Trois fonctionnalités se combinent en une seule fonction courte et lisible.</i><br />
<br />
<b>Coroutines et concurrence structurée</b><br />
<br />
Le traitement asynchrone en Kotlin se lit comme du code ordinaire. Les fonctions suspendues semblent séquentielles mais s’exécutent en parallèle, et la concurrence structurée lie chaque opération asynchrone à la portée qui l’a lancée – ainsi, rien ne s’échappe pour s’exécuter en arrière-plan sans être remarqué.<br />
<br />
<b>Les DSL comme idiome de premier ordre</b><br />
<br />
La productivité ne s’est pas arrêtée au langage. Les mêmes choix syntaxiques – lambdas en fin de ligne, fonctions d’extension, constructeurs typés – favorisent également une culture des DSL adaptés aux EDI dans tout l’écosystème : scripts de build Gradle, interface utilisateur Compose, routage Ktor, SQL exposé, et constructeurs HTML et JSON. Chacun constitue une surface de configuration que le compilateur interprète comme du code natif, et non comme un format distinct à mémoriser. <br />
<br />
Aucun de ces éléments n’est une victoire isolée. Chacun est le fruit du même engagement envers le pragmatisme. La suite de cet article examine à quoi ressemble cet engagement dans son ensemble.<br />
<br />
<b><font size="3">La question à laquelle les témoignages ne pouvaient répondre</font></b><br />
<br />
Les développeurs décrivent Kotlin ainsi depuis des années : <i>moins de formalités et plus de temps consacré au travail réel.</i> Mais une description n’est pas une mesure. La question de savoir si le même effet se traduirait également en chiffres, à une échelle où l’opinion d’une seule équipe ne domine pas, est tout autre.<br />
<br />
Les témoignages ne sont pas représentatifs, et l’auto-évaluation comporte des biais connus, dont le plus évident : les personnes qui choisissent Kotlin veulent que ce choix soit justifié. Un biais plus subtil est que les développeurs qui ont brièvement essayé Kotlin avant de revenir en arrière risquent de ne jamais être pris en compte dans l’échantillon. C’est là qu’une étude peut combler le fossé.<br />
<br />
<b><font size="3">Ce qu’a révélé l’étude</font></b><br />
<br />
Dans une étude récente, l’équipe JetBrains Research a analysé les données télémétriques d’IntelliJ IDEA Ultimate sur une période de 20 mois, de novembre 2023 à juin 2025, couvrant environ 320 000 développeurs et 28 millions de cycles de développement. Dans cette étude, un cycle correspond au temps écoulé entre la première modification d’un fichier source après un push et le push suivant sur ce fichier.<br />
<br />
Pour les petites tâches (environ dix minutes de modification), les cycles Kotlin étaient en moyenne environ 15,7 % plus courts que ceux de Java. Pour les tâches de durée moyenne (environ une demi-heure), ils étaient environ 20,3 % plus courts. Pour les tâches volumineuses (une heure et demie à deux heures), ils étaient environ 15,1 % plus courts. En termes absolus, cela représente une ou deux minutes de gain pour une correction courte, cinq à sept minutes pour une correction moyenne et 15 à 20 minutes pour une correction longue – un gain qui se répète de nombreuses fois au cours d’une journée de travail et d’un trimestre. La même tendance s’est maintenue quelle que soit la taille des tâches et tout au long de la période de 20 mois.<br />
<br />
Les questions qui viennent à l’esprit sont légitimes. Les projets Kotlin et Java ne sont-ils pas de tailles différentes ? Les développeurs n’ont-ils pas des niveaux d’expérience différents ? Certaines équipes Kotlin ne sont-elles pas simplement plus récentes ou mieux dotées en ressources que les équipes Java auxquelles elles sont comparées ?<br />
<br />
Des efforts considérables ont été déployés pour écarter ces facteurs. L’étude a comparé les mêmes développeurs avant et après leur migration de Java vers Kotlin, par rapport à des développeurs restés sur Java pendant la même période – une conception longitudinale qui isole le changement de langage des différences entre équipes ou projets. Le travail a été classé par taille de tâche, de sorte que la comparaison n’opposait pas une modification d’une ligne à la création d’une fonctionnalité. La version du JDK a été utilisée comme indicateur de la culture d’ingénierie, la comparaison ayant été effectuée à la fois avec et sans ce contrôle. La tendance s’est confirmée.<br />
<br />
La méthodologie complète – la conception longitudinale, les contrôles, les vérifications de validité et les limites de ce que l’étude peut et ne peut pas affirmer – se trouve dans l’article de JetBrains Research. Tout ce qui suit correspond à la manière dont nous, du côté de Kotlin, interprétons ces résultats.<br />
<br />
<b><font size="3">La conclusion principale : les projets Kotlin ne ralentissent pas</font></b><br />
<br />
Un écart de 15 % à 20 % sur les tâches individuelles est réel, mais ce n’est pas le plus important. La conclusion principale réside dans la trajectoire. En examinant comment le même type de travail évolue au cours de la durée de vie d’un projet, les données racontent une histoire différente de celle que révèlent les chiffres ponctuels.<br />
<br />
Dans l'échantillon de l'étude, les projets Java ont ralenti au cours de la période de 20 mois. Les cycles se sont allongés de 9 % à 17 % à mesure que les bases de code s'étoffaient, qu'il s'agisse de tâches de petite, moyenne ou grande envergure. La même tendance se retrouve dans des segments indépendants des données : plus un projet Java vieillit, plus le même type de travail prend du temps. Les projets Kotlin n'ont pratiquement pas montré ce ralentissement. Certains développeurs ayant migré vers Kotlin ont même progressé au cours de la même période, travaillant plus rapidement sur des tâches comparables à la fin de la période qu’au début.<br />
<br />
Cela correspond à ce que nous entendons depuis des années du côté de la maintenabilité : <i>le code Kotlin est plus facile à maintenir. Vous pouvez y revenir six mois plus tard et comprendre encore ce que vous avez écrit.</i> <br />
<br />
Jusqu’à présent, ces rapports coexistaient avec les rapports sur la productivité en tant qu’observations distinctes. Ils apparaissent de plus en plus comme la même conclusion vue sous deux angles différents.<br />
<br />
Voici notre interprétation de ce phénomène – il s’agit explicitement de la nôtre, et non d’une conclusion que l’étude cherchait à prouver. Le code Kotlin exprime l’intention plus clairement que le code Java équivalent. Les types contiennent davantage d’informations. Les idiomes sont plus uniformes entre les équipes et au fil du temps. Une moindre partie du travail est codée dans des modèles que le lecteur suivant doit reconstruire. <br />
<br />
Si cette interprétation est correcte, le résultat de la trajectoire prend tout son sens. Une base de code qui reste lisible n’accumule pas le genre de friction qui transforme lentement une modification de 10 minutes en une de 15 minutes. La différence n’est peut-être pas perceptible dès le premier jour. Mais à grande échelle, l’effet cumulatif est indéniable !<br />
<br />
<b><font size="3">Ce que cela signifie à l’ère de l’IA</font></b><br />
<br />
À mesure que la rédaction assistée par l’IA et les workflows agentiques se généralisent, les développeurs passent plus de temps à réviser, intégrer, rejeter et ajuster le code qu’à l’écrire eux-mêmes. Même au sein des équipes qui n’ont pas adopté les agents à grande échelle, cette évolution modifie la répartition des activités quotidiennes. Une part croissante du travail du développeur consiste à décider si ce code a sa place.<br />
<br />
Deux faits bien établis coexistent. Premièrement, les développeurs passent la majeure partie de leur temps à lire du code plutôt qu’à l’écrire. La règle des 80/20 est un lieu commun dans le secteur pour une bonne raison : elle ressort des études, des rétrospectives et de tout bilan honnête de la façon dont une journée de travail est passée. Deuxièmement, pour un travail comparable, les développeurs Kotlin parcourent leurs cycles de manière significativement plus rapide que les développeurs Java.<br />
<br />
L'interprétation raisonnable est que le temps gagné est du temps de lecture. C'est à la lecture que passe la majeure partie du temps, et Kotlin semble accélérer ce processus.<br />
<br />
Dans les flux de travail axés sur l'agent, cela revêt une importance encore plus grande. La révision du code d'une modification générée par l'IA consiste à lire. Vérifier qu'une implémentation proposée fait bien ce qu'elle prétend faire consiste à lire. L'intégrer dans un système existant consiste à lire. Rejeter une mauvaise suggestion commence par la lecture. La part de la semaine d'un développeur consacrée à la saisie est en baisse depuis deux décennies, et elle s'effondre aujourd'hui. Le temps passé à lire et à comprendre suit une tendance inverse.<br />
<br />
Les langages qui vous permettent de lire plus vite – et de faire confiance à ce que vous lisez – sont bien plus intéressants pour le développement logiciel moderne.<br />
<br />
Kotlin offre également davantage de garanties statiques dès l'installation. La non-nullabilité est appliquée au niveau des types. Le rétrécissement de type se produit automatiquement une fois que vous avez vérifié un type. Les hiérarchies scellées, associées à des expressions « when » exhaustives, permettent de répondre à la question « L'agent a-t-il oublié un cas ? » dès la phase de compilation. Les mêmes fonctionnalités qui rendent le code Kotlin plus rapide à lire le rendent également plus rapide à vérifier mécaniquement, par le compilateur avant la révision, puis par le réviseur humain par la suite.<br />
<br />
Ce type de sécurité est vraiment payant lorsque vous n’avez pas écrit le code vous-même.<br />
<br />
L’avantage en termes de productivité mis en évidence par les données était bien réel avant l’IA, et l’évolution du développement logiciel pourrait rendre cet avantage plus important que jamais. L'écart du premier jour, l'avantage de la trajectoire et le cas du flux de travail agentique vont tous dans la même direction.<br />
<br />
<b><font size="3">Conclusion</font></b><br />
<br />
<b>Pour les développeurs</b> : la discussion au sein de l'équipe, qui repose depuis des années sur l'intuition, s'appuie désormais sur des chiffres. La prochaine fois que la question se posera de savoir si Kotlin est réellement rentable pour une équipe Java, vous pourrez fonder votre réponse sur des données concrètes.<br />
<br />
<b>Pour les responsables techniques</b> : les arguments quantitatifs en faveur d’un nouveau service JVM sont désormais visibles. L’effet « day-one » plus faible et l’effet de trajectoire plus important jouent tous deux en votre faveur. Le second est le plus important pour tout ce que vous comptez maintenir au-delà d’un an.<br />
<br />
Le pragmatisme a donné naissance à un langage dont les avantages s’accumulent avec le temps – et qui prend de l’importance, et non l’inverse, à mesure que le rôle du développeur évolue.<br />
<br />
:fleche: <a href="https://www.developpez.com/redirect/7038" target="_blank">En savoir plus sur le développement back-end avec Kotlin</a><br />
<br />
:fleche: <a href="https://www.developpez.com/redirect/7039" target="_blank">Essayer Kotlin en ligne</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p676684d1780419462/autres-langages/autres-langages/kotlin/concu-productivite-donnees-revelent-kotlin-selon-etude-jetbrains/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2273/autres-langages/autres-langages/kotlin/">Kotlin</category>
			<dc:creator>JetBrains</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2184039/autres-langages/autres-langages/kotlin/concu-productivite-donnees-revelent-kotlin-selon-etude-jetbrains/</guid>
		</item>
		<item>
			<title>Kotlin 2.3.20 apporte la prise en charge de Gradle 9.3.0 et la déstructuration par nom</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182723&amp;goto=newpost</link>
			<pubDate>Wed, 18 Mar 2026 10:39:03 GMT</pubDate>
			<description>*La version 2.3.20 du langage...</description>
			<content:encoded><![CDATA[<div><b><font size="4">La version 2.3.20 du langage de programmation Kotlin est disponible et apporte la prise en charge de Gradle 9.3.0, introduit le plugin de compilation Lombok ainsi que déstructuration basée sur les noms</font></b><br />
<br />
<b>La version 2.3.20 de Kotlin est disponible. Voici les principales nouveautés : Gradle : compatibilité avec Gradle 9.3.0 et utilisation par défaut de BTA pour la compilation Kotlin/JVM, Maven : configuration simplifiée pour les projets Kotlin, Plugins du compilateur Kotlin : Lombok est en version Alpha et prise en charge JPA améliorée dans le plugin kotlin.plugin.jpa, Langage : prise en charge des déclarations de déstructuration basées sur les noms, Bibliothèque standard : nouvelle API pour créer des copies immuables de Map.Entry, Kotlin/Native : nouveau mode d'interopérabilité pour les bibliothèques C et Objective-C.</b><br />
<br />
Kotlin est un langage de programmation orienté objet et fonctionnel, avec un typage statique qui permet de compiler pour la machine virtuelle Java, JavaScript, et vers plusieurs plateformes en natif (grâce à LLVM). Son développement provient principalement d'une équipe de programmeurs chez JetBrains. Google a annoncé pendant la conférence Google I/O 2017 que Kotlin devient le second langage de programmation officiellement pris en charge par Android après Java. Le 8 mai 2019, toujours lors de la conférence Google I/O, Kotlin devient officiellement le langage de programmation voulu et recommandé par le géant américain Google pour le développement des applications Android.<br />
<br />
Récemment, la version 2.3.20 du langage de programmation Kotlin est disponible. Kotlin 2.3.20 ajoute la compatibilité avec Gradle 9.3.0, et la compilation Kotlin/JVM utilise désormais par défaut l'API Build tools. Les déclarations de déstructuration basée sur les noms sont désormais prises en charge, et les utilisateurs de Maven bénéficient d'une configuration de projet simplifiée. Les développeurs disposent également d'une nouvelle API de bibliothèque standard pour créer des copies immuables de Map.Entry. <br />
<br />
<div style="text-align: center;"><img src="https://www.developpez.net/forums/attachments/p675055d1773834385/autres-langages/autres-langages/kotlin/kotlin-2-3-20-apporte-prise-charge-gradle-9-3-0-destructuration-nom/1.jpg/" border="0" alt="Nom : 1.jpg
Affichages : 8142
Taille : 48,8 Ko"  style="float: CONFIG" /></div><br />
Voici les mises à jour de Kotlin 2.3.20&#65279; :<br />
<br />
<b><font size="3">Maven : Configuration simplifiée pour les projets Kotlin&#65279; (version stable)</font></b><br />
<br />
Kotlin 2.3.20 facilite la configuration de Kotlin dans les projets Maven. Kotlin prend désormais en charge la configuration automatique des répertoires racines des sources et de la bibliothèque standard de Kotlin.<br />
<br />
Grâce à cette nouvelle configuration automatique, lorsque vous créez un nouveau projet Kotlin avec le système de build Maven ou que vous intégrez Kotlin à votre projet Java Maven existant, vous n'avez plus besoin de spécifier manuellement les chemins d'accès aux sources ni d'ajouter la dépendance <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">kotlin-stdlib</span> dans votre fichier de build POM.<br />
<br />
<b>Comment l'activer&#65279;</b><br />
<br />
Dans votre fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">pom.xml</span>, ajoutez <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;extensions&gt;<span style="color: #0000ff;">true</span>&lt;/extensions&gt;</span> à la section <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;build&gt;&lt;plugins&gt;</span> du plugin Kotlin Maven :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td valign="top"><pre style="margin: 0">&lt;build&gt;
    &lt;plugins&gt;
         &lt;plugin&gt;
             &lt;groupId&gt;org.jetbrains.kotlin&lt;/groupId&gt;
             &lt;artifactId&gt;kotlin-maven-plugin&lt;/artifactId&gt;
             &lt;version&gt;<span style="color: #cc66cc;">2.3</span>.<span style="color: #cc66cc;">20</span>&lt;/version&gt;
             &lt;extensions&gt;<span style="color: #0000ff;">true</span>&lt;/extensions&gt; &lt;!-- Add <span style="color: #0000ff;">this</span> extension  --&gt;
         &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;</pre></td></tr></table></code><hr />
</div><br />
<br />
La nouvelle extension effectue automatiquement les opérations suivantes :<br />
<br />
- Enregistre les répertoires <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">src/main/kotlin</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">src/test/kotlin</span> comme racines de source s'ils existent déjà mais ne sont pas spécifiés dans la configuration du plugin.<br />
<br />
- Ajoute la dépendance <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">kotlin-stdlib</span> si elle n'est pas déjà explicitement définie.<br />
<br />
Vous pouvez également désactiver l'ajout automatique de la bibliothèque standard de Kotlin. Pour cela, ajoutez ce qui suit à la section <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;properties&gt;</span> :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0">&lt;project&gt;
    &lt;properties&gt;
        &lt;!-- Disable smart defaults via <span style="color: #0000ff;">property</span> --&gt;
        &lt;kotlin.smart.defaults.enabled&gt;<span style="color: #0000ff;">false</span>&lt;/kotlin.smart.defaults.enabled&gt;
    &lt;/properties&gt;
&lt;/project&gt;</pre></td></tr></table></code><hr />
</div><br />
<br />
Notez que cette propriété désactive toutes les fonctionnalités de configuration simplifiée, y compris l'enregistrement des chemins d'accès aux racines de source.<br />
<br />
<b><font size="3">Compilateur : Lombok est désormais en version Alpha&#65279; (version Alpha)</font></b><br />
<br />
Kotlin 1.5.20 a introduit le plugin de compilation Lombok expérimental, qui vous permet de générer et d'utiliser les déclarations Lombok de Java dans des modules mélangeant du code Kotlin et Java.<br />
<br />
Dans la version 2.3.20, le plugin de compilation Lombok a été promu au statut Alpha car nous prévoyons de rendre cette fonctionnalité prête pour la production, mais elle est toujours en cours de développement.<br />
<br />
<b><font size="3">Langage : Déstructuration basée sur les noms&#65279; (Expérimental)</font></b><br />
<br />
Kotlin 2.3.20 introduit les déclarations de déstructuration basées sur les noms, qui associent les variables aux noms de propriétés au lieu de s'appuyer sur les fonctions <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">componentN<span class="br0">&#40;</span><span class="br0">&#41;</span></span> basées sur la position.<br />
<br />
Auparavant, les déclarations de déstructuration utilisaient la déstructuration basée sur la position :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">data</span> <span style="color: #0000ff;">class</span> User<span class="br0">&#40;</span><span style="color: #0000ff;">val</span> username: <span style="color: #0080ff;">String</span>, <span style="color: #0000ff;">val</span> email: <span style="color: #0080ff;">String</span><span class="br0">&#41;</span>
&nbsp;
<span style="color: #0000ff;">fun</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">val</span> user = User<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;alice&quot;</span>, <span style="color: #FF0000;">&quot;alice@example.com&quot;</span><span class="br0">&#41;</span>
&nbsp;
    <span style="color: #0000ff;">val</span> <span class="br0">&#40;</span>email, username<span class="br0">&#41;</span> = user
&nbsp;
    println<span class="br0">&#40;</span>email<span class="br0">&#41;</span>
    <span style="color: #808080;">// alice</span>
&nbsp;
    println<span class="br0">&#40;</span>username<span class="br0">&#41;</span>
    <span style="color: #808080;">// alice@example.com</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
Dans cet exemple, comme la déstructuration repose sur l'ordre des fonctions <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">componentN<span class="br0">&#40;</span><span class="br0">&#41;</span></span>, <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">email</span> reçoit la valeur de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">username</span>, et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">username</span> reçoit la valeur de email.<br />
<br />
À partir de Kotlin 2.3.20, vous pouvez utiliser la déstructuration basée sur les noms, où chaque variable fait référence à une propriété par son nom :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">fun</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">val</span> user = User<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;alice&quot;</span>, <span style="color: #FF0000;">&quot;alice@example.com&quot;</span><span class="br0">&#41;</span>
&nbsp;
    <span style="color: #808080;">// Uses name-based destructuring with explicit form</span>
    <span class="br0">&#40;</span><span style="color: #0000ff;">val</span> mail = email, <span style="color: #0000ff;">val</span> name = username<span class="br0">&#41;</span> = user
&nbsp;
    println<span class="br0">&#40;</span>name<span class="br0">&#41;</span>
    <span style="color: #808080;">// alice</span>
&nbsp;
    println<span class="br0">&#40;</span>mail<span class="br0">&#41;</span>
    <span style="color: #808080;">// alice@example.com</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
La déstructuration basée sur les noms est expérimentale. Vous pouvez contrôler la manière dont le compilateur interprète les déclarations de déstructuration à l'aide de l'option de compilation <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">-Xname-based-destructuring</span>.<br />
<br />
Elle dispose des modes suivants :<br />
<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">only-syntax</span> active la forme explicite de la déstructuration basée sur les noms sans modifier le comportement des déclarations de déstructuration existantes.<br />
<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">name-mismatch</span> génère des avertissements lorsque la déstructuration basée sur la position dans les classes de données utilise des noms de variables qui ne correspondent pas aux noms de propriétés.<br />
<br />
- <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">complete</span> active la déstructuration basée sur les noms sous forme abrégée avec des parenthèses et continue de prendre en charge la déstructuration basée sur la position avec la syntaxe des crochets.<br />
<br />
Si vous utilisez le mode <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">complete</span>, la syntaxe de déstructuration abrégée avec des parenthèses fait correspondre les variables aux noms de propriétés au lieu de se baser sur la position :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">val</span> <span class="br0">&#40;</span>email, username<span class="br0">&#41;</span> = user</code><hr />
</div><br />
<br />
<b><font size="3">Bibliothèque standard : Nouvelle API pour créer des copies immuables de Map.Entry&#65279; (Expérimental)</font></b><br />
<br />
Kotlin 2.3.20 introduit la fonction d'extension <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Map.Entry.copy<span class="br0">&#40;</span><span class="br0">&#41;</span></span> permettant de créer une copie immuable d'un objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Map.Entry</span>. Cette fonction vous permet de réutiliser les entrées obtenues à partir de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Map.entries</span> après avoir modifié la carte, en les copiant au préalable.<br />
<br />
<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Map.Entry.copy<span class="br0">&#40;</span><span class="br0">&#41;</span></span> est une fonctionnalité expérimentale. Pour l'activer, utilisez l'annotation <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #339933;">@</span><span style="color: #339933;">OptIn<span class="br0">&#40;</span>ExperimentalStdlibApi::<span style="color: #0000ff;">class</span><span class="br0">&#41;</span></span></span> ou l'option du compilateur :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">-opt-<span style="color: #0000ff;">in</span>=kotlin.ExperimentalStdlibApi</code><hr />
</div><br />
<br />
Voici un exemple d'utilisation de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">Map.Entry.copy<span class="br0">&#40;</span><span class="br0">&#41;</span></span> pour supprimer des entrées d'une carte mutable :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">@</span><span style="color: #339933;">OptIn<span class="br0">&#40;</span>ExperimentalStdlibApi::<span style="color: #0000ff;">class</span><span class="br0">&#41;</span></span>
<span style="color: #0000ff;">fun</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span style="color: #0000ff;">val</span> map = mutableMapOf<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span> to <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">2</span> to <span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">3</span> to <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">4</span> to <span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>
&nbsp;
    <span style="color: #0000ff;">val</span> toRemove = map.entries
        .filter <span class="br0">&#123;</span> <span style="color: #0000ff;">it</span>.key % <span style="color: #cc66cc;">2</span> == <span style="color: #cc66cc;">0</span> <span class="br0">&#125;</span>
        .map <span class="br0">&#123;</span> <span style="color: #0000ff;">it</span>.copy<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#125;</span>
&nbsp;
    map.entries.removeAll<span class="br0">&#40;</span>toRemove<span class="br0">&#41;</span>
&nbsp;
    println<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;map = <span style="color: #800000;">$map</span>&quot;</span><span class="br0">&#41;</span>
    <span style="color: #808080;">// map = {1=1, 3=3}</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<b><font size="3">Kotlin/Native : Nouveau mode d'interopérabilité pour les bibliothèques C ou Objective-C&#65279; (Experimental)</font></b><br />
<br />
Si vous utilisez des bibliothèques C ou Objective-C dans vos bibliothèques ou applications Kotlin Multiplatform (KMP), vous êtes invités à tester le nouveau mode d'interopérabilité et à partager vos résultats.<br />
<br />
En général, Kotlin/Native permet d'importer des bibliothèques C et Objective-C dans Kotlin. Cependant, pour les bibliothèques KMP, cette fonctionnalité est actuellement affectée par des problèmes de compatibilité KMP avec les anciennes versions du compilateur.<br />
<br />
En d'autres termes, si vous publiez une bibliothèque KMP compilée avec une version de Kotlin, l'importation de bibliothèques C ou Objective-C pourrait rendre impossible l'utilisation de cette bibliothèque Kotlin dans des projets utilisant une version antérieure de Kotlin.<br />
<br />
Pour résoudre ce problème et d'autres, l'équipe Kotlin a revu le mécanisme d'interopérabilité utilisé en arrière-plan. À partir de Kotlin 2.3.20, vous pouvez essayer le nouveau mode via une option du compilateur.<br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://kotlinlang.org/docs/whatsnew2320.html#kotlin-compiler-plugins" target="_blank">Annonce de Kotlin 2.3.20</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que cette version est crédible ou pertinente ?<br />
:fleche: Quel est votre avis sur le sujet ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://kotlin.developpez.com/actu/375747/La-version-2-2-20-de-Kotlin-est-disponible-et-introduit-WebAssembly-en-version-beta-l-exportation-Swift-disponible-par-defaut-et-une-compilation-multiplateforme-stable-pour-les-bibliotheques-Kotlin/" target="_blank">La version 2.2.20 de Kotlin est disponible et introduit WebAssembly en version bêta, l'exportation Swift disponible par défaut, et une compilation multiplateforme stable pour les bibliothèques Kotlin</a><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/362726/La-derniere-mise-a-jour-du-classement-Redmonk-suggere-que-les-langages-Kotlin-et-Scala-bases-sur-la-JVM-connaissent-un-regain-de-popularite-tandis-que-Rust-stagne-et-le-C-semble-confronte-a-des-defis/" target="_blank">La dernière mise à jour du classement Redmonk suggère que les langages Kotlin et Scala basés sur la JVM connaissent un regain de popularité, tandis que Rust stagne et le C semble confronté à des défis</a><br />
<br />
:fleche: <a href="https://kotlin.developpez.com/actu/350909/Kotlin-continue-son-ascension-dans-l-index-de-popularite-des-langages-de-programmation-de-TIOBE-le-rival-de-Java-se-hisse-a-la-15e-place-dans-le-classement-de-novembre-2023/" target="_blank">Kotlin continue son ascension dans l'index de popularité des langages de programmation de TIOBE. Le rival de Java se hisse à la 15e place dans le classement de novembre 2023</a></div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Images attachées</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.developpez.net/forums/attachments/p675055d1773834385/autres-langages/autres-langages/kotlin/kotlin-2-3-20-apporte-prise-charge-gradle-9-3-0-destructuration-nom/1.jpg/" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2273/autres-langages/autres-langages/kotlin/">Kotlin</category>
			<dc:creator>Alex</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182723/autres-langages/autres-langages/kotlin/kotlin-2-3-20-apporte-prise-charge-gradle-9-3-0-destructuration-nom/</guid>
		</item>
		<item>
			<title><![CDATA[Kotlin 2.2.20 introduit WebAssembly en version bêta, l'exportation Swift disponible par défaut]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179221&amp;goto=newpost</link>
			<pubDate>Fri, 12 Sep 2025 18:46:04 GMT</pubDate>
			<description>*La version 2.2.20 de Kotlin...</description>
			<content:encoded><![CDATA[<div><b><font size="4">La version 2.2.20 de Kotlin est disponible et introduit WebAssembly en version bêta, l'exportation Swift disponible par défaut, et une compilation multiplateforme stable pour les bibliothèques Kotlin</font></b><br />
<br />
<b>La version 2.2.20 de Kotlin est disponible et apporte des changements importants pour le développement web. Kotlin/Wasm est désormais en version bêta, avec des améliorations au niveau de la gestion des exceptions dans l'interopérabilité JavaScript, la gestion des dépendances npm, la prise en charge intégrée du débogage du navigateur et un nouvel ensemble de sources partagées pour les cibles js et wasmJs.</b><br />
<br />
La version 2.2.20 de Kotlin apporte des avancées substantielles pour le développement web et multiplateforme. À la tête de cette version, la prise en charge de WebAssembly (Wasm) a atteint le statut bêta, apportant une gestion améliorée des exceptions dans l'interopérabilité JavaScript, une gestion améliorée des dépendances npm, des outils de débogage intégrés au navigateur et un ensemble de sources partagé pour les cibles js et wasmJs.<br />
<br />
S'appuyant sur ces changements, Kotlin permet désormais l'exportation Swift par défaut et offre une compilation multiplateforme stable pour les bibliothèques Kotlin. Les développeurs bénéficient également d'une nouvelle approche pour déclarer les dépendances communes, ce qui facilite la gestion du code partagé entre les plateformes telles qu'iOS et Android. Dans le domaine du développement du langage de base, la résolution des surcharges a été affinée pour les scénarios où des lambdas sont passés à des surcharges avec des types de fonctions suspendues, améliorant ainsi la clarté et la maintenabilité du code.<br />
<br />
À la suite de ces mises à jour, Kotlin bénéficie d'améliorations en matière de sécurité et de performances : les binaires prennent désormais en charge les stack canaries, et les binaires de publication sont nettement plus petits, ce qui peut être avantageux pour les applications embarquées et sensibles aux performances. Kotlin peut également compiler directement les valeurs longues dans le type JavaScript BigInt, résolvant ainsi un problème majeur de compatibilité numérique dans les projets web.<br />
<br />
Afin de faciliter son adoption, le plugin Kotlin 2.2.20 est fourni avec les dernières versions d'IntelliJ IDEA et d'Android Studio, ce qui permet aux développeurs Kotlin les plus actifs d'accéder immédiatement aux nouvelles fonctionnalités.<br />
<br />
<div style="text-align: center;">
<div class="video-container"><iframe class="restrain" title="YouTube video player" width="560" height="315" allowfullscreen src="//www.youtube.com/embed/jne3923lWtw?wmode=transparent&amp;fs=1" frameborder="0"></iframe></div>
</div><br />
<b><font size="3">Kotlin/Wasm&#65279;</font></b><br />
<br />
Kotlin/Wasm est désormais en version bêta et offre une plus grande stabilité ainsi que des améliorations telles que des dépendances npm séparées, une gestion affinée des exceptions pour l'interopérabilité JavaScript, une prise en charge intégrée du débogage du navigateur, et bien plus encore.<br />
<br />
<b>Dépendances npm séparées&#65279;</b><br />
<br />
Auparavant, dans vos projets Kotlin/Wasm, toutes les dépendances npm étaient installées ensemble dans le dossier de votre projet, y compris les dépendances des outils Kotlin et les vôtres. Elles étaient également enregistrées ensemble dans les fichiers de verrouillage de votre projet (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block"><span style="color: #0000ff;">package</span>-lock.json</span> ou <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">yarn.lock</span>).<br />
<br />
Par conséquent, chaque fois que les dépendances des outils Kotlin étaient mises à jour, vous deviez mettre à jour vos fichiers de verrouillage, même si vous n'aviez rien ajouté ou modifié.<br />
<br />
À partir de Kotlin 2.2.20, les dépendances npm des outils Kotlin sont installées en dehors de votre projet. Désormais, les dépendances des outils et vos dépendances (utilisateur) ont des répertoires distincts :<br />
<br />
<ul><li style="">Répertoire des dépendances des outils : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;kotlin-user-home&gt;/kotlin-npm-tooling/&lt;yarn|npm&gt;/hash/node_modules</span></li><li style="">Répertoire des dépendances utilisateur : <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">build/wasm/node_modules</span></li></ul><br />
De plus, les fichiers de verrouillage à l'intérieur du répertoire du projet ne contiennent que les dépendances définies par l'utilisateur.<br />
<br />
Cette amélioration permet à vos fichiers de verrouillage de se concentrer uniquement sur vos propres dépendances, contribue à maintenir un projet plus propre et réduit les modifications inutiles de vos fichiers.<br />
<br />
Cette modification est activée par défaut pour la cible <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">wasm-js</span>. Elle n'est pas encore implémentée pour la cible js. Bien qu'il soit prévu de l'implémenter dans les prochaines versions, le comportement des dépendances npm reste le même que précédemment pour la cible js dans Kotlin 2.2.20.<br />
<br />
<b>Amélioration de la gestion des exceptions dans l'interopérabilité Kotlin/Wasm et JavaScript</b><br />
<br />
Auparavant, Kotlin avait des difficultés à comprendre les exceptions (erreurs) levées dans JavaScript (JS) et à passer au code Kotlin/Wasm.<br />
<br />
Dans certains cas, le problème se produisait également dans le sens inverse, lorsqu'une exception était levée ou transmise par le code Wasm à JS et encapsulée dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">WebAssembly.Exception</span> sans aucun détail. Ces problèmes de gestion des exceptions Kotlin rendaient le débogage difficile.<br />
<br />
À partir de Kotlin 2.2.20, l'expérience des développeurs avec les exceptions s'améliore dans les deux sens :<br />
<br />
<ul><li style="">Lorsque des exceptions sont levées à partir de JS, vous pouvez voir plus d'informations du côté Kotlin. Lorsqu'une telle exception se propage via Kotlin vers JS, elle n'est plus encapsulée dans WebAssembly.<br />
<br /></li><li style="">Lorsque des exceptions sont levées depuis Kotlin, elles peuvent désormais être interceptées du côté JS en tant qu'erreurs JS.</li></ul><br />
La nouvelle gestion des exceptions fonctionne automatiquement dans les navigateurs modernes qui prennent en charge la fonctionnalité WebAssembly.JSTag :<br />
<br />
<ul><li style="">Chrome 115+<br /></li><li style="">Firefox 129+<br /></li><li style="">Safari 18.4+</li></ul><br />
Dans les navigateurs plus anciens, le comportement de gestion des exceptions reste inchangé.<br />
<br />
<b>Prise en charge du débogage dans les navigateurs sans configuration&#65279;</b><br />
<br />
Auparavant, les navigateurs ne pouvaient pas accéder automatiquement aux sources du projet Kotlin/Wasm nécessaires au débogage. Pour déboguer des applications Kotlin/Wasm dans le navigateur, vous deviez configurer manuellement votre build afin de servir ces sources en ajoutant l'extrait de code suivant à votre fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">build.gradle<span class="br0">&#40;</span>.kts<span class="br0">&#41;</span></span> :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br /></div></td><td valign="top"><pre style="margin: 0">devServer = <span class="br0">&#40;</span>devServer ?: KotlinWebpackConfig.DevServer<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.apply <span class="br0">&#123;</span>
    static = <span class="br0">&#40;</span>static ?: mutableListOf<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.apply <span class="br0">&#123;</span>
        add<span class="br0">&#40;</span>project.rootDir.path<span class="br0">&#41;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
À partir de Kotlin 2.2.20, le débogage de vos applications dans les navigateurs modernes fonctionne dès l'installation. Lorsque vous exécutez des tâches de développement Gradle (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">*DevRun</span>), Kotlin fournit automatiquement les fichiers source au navigateur, ce qui vous permet de définir des points d'arrêt, d'inspecter des variables et de parcourir le code Kotlin sans configuration supplémentaire.<br />
<br />
Cette modification simplifie le débogage en supprimant la nécessité d'une configuration manuelle. La configuration requise est désormais incluse dans le plugin Kotlin Gradle. Si vous avez précédemment ajouté cette configuration à votre fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">build.gradle<span class="br0">&#40;</span>.kts<span class="br0">&#41;</span></span>, vous devez la supprimer pour éviter tout conflit.<br />
<br />
Le débogage dans les navigateurs est activé par défaut pour toutes les tâches Gradle <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">*DevRun</span>. Ces tâches fournissent non seulement l'application, mais aussi ses fichiers source. Utilisez-les donc uniquement pour le développement local et évitez de les exécuter dans des environnements cloud ou de production où les sources seraient exposées publiquement.<br />
<br />
<b>Gérer les rechargements répétés pendant le débogage</b><br />
<br />
La fourniture des sources par défaut peut entraîner des rechargements répétés de l'application dans le navigateur avant que la compilation et le regroupement Kotlin ne soient terminés. Pour contourner ce problème, ajustez votre configuration webpack afin d'ignorer les fichiers source Kotlin et désactivez la surveillance des fichiers statiques servis. Ajoutez un fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">.js</span> avec le contenu suivant dans le répertoire <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">webpack.config.d</span> à la racine de votre projet :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0">config.watchOptions = config.watchOptions || <span class="br0">&#123;</span>
    ignored: <span class="br0">&#91;</span><span style="color: #FF0000;">&quot;**/*.kt&quot;</span>, <span style="color: #FF0000;">&quot;**/node_modules&quot;</span><span class="br0">&#93;</span>
<span class="br0">&#125;</span>
&nbsp;
<span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>config.devServer<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    config.devServer.static = config.devServer.static.map<span class="br0">&#40;</span><span style="color: #0000ff;">file</span> =&gt; <span class="br0">&#123;</span>
        <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>typeof <span style="color: #0000ff;">file</span> === <span style="color: #FF0000;">&quot;string&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span style="color: #0000ff;">return</span> <span class="br0">&#123;</span> directory: <span style="color: #0000ff;">file</span>,
                 watch: <span style="color: #0000ff;">false</span>,
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span> <span style="color: #0000ff;">else</span> <span class="br0">&#123;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">file</span>
    <span class="br0">&#125;</span>
    <span class="br0">&#125;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<b>Suppression des fichiers <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">yarn.lock</span> vides&#65279;</b><br />
<br />
Auparavant, le plugin Kotlin Gradle (KGP) générait automatiquement un fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">yarn.lock</span> qui contenait des informations sur les paquets npm requis par la chaîne d'outils Kotlin, ainsi que toutes les dépendances npm existantes du projet ou des bibliothèques utilisées.<br />
<br />
Désormais, le KGP gère les dépendances de la chaîne d'outils séparément, et un fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">yarn.lock</span> au niveau du projet n'est plus généré, sauf si le projet comporte des dépendances npm.<br />
<br />
Le KGP crée automatiquement un fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">yarn.lock</span> lorsque des dépendances npm sont ajoutées, et supprime le fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">yarn.lock</span> lorsque les dépendances npm sont supprimées.<br />
<br />
Cette modification permet de nettoyer les structures des projets et facilite le suivi de l'introduction des dépendances npm réelles.<br />
<br />
Aucune étape supplémentaire n'est nécessaire pour configurer ce comportement. Il est appliqué par défaut dans les projets Kotlin/Wasm à partir de Kotlin 2.2.20.<br />
<br />
<b>Nouvelle erreur de compilation dans les noms de classe entièrement qualifiés&#65279;</b><br />
<br />
Sur Kotlin/Wasm, le compilateur ne stocke pas par défaut les noms entièrement qualifiés (FQN) des classes dans le binaire généré. Cette approche évite d'augmenter la taille de l'application.<br />
<br />
Par conséquent, dans les versions précédentes de Kotlin, l'appel de la propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">KClass::qualifiedName</span> renvoyait une chaîne vide au lieu du nom qualifié de la classe.<br />
<br />
À partir de Kotlin 2.2.20, le compilateur signale une erreur lorsque vous utilisez la propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">KClass::qualifiedName</span> dans les projets Kotlin/Wasm, sauf si vous activez explicitement la fonctionnalité des noms qualifiés.<br />
<br />
Cette modification empêche l'apparition de chaînes vides inattendues lors de l'appel de la propriété <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">qualifiedName</span> et améliore l'expérience des développeurs en détectant les problèmes au moment de la compilation.<br />
<br />
Le diagnostic est activé par défaut et les erreurs sont signalées automatiquement. Pour désactiver les diagnostics et autoriser le stockage des FQN dans Kotlin/Wasm, demandez au compilateur de stocker les noms complets de toutes les classes en ajoutant l'option suivante à votre fichier <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">build.gradle<span class="br0">&#40;</span>.kts<span class="br0">&#41;</span></span> :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td valign="top"><pre style="margin: 0">kotlin <span class="br0">&#123;</span>
    wasmJs <span class="br0">&#123;</span>
        ...
        compilerOptions <span class="br0">&#123;</span>
            freeCompilerArgs.add<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;-Xwasm-kclass-fqn&quot;</span><span class="br0">&#41;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></code><hr />
</div><br />
<br />
<b>Source</b> : <a rel="nofollow" href="https://kotlinlang.org/docs/whatsnew2220.html#improved-overload-resolution-for-lambdas-with-suspend-function-types" target="_blank">Annonce de Kotlin 2.2.20</a><br />
<br />
<b>Et vous ?</b><br />
<br />
:fleche: Pensez-vous que ces améliorations sont crédibles ou pertinentes ?<br />
:fleche: Quel est votre avis sur cette version ?<br />
<br />
<b>Voir aussi :</b><br />
<br />
:fleche: <a href="https://jetbrains.developpez.com/actu/373915/JetBrains-annonce-qu-IntelliJ-IDEA-son-EDI-pour-le-developpement-en-Java-et-Kotlin-passe-a-un-mode-de-distribution-unifie/" target="_blank">JetBrains annonce qu'IntelliJ IDEA, son EDI pour le développement en Java et Kotlin, passe à un mode de distribution unifié</a><br />
<br />
:fleche: <a href="https://programmation.developpez.com/actu/362726/La-derniere-mise-a-jour-du-classement-Redmonk-suggere-que-les-langages-Kotlin-et-Scala-bases-sur-la-JVM-connaissent-un-regain-de-popularite-tandis-que-Rust-stagne-et-le-C-semble-confronte-a-des-defis/" target="_blank">La dernière mise à jour du classement Redmonk suggère que les langages Kotlin et Scala basés sur la JVM connaissent un regain de popularité, tandis que Rust stagne et le C semble confronté à des défis</a><br />
<br />
:fleche: <a href="https://kotlin.developpez.com/actu/358442/Kotlin-2-0-est-disponible-avec-un-compilateur-K2-stable-plus-rapide-et-multiplateforme-des-sa-conception/" target="_blank">Kotlin 2.0 est disponible avec un compilateur K2 stable, plus rapide et multiplateforme dès sa conception</a></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f2273/autres-langages/autres-langages/kotlin/">Kotlin</category>
			<dc:creator>Jade Emy</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179221/autres-langages/autres-langages/kotlin/kotlin-2-2-20-introduit-webassembly-version-beta-l-exportation-swift-disponible-defaut/</guid>
		</item>
	</channel>
</rss>
