Lisp at 5.2. Fonction de validation : manipulation symbolique

Home
Up
Previous
Next

5.2. Fonction de validation : manipulation symbolique

Lorsque la valeur d'un champ est modifiée dans le menu, il y a une première validation de la nouvelle valeur qui est faite en fonction du type de donnée que peut recevoir le champ (si ce type a été spécifié dans la définition de la structure). A cela on peut vouloir ajouter une validation plus précise, comme par exemple dans le cas du champ AGE où on voudrait vérifier que l'âge est compris entre 0 et 120 :

(DEFUN VALIDATE-PERSON-AGE (NEW-AGE)

;; NEW-AGE: la nouvelle valeur introduite via le menu pour
;; le champ AGE d'une instance de structure PERSON.
;; Renvoie T si NEW-AGE est compris entre 0 et 120, sinon
;; renvoie NIL (NB: les symboles T et NIL représentent les 2
;; valeurs de vérité VRAI et FAUX).

(IF (AND (>= NEW-AGE 0)
         (<= NEW-AGE 120))
     T
     NIL))

Par quel mécanisme cette fonction est-elle appliquée lorsque l'utilisateur modifie le champ AGE dans le menu? En fait, la fonction STRUCTURE-MENU vérifie l'existence de la fonction dont le nom est la concaténation de VALIDATE- et du nom de la fonction accesseur du champ courant (soit ici PERSON-AGE); si cette fonction existe, elle est appliquée. Ceci pourrait être programmé ainsi :

(DEFUN STRUCTURE-MENU (STRUCTURE-INSTANCE)
...
   (SETF VALIDATION-FUNCTION-NAME
      (MAKE-VALIDATION-FUNCTION-NAME STRUCTURE-NAME
                                     SLOT-NAME))
   (WHEN (FBOUNDP VALIDATION-FUNCTION-NAME)
      (SETF OK?
          (VALIDATION-FUNCTION-NAME NEW-VALUE)))
   (IF OK?
      (...)
      (...))
...)

Commentaires

  1. MAKE-VALIDATION-FUNCTION-NAME est la fonction qui génère le nom de la fonction de validation (par concaténation de symboles), soit, ici, VALIDATE-PERSON-AGE.
  2. FBOUNDP est un prédicat qui vérifie qu'il y a une valeur fonctionnelle associée à VALIDATION-FUNCTION-NAME (FBOUNDP est l'acronyme de Function-BOUND-Predicate).
  3. (VALIDATION-FUNCTION-NAME NEW-VALUE) est l'application de la fonction de validation à la nouvelle valeur introduite via le menu. La valeur de vérité (vrai ou faux, T ou NIL en Lisp) renvoyée par cette fonction est assignée à la variable OK? via l'opérateur SETF.
  4. (IF OK?
       (...)
       (...))

    Ceci correspond à la structure de contrôle bien connue :

    SI OK? = vrai
    ALORS ...
    SINON ...

  5. Remarquons le style déclaratif de ce type de programmation : si le programmeur veut ajouter une validation, il ne doit pas modifier le code existant (ce qui est un facteur d'erreur); il doit simplement définir une nouvelle fonction.
Home    Previous    Up    Next
contact
site map
Last update : 04/12/2001