• Aucun résultat trouvé

Boolean est un identificateur prédéfini. Il signifie «un objet (constante, variable, expression...) de type Boolean aura la valeur vrai ou faux et rien d’autre». Le type Boolean fait partie des types discrets (discrete types, [ARM 3.2]).

Les constantes booléennes sont False et True, qui sont aussi des identificateurs prédéfinis et qui représentent respectivement les valeurs faux et vrai.

Les opérations possibles sur les valeurs de type Boolean sont:

and or xor not = /= <= < >= >

• and représente la fonction logique et;

• or représente la fonction logique ou (non exclusif); • xor représente la fonction logique ou exclusif; • not représente la fonction logique non;

• comme déjà mentionné (§ 3.1.2) = /= <= < >= et > représentent les opérateurs de comparaison.

Ces quatre nouveaux opérateurs sont appelés opérateurs logiques (ou opérateurs booléens). Les opérateurs de comparaison possèdent un sens bien défini car, par définition, le type Boolean est ordonné, avec False < True.

3.4.2 Expressions booléennes

Les expressions booléennes ou logiques s’écrivent comme présenté dans les exemples 3.1 et 3.2. Les parenthèses servent à préciser l’ordre d’évaluation. De plus, la priorité des opérateurs logiques est (dans l’ordre décroissant):

not(le plus prioritaire)

andorxor(même priorité entre eux)

Relevons qu’il semble alors possible de construire des expressions ambiguës comme Trouve and Present or Existe. Mais en fait une telle expression est interdite car Ada exige l’utilisation des parenthèses lorsque des opérateurs logiques différents (parmi and, or et xor) coexistent dans une expression. L’expression

précédente doit donc s’écrire (Trouve and Present) or Existe ou alors Trouve and (Present or Existe).

Exemple 3.2 Exemples d’expressions booléennes.

LE TYPE BOOLEAN 60

Present : Boolean;

Nombre : Integer;déclaration d’une variable entière;

Trouve and Presentexpression vraie si Trouve et Present sont vrais; not Trouveexpression vraie si Trouve est faux;

Trouve or Presentexpression vraie si Trouve ou Present est vrai; not (Trouve and Present)expression vraie si Trouve ou Present est faux;

not Trouve or not Presentexpression équivalente à la précédente;

Nombre = 0 or Nombre = 1expression vraie si Nombre vaut 0 ou 1;

Trouve and Nombre = 0expression vraie si Trouve est vraie et si Nombre vaut 0.

A titre de synthèse, tous les opérateurs existant en Ada sont donnés dans le tableau 3.1, par ordre décroissant de priorité.

3.4.3 Formes de contrôle en raccourci and then et or else

Sans pouvoir en donner maintenant l’utilité, il faut relever qu’il existe les formes de contrôle en raccourci and then et or else, qui ne sont pas des

opérateurs, mais qui s’utilisent comme les opérateurs and et or, avec le même

niveau de priorité.

Soit l’expression booléenne expression_1 and then expression_2 (où expression_1 et expression_2 sont aussi booléennes). Expression_1 est d’abord calculée. Si elle est fausse, alors expression_2 n’est pas calculée et l’expression complète est aussi fausse. Si expression_1 est vraie alors l’expression complète aura la valeur de expression_2.

Soit l’expression booléenne expression_1 or else expression_2 (où Tableau 3.1 Opérateurs dans l’ordre décroissant de priorité.

Opérateurs Classes d’opérateurs

** abs not opérateurs prioritaires

* / rem mod opérateurs multiplicatifs

+ – opérateurs additifs unaires

+ – & opérateurs additifs binaires

= /= <= < >= > opérateurs de comparaison

LE TYPE BOOLEAN 61

expression_1 et expression_2 sont aussi booléennes). Expression_1 est d’abord calculée. Si elle est vraie, alors expression_2 n’est pas calculée et l’expression complète est aussi vraie. Si expression_1 est fausse alors l’expression complète aura la valeur de expression_2.

L’exemple 3.3 illustre l’utilisation des deux formes de contrôle en raccourci. Exemple 3.3 Exemples d’utilisation de formes de contrôle en raccourci.

Trouve : Boolean := True;déclaration de deux variables booléennes; Present : Boolean := False;

Present and then Trouveexpression fausse (car Present est fausse) et Trouve n’est pas évaluée;

Trouve and then Presentexpression fausse (car Present est fausse);

Trouve or else Presentexpression vraie (car Trouve est vraie) et

Present n’est pas évaluée;

Present or else Trouveexpression vraie (car Trouve est vraie).

Il faut encore mentionner les tests d’appartenance in et not in (§ 6.1.5) qui

donnent également un résultat booléen et qui possèdent le même niveau de priorité que les opérateurs de comparaison. Ces tests d’appartenance, comme les formes de contrôle en raccourci, ne sont pas des opérateurs car, contrairement aux opérateurs, il n’est pas possible de les surcharger (sect. 4.9).

3.4.4 Affectation

L’affectation s’effectue comme dans l’exemple 3.4.

Exemple 3.4 Affectations d’expressions booléennes à une variable booléenne.

-- ...

procedure Exemple_3_4 is

Trouve : Boolean; -- Deux variables booleennes

Present : Boolean := False;

Nb_Courant : Integer := ...; -- Une variable entiere

begin -- Exemple_3_4

Trouve := True; -- Affecte True a Trouve

Trouve := Trouve and Present; -- Affecte False a Trouve

Trouve := Present; -- Affecte False a Trouve

Trouve := Nb_Courant = 25; -- Trouve obtient la valeur True

-- si Nb_Courant vaut 25, False -- sinon

LE TYPE BOOLEAN 62

De manière générale, l’affectation s’écrit:

nom_de_variable_booléenne := expression_de_type_Boolean;

3.4.5 Entrées-sorties

Comme pour tous les types simples, Ada offre la possibilité d’effectuer des entrées-sorties sur des valeurs de type Boolean. Sans en décrire ni expliquer le mécanisme utilisé (sect. 17.4), ces entrées-sorties sont disponibles sous les noms Put et Get après avoir effectué la déclaration suivante:

package ES_Boolean is new Ada.Text_IO.Enumeration_IO ( Boolean ); Exemple 3.5 Entrées-sorties de valeurs booléennes.

with Ada.Text_IO; use Ada.Text_IO; -- ...

procedure Exemple_3_5 is

Trouve : Boolean; -- Deux variables booleennes

Present : Boolean := False;

Nb_Courant : Integer := ...; -- Une variable entiere

package ES_Boolean is new Ada.Text_IO.Enumeration_IO(Boolean);

use ES_Boolean; -- § 2.6.9

begin -- Exemple_3_5

Put_Line (" Cet exemple..." );

Get (Trouve); -- Lit une valeur booleenne

Put (Trouve); -- Affiche la valeur lue

Put (Trouve and Present); -- Affiche la valeur de

-- l'expression booleenne -- Trouve and Present

Put (Nb_Courant = 25); -- Affiche TRUE si Nb_Courant

-- vaut 25, FALSE sinon ...

Comme suggéré dans la dernière instruction de l’exemple 3.5, les valeurs booléennes TRUE et FALSE sont toujours affichées en majuscules sur le nombre minimum de positions. A noter qu’il est possible de modifier ces aspects d’affichage [ARM A.10.10].

ITÉRATION: LA BOUCLE FOR 63

3.5 ITÉRATION: LA BOUCLE FOR