Next: Formato del código, Previous: Módulos, Up: Estilo de codificación [Contents][Index]
La tendencia en el Lisp clásico es usar listas para representar todo, y
recorrerlas “a mano” usando car
, cdr
, cadr
y
compañía. Hay varios problemas con este estilo, notablemente el hecho de que
es difícil de leer, propenso a errores y una carga para informes adecuados
de errores de tipado.
Guix code should define appropriate data types (for instance, using
define-record-type*
) rather than abuse lists. In addition, it should
use pattern matching, via Guile’s (ice-9 match)
module, especially
when matching lists (see Pattern Matching in GNU Guile Reference
Manual); pattern matching for records is better done using
match-record
from (guix records)
, which, unlike match
,
verifies field names at macro-expansion time.
When defining a new record type, keep the record type descriptor (RTD)
private (see Records in 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”).