Suivant: , Précédent: , Monter: Style de code   [Table des matières][Index]


22.9.3 Types de données et reconnaissance de motif

La tendance en Lisp classique est d’utiliser des listes pour tout représenter et de naviguer dedans « à la main ( avec car, cdr, cadr et compagnie. Il y a plusieurs problèmes avec ce style, notamment le fait qu’il soit dur à lire, source d’erreur et un obstacle aux rapports d’erreur bien typés.

Le code de Guix devrait définir des types de données appropriées (par exemple, avec define-record-type*) plutôt que d’abuser des listes. En plus, il devrait utiliser la recherche de motifs, via le module Guile (ice-9 match), surtout pour rechercher dans des listes (voir Pattern Matching dans GNU Guile Reference Manual). La reconnaissance de motif pour les enregistrement se fait plus facilement avec match-record de (guix records) qui, contrairement à match, vérifie le nom des champs à l’expansion des macros.

When defining a new record type, keep the record type descriptor (RTD) private (voir Records dans GNU Guile Reference Manual, for more on records and RTDs). As an example, the (guix packages) module defines <package> as the RTD for package records but it does not export it; instead, it exports a type predicate, a constructor, and field accessors. Exporting RTDs would make it harder to change the application binary interface (because code in other modules might be matching fields by position) and would make it trivial for users to forge records of that type, bypassing any checks we may have in the official constructor (such as “field sanitizers”).