Découverte des Runes de Svelte : Mes Expérimentations et Conclusions

Par mgacemi, 19 mars, 2025
Runes

Introduction

Depuis que j'ai commencé à explorer Svelte, chaque mise à jour de ce framework m'a surpris par sa simplicité et son efficacité. Récemment, Svelte 5 a introduit une nouveauté intéressante : les runes. Intrigué par cette fonctionnalité, j'ai décidé de plonger en profondeur dans son fonctionnement, ses bénéfices et ses cas d'utilisation pratiques. Voici le résultat de mes expérimentations et recherches personnelles sur les runes de Svelte.


Que sont les runes exactement ?

Les runes introduisent une manière explicite et claire de gérer la réactivité dans Svelte. Jusqu'ici, Svelte utilisait une réactivité implicite, très pratique mais parfois difficile à maîtriser dans des cas complexes. Les runes apportent un contrôle plus précis et lisible, rendant le code plus explicite.

Parmi les nouvelles runes disponibles, on retrouve notamment :

  • $state pour créer des états explicitement réactifs.
  • $derived pour définir des états dérivés à partir d'autres états.
  • $effect pour gérer clairement les effets secondaires.

Pourquoi les runes ont-elles été introduites ?

Dans mes recherches, j'ai découvert que les runes ont été ajoutées pour répondre à deux besoins majeurs :

  1. Lisibilité améliorée : clarifier comment les données réagissent entre elles, facilitant ainsi la compréhension du code, surtout dans les applications complexes.

  2. Contrôle accru : permettre aux développeurs de gérer explicitement la réactivité, notamment pour éviter les effets secondaires indésirables ou difficiles à tracer.


Le débat autour des runes

L'introduction des runes n'a pas été sans controverse dans la communauté Svelte. En effet, certains développeurs considèrent que l'ajout de runes augmente inutilement la complexité du framework, allant à l'encontre de la simplicité originelle de Svelte. D'autres, au contraire, apprécient grandement cette fonctionnalité qui apporte clarté et précision au code, facilitant notamment le développement et le débogage d'applications plus complexes.

Personnellement, après avoir testé les runes, je trouve qu'elles apportent une valeur ajoutée significative, en particulier pour les applications qui exigent une gestion d'état sophistiquée ou qui doivent rester facilement maintenables sur le long terme.


Exemple concret : Un compteur avancé avec runes

Pour comprendre concrètement comment fonctionnent les runes, j'ai créé un exemple simple : un compteur avec gestion de multiples états réactifs.

Voici le code de mon expérimentation :

<script>
  import { state, derived, effect } from 'svelte';

  // Création d'états réactifs explicites
  const compteur = state(0);
  const doubleCompteur = state(0);

  // Utilisation de $derived pour automatiquement gérer l'état dérivé
  derived(() => {
    doubleCompteur.set(compteur.get() * 2);
  });

  // Effet secondaire explicite
  effect(() => {
    console.log(`Compteur modifié : ${compteur.get()}`);
  });

  // Fonction pour incrémenter
  function incrementer() {
    compteur.set(compteur.get() + 1);
  }
</script>

<div class="compteur">
  <h2>Compteur avancé avec Runes</h2>
  <button on:click={incrementer}>Incrémenter</button>
  <p>Valeur : {compteur.get()}</p>
  <p>Double de la valeur : {doubleCompteur.get()}</p>
</div>

<style>
  .compteur {
    padding: 15px;
    border-radius: 8px;
    background-color: #eef2f7;
    text-align: center;
    width: 250px;
    margin: auto;
  }
  button {
    padding: 8px 12px;
    margin-bottom: 10px;
  }
</style>

Explication détaillée du code avec les runes

Dans l'exemple du compteur avancé utilisant des runes Svelte, nous avons explicitement créé des états réactifs grâce aux nouvelles fonctionnalités introduites dans Svelte 5 : $state, $derived et $effect.

  • state() permet de créer un état explicitement réactif. Ici, deux états sont définis :

    • compteur qui stocke la valeur courante du compteur.
    • doubleCompteur qui stocke le double de la valeur du compteur.
  • derived() sert à définir clairement un état dérivé. Dans ce cas, chaque fois que compteur change, doubleCompteur est automatiquement recalculé. Cela rend le code très clair, indiquant immédiatement qu'une valeur dépend d'une autre.

  • effect() rend explicites les effets secondaires, ici un simple console.log, mais cela pourrait facilement être étendu à des opérations plus complexes, comme effectuer des requêtes HTTP ou sauvegarder des données dans un stockage local.

Différence avec une implémentation sans runes

Sans les runes, la réactivité serait implicite et ressemblerait à ceci :

<script>
  let compteur = 0;
  $: doubleCompteur = compteur * 2;

  $: console.log(`Compteur modifié : ${compteur}`);

  function incrementer() {
    compteur += 1;
  }
</script>

<button on:click={incrementer}>Incrémenter</button>
<p>Valeur : {compteur}</p>
<p>Double de la valeur : {doubleCompteur}</p>

Principales différences :

  • Explicité : Les runes rendent explicite la gestion des états et des effets, alors que sans runes, Svelte utilise des déclarations réactives implicites ($:), ce qui peut être moins clair dans des cas complexes.
  • Contrôle et clarté : Avec des runes, le développeur contrôle précisément les mises à jour d'état et les effets secondaires, facilitant ainsi la compréhension et la maintenance du code, particulièrement dans les applications importantes.

Ressources complémentaires pour apprendre Svelte

Pour conclure nos aventures ensemble, je souhaite vous fournir quelques ressources précieuses qui vous permettront de continuer à approfondir vos connaissances sur Svelte et d'expérimenter davantage.

Communauté Svelte

Projets open-source à explorer

Conseils pour continuer à apprendre et expérimenter

  • Participez activement aux communautés pour bénéficier des retours d'autres développeurs.
  • Expérimentez régulièrement avec de petites applications pour découvrir de nouvelles fonctionnalités progressivement.
  • Consultez fréquemment la documentation officielle pour rester informé des évolutions et meilleures pratiques.
  • Contribuez à des projets open-source pour renforcer vos compétences et enrichir votre portfolio.

Restez curieux, expérimentez continuellement et partagez vos découvertes avec la communauté ! Bonne continuation avec Svelte et au revoir !


Références

Étiquettes

Commentaires