Nouveautés de Dart 3 : Records, patterns matching, switch expression, sealed classes

Eric Taix

Lors de la Google I/O 2023, Dart le langage de Flutter a été annoncé en version stable : une version qui va changer la façon d'écrire du code Flutter.

Lors de la Google I/O 2023, Dart le langage de Flutter a été annoncé en version stable : une version qui va changer la façon d'écrire du code Flutter. Cette version majeure du langage et son lot de nouveautés ont apporté de la facilité de développement, de la stabilité dans le code et permet de décupler la productivité des développeurs. 

À l’occasion d’un meetup Tech Talks, co-organisé avec DigitRE, nous avons eu le plaisir de parler de Dart 3, avec Eric Taix, Senior Full Stack Developer. 


Dart 3 apporte une nouvelle catégorie syntaxique majeure. Cette nouvelle façon d'écrire du code Dart s'accompagne de plusieurs nouveautés, dont les Records, qui permettent de regrouper des données de différents types, des Pattern Matching pour vérifier la conformité d’une instance à une structure définie, ainsi que les switch expressions et les sealed class.

Lors de ce live coding, Eric nous partage quelques enseignements sur ces 4 nouveaux éléments.

Record pour renvoyer plusieurs valeurs dans une méthode

Auparavant, une fonction Dart ne pouvait renvoyer qu'une seule valeur. Ainsi, pour les fonctions qui devaient renvoyer plusieurs valeurs, les utilisateurs devaient soit les regrouper dans d'autres types de données (tels que des maps ou des listes), soit définir de nouvelles classes pouvant contenir les valeurs (des data classes). 

Les Records simplifient la création de données structurées, avec une syntaxe agréable et simplifiée sans avoir à créer une nouvelle classe.

L’avis et les conseils d’Eric :

“C’est sympa : 3 /5

Record est à utiliser avec des propriétés nommées et principalement pour des fonctions internes. 

Attention, n’utilisez surtout pas Record pour retourner soit une valeur, soit une erreur : cela poserait un problème sémantique !

Pattern Matching

Un pattern Matching est une fonctionnalité qui vérifie si une variable ou un objet donné correspond à un modèle ou à une structure spécifique.

Il permet de vérifier si une valeur donnée :

  • Correspond à une certaine forme ;
  • Est égale à une certaine constante ;
  • Est égal à autre chose ; 
  • Correspond à un certain type.

Cette fonctionnalité est très répandue dans des langages de programmation fonctionnelle comme Haskell ou Scala.

L’avis d’Eric :

“C’est génial. 5/5

Avec Pattern Maching, le code est beaucoup plus lisible. 

  • D’un point de vue sémantique, on exprime ce que l’on a envie de faire. 
  • D’un point de vue visuel, on identifie plus facilement ce que l’on a envie d’extraire. C’est donc plus concis à écrire. 

Un dernier argument non négligeable est la visibilité accrue des bugs permettant une résolution plus rapide.”

Switch expression permet d’écrire du code plus concis et facile à lire 

Le Switch traditionnel était impératif et procédural, n’ayant pas la capacité de renvoyer une valeur directement. Aujourd’hui, la nouvelle expression Switch est de nature fonctionnelle. Il s'agit d'une expression plutôt que d'une instruction, ce qui signifie qu'elle est évaluée à une valeur. 

L’expression Switch dans Dart 3 utilise une syntaxe similaire aux fonctions fléchées pour mapper les clauses directement aux valeurs. Cela rend le code plus concis, lisible et moins sujet aux erreurs. 

L’avis et les conseils d’Eric :

“Je mets une note de 4 sur 5.

Cette transformation est un changement important dans Dart car elle introduit un nouvel aspect de programmation fonctionnelle, une fonctionnalité qui modernise le langage et offre aux développeurs plus de flexibilité et de puissance.”

Sealed class + pattern matching 

Les sealed class sont des classes abstraites, qui permettent d’indiquer au compilateur qu’il a tous les éléments en sa possession et que personne ne pourra rajouter une classe dans la hiérarchie et dont il n’aurait pas connaissance.

Associé au pattern matching cela permet au compilateur de vérifier que rien n’a été oublié dans les cas possibles qui sont traités. Imaginez vous en train de rajouter une instance dans votre hiérarchie dans 6 mois, et instantanément le compilateur vous indiquera tous les endroits de votre code qui ne prennent pas en compte ce nouveau cas !

L’avis et les conseils d’Eric :

Le combo est génial ! Je note 5/5 

Le code est fiable, la vérification se fait à la compilation : Vous ne devriez plus avoir d’erreur ! 

Merci encore à Eric Taix, flinter spécialiste d’architectures logicielles et de développement mobile de partager sa passion avec la communauté. 

Le partage de connaissance fait partie des valeurs clés de Flint. Nous continuerons de le faire lors des prochains Meetup Tech Talks.

Eric Taix

Co créateur du JUG de Montpellier, je suis un passionné des technologies et un fervent défenseur du partage des connaissances. Speakeur au JUG de Montpellier durant ces dernières années, j'organise aussi des BBL en fonction des besoins. Développeur fullstack depuis 30 ans, j'ai un faible pour la JVM coté back (Java, Scala ou Kotlin), plutôt React coté front en typescript et un très grand défenseur de Flutter coté mobile auquel je consacre beaucoup d'énergie.