Nächste: Formatierung von Code, Vorige: Module, Nach oben: Programmierstil [Inhalt][Index]
Im klassischen Lisp gibt es die Tendenz, Listen zur Darstellung von allem zu
benutzen, und diese dann „händisch“ zu durchlaufen mit car
,
cdr
, cadr
und so weiter. Dieser Stil ist aus verschiedenen
Gründen problematisch, insbesondere wegen der Tatsache, dass er schwer zu
lesen, schnell fehlerbehaftet und ein Hindernis beim Melden von Typfehlern
ist.
Guix-Code sollte angemessene Datentypen definieren (zum Beispiel mit
define-record-type*
), statt Listen zu missbrauchen. Außerdem sollte
er das (ice-9 match)
-Modul von Guile zum Mustervergleich benutzen,
besonders mit Listen (siehe Pattern Matching in Referenzhandbuch
zu GNU Guile), während bei Verbundstypen match-record
aus dem Modul
(guix records)
angemessener ist, womit, anders als bei match
,
bereits bei der Makroumschreibung sichergestellt wird, dass die Feldnamen
richtig sind.
Wenn Sie einen neuen Verbundstyp definieren, sollten Sie den Deskriptor des
Verbundstyps (RTD (Record Type Descriptor)) privat stellen (siehe
Records in Referenzhandbuch zu GNU Guile, für nähere
Informationen zu Verbundstypen und RTDs). Zum Beispiel wird durch das Modul
(guix packages)
der RTD <package>
für den
package
-Verbundstyp definiert, aber nicht
exportiert. Stattdessen werden ein Typprädikat, ein Konstruktor und
Prozeduren zum Zugriff auf die Felder exportiert. Wenn der RTD exportiert
würde, könnte man die Binärschnittstelle (ABI (Application Binary
Interface)) schwer ändern (weil der Code anderer Module mit match
passende Felder anhand deren Position abgleichen könnte) und es würde Nutzer
verleiten, Verbundsobjekte dieses Typs falsch zu erzeugen, ohne dass die
Überprüfungen im offiziellen Konstruktur laufen können (etwa
„Feldsanitisierer“).