<?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>Fri, 17 Apr 2026 16:11:49 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>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 : 6909
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 />
<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 />
<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 />
<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 />
<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 />
<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 />
<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 />
<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>
