Section courante

A propos

Section administrative du site

Les instructions WITH et VIEWING

Les instructions WITH et VIEWING modifient respectivement les portées et les types des identificateurs.

Instruction WITH

L'instruction WITH offre une méthode abrégée pour faire référence aux champs d'enregistrement. La structure d'enregistrement est nommée une fois dans une instruction WITH. Par la suite, toutes les instructions dans le cadre de l'instruction WITH peuvent omettre le nom de la structure et le point, faisant référence aux champs d'enregistrement comme s'il s'agissait de simples variables. La forme de l'instruction WITH est la suivante :

with-statement = "with" record-var-list "do" statement .

Exemple :

  1. CONST totemployees = 637;
  2. TYPE personnel = RECORD
  3.   name: PACKED ARRAY [1..18] OF CHAR;
  4.   empnumber,age:INTEGER;
  5.   sex:(male,female);
  6.   salary:REAL:
  7.   vested:BOOLEAN
  8.  END;
  9. VAR employee:ARRAY[1..totemployees] OF personnel:
  10.     i: 1..totemployees:
  11.  (* : *)
  12. WITH employee[i] DO BEGIN
  13.  name := 'Jean Tremblay'
  14.  empnumber := 211;
  15.  age := 36:
  16.  sex := male:
  17.  salary := 18191.54;
  18.  vested := TRUE
  19. END;

Les valeurs des variables dans la liste record-var-list sont déterminées lors de l'évaluation de la liste record-var-list, et les modifications dans le cadre de l'instruction WITH n'ont aucun effet sur ces valeurs. Par exemple, la variable d'indice i dans l'exemple précédent pourrait être augmentée d'un incrément dans l'instruction WITH, mais cela n'affecterait pas l'élément de tableau auquel on accède.

L'utilisation de l'instruction WITH pour plusieurs références aux mêmes variables produit normalement un code objet plus efficace.

Instruction VIEWING

L'instruction VIEWING permet d'échapper aux règles de typage strictes du Pascal standard. Dans l'intervalle affectée par l'instruction VIEWING, les variables visualisées prennent de nouveaux types. La forme de l'instruction VIEWING est la suivante :

viewing-statement = "viewing" id-list ":" type-id "do" statement

Si l'instruction suivant le mot réservé DO est une instruction composée, elle est délimitée par les mots réservés BEGIN et END.

Un message d'erreur est émis au moment de la compilation dans les cas suivants :

Exemple :

  1. TYPE iarr:ARRAY [1..10] OF INTEGER;
  2.      rarr:ARRAY [1..11] OF REAL;
  3.      rec1:RECORD
  4.       a:INTEGER;
  5.       c:rarr;
  6.      END;
  7.      rec2:RECORD
  8.       d:rarr;
  9.       e:INTEGER;
  10.      END;
  11.  
  12. VAR
  13.    i,j,k:INTEGER;
  14.    r,s,t:REAL;
  15.    flag:BOOLEAN;
  16.    ia:iarr;
  17.    ir:rarr;
  18.    r1:recl;
  19.    r2:rec2;
  20. BEGIN
  21.  VIEWING i,j,k REAL DO
  22.   VIEWING flag REAL DO
  23.    VIEWING ir REAL DO
  24.     VIEWING r1 : REAL DO
  25.      VIEWING r2 : REAL DO
  26.       BEGIN
  27.        i:=r;
  28.        j:=s;
  29.        k:=t;
  30.        flag:=r*s/t;
  31.        ia:=flag+1;  (* Seulement le premier mot de ia est modifié *)
  32.        ir:=k-1.0;   (* Seulement le premier mot de ir est modifié *)
  33.        r1:=k-1.0;   (* Seulement le premier mot de r1 est modifié *)
  34.        r2:=SQRT(i); (* Seulement le premier mot de r2 est modifié *)
  35.       END;
  36.      VIEWING r1 : rec2 DO r1 := r2; (* tous les 12 mots de r2 copiés dans r1 *)
  37.      VIEWING ia : rarr DO ia := ir; (* erreur .. rarr est plus grand que iarr *)
  38.      VIEWING ir : iarr DO ia := ir; (* ok.. iarr est plus petit que rarr,. seulement les 10 premiers mots sont copiés *)
  39. END;

L'instruction VIEWING est une extension CRI de la norme ISO niveau 1 Pascal.



Dernière mise à jour : Vendredi, le 13 octobre 2017