Suivant: Formatage du code, Précédent: Modules, Monter: Style de code [Table des matières][Index]
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”).