Types scalaires et sous-intervalle
Types scalaires
Les types de données de base en Pascal sont les types scalaires. Leur définition indique un ensemble ordonné de valeurs en énumérant les identifiants les désignant :
| type <identifiant de type> = ( <identificateur> {, <identificateur>}); |
Exemple :
- type color = (white,red,blue,yellow,purple,green,orange,black);
- sex = (male,female);
- day = (mon,tues,wed,thur,fri,sat,sun);
- operators = (plus,minus,times,divide);
Exemple illégal :
- type workday = (mon,tues,wed,thur,fri,sat);
- free = (sat,sun);
(car le type de sat est ambigu)
Le lecteur connaît déjà le type booléen standard défini comme suit :
- type Boolean = (false, true);
Cela implique automatiquement les identifiants standards false et true et spécifie que false<true.
Les opérateurs relationnels =, <>, <, <=, >= et >. s'appliquent à tous les types scalaires, à condition que les deux comparandes soient du même type. L'ordre est déterminé par l'ordre dans lequel les constantes sont listées.
Les fonctions standard avec des paramètres de type scalaire sont :
| Fonction | Exemple | Description |
|---|---|---|
| succ(x) | succ(blue) = yellow | Le successeur de x |
| pred(x) | pred(blue) = red | Le prédécesseur de x |
| ord(x) | ord(blue) = 2 | Le nombre ordinal de x |
Le numéro ordinal de la première constante listée est 0, ord(x) = ord(pred(x)) + 1.
En supposant que c et c1 sont de type couleur (ci-dessus), b est de type Boolean et s1...sn sont des instructions arbitraires. Les instructions suivantes sont alors significatives :
Types de sous-intervalle
Un type peut être défini comme une sous-intervalle de tout autre type scalaire déjà défini, appelé son type scalaire associé. La définition d'un sous-intervalle indique simplement la plus petite et la plus grande valeur instantanée de le sous-intervalle, la borne inférieure devant être inférieure à la borne supérieure. Un sous-intervlale de type réel n'est pas autorisée.
| type <identificateur de type> <constante> .. <constante>; |
D'un point de vue sémantique, un type de sous-intervalle constitue une substitution appropriée au type de sceau associé dans toutes les définitions. De plus, c'est le type de sceau associé déterminant la validité de toutes les opérations impliquant des valeurs de types de sous-intervalle. Par exemple, étant donnée la déclaration :
- var a: 1..10; b: 0..30; c:20..30;
Le type scalaire associé à a, b et c est entier. Voici les affectations :
- a := b; c := b: b := c;
sont toutes des affirmations valables, même si leur mise en oeuvre peut parfois s'avérer irréalisable. L'expression «ou une partie de celle-ci» est donc implicite dans ce texte et n'est pas toujours mentionnée.
Exemple :
- type days = (mon,tues,wed,thur,fri,sat,sun); {type scalaire}
- workd = mon..fri; {Sous-intervalle de jours}
- index = 0..63; {Sous-intervalle d'entier}
- letter = 'a'..'z'; {Sous-intervalle de caractères}
Les types de sous-intervalles permettent d'expliciter le problème plus clairement. Pour l'implémenteur, ils offrent également la possibilité d'économiser de l'espace mémoire et d'introduire des contrôles de validité lors de l'affectation à l'exécution.