Difference between revisions of "Basic Pascal Tutorial/Chapter 3/Boolean Expressions"

From Lazarus wiki
Jump to navigationJump to search
m
(teur)
Line 1: Line 1:
 
{{Boolean Expressions}}
 
{{Boolean Expressions}}
  
3B - Boolean Expressions (author: Tao Yue, state: unchanged)
+
3B - Expressions booléennes
  
[[Boolean]] expressions are used to compare two values and get a <tt>true-or-false</tt> answer:
+
[[Boolean]] Expressions utilisée pour comparer deux valeurs et retourne <tt>true</tt> ou <tt>false</tt> :
  value1 '''relational_operator''' value2
+
  valeur1 '''relational_operator''' valeur2
  
The following relational operators are used:
+
Les opérateurs relationnels suivants sont utilisés :
  < less than
+
  < inférieur à
  > greater than
+
  > supérieur à
  = equal to
+
  = égal à
  <= less than or equal to
+
  <= inférieur ou égal à
  >= greater than or equal to
+
  >= supérieur ou égal à
  <> not equal to
+
  <> différent de
  
You can assign Boolean expressions to Boolean variables. Here we assign a <tt>true</tt> expression to some_bool:
+
Les expressions booléennes sont affectables à des variables booléennes. Ici, nous affectons une expression valant <tt>true</tt> à some_bool :
 
  some_bool := 3 < 5;
 
  some_bool := 3 < 5;
  
Complex Boolean expressions are formed by using the Boolean operators:
+
Des expressions booléennes plus complexes sont formées avec les opérateurs booléens:
  not negation (~)
+
  not négation (~)
  and conjunction (^)
+
  and conjonction (^)
  or disjunction (v)
+
  or disjonction (v)
  xor exclusive-or
+
  xor ou exclusif ((+))
  
<tt>NOT</tt> is a unary operator it is applied to only one value and inverts it:
+
<tt>NOT</tt> est un opérateur unaire il est appliqué à une seule valeur et inverse sa valeur:
  
 
* <tt>not true = false
 
* <tt>not true = false
 
* not false = true</tt>
 
* not false = true</tt>
  
<tt>AND</tt> yields <tt>TRUE</tt> only if both values are <tt>TRUE</tt>:
+
<tt>AND</tt> retourne <tt>TRUE</tt> uniquement si les deux valeurs sont <tt>TRUE</tt> simultanément:
  
 
* <tt>TRUE and FALSE = FALSE
 
* <tt>TRUE and FALSE = FALSE
 
* TRUE and TRUE = TRUE</tt>
 
* TRUE and TRUE = TRUE</tt>
  
<tt>OR</tt> yields <tt>TRUE</tt> if at least one value is <tt>TRUE</tt>:
+
<tt>OR</tt> retourne <tt>TRUE</tt> si au moins l'une des valeurs est <tt>TRUE</tt>:
  
 
* <tt>TRUE or TRUE = TRUE
 
* <tt>TRUE or TRUE = TRUE
Line 40: Line 40:
 
* FALSE or FALSE = FALSE</tt>
 
* FALSE or FALSE = FALSE</tt>
  
<tt>XOR</tt> yields <tt>TRUE</tt> if one expression is <tt>TRUE</tt> and the other is <tt>FALSE</tt>. Thus:
+
<tt>XOR</tt> retourne <tt>TRUE</tt> si les deux valeurs sont différentes. Ainsi:
  
 
* <tt>TRUE xor TRUE = FALSE
 
* <tt>TRUE xor TRUE = FALSE
Line 47: Line 47:
 
* FALSE xor FALSE = FALSE</tt>
 
* FALSE xor FALSE = FALSE</tt>
  
When combining two Boolean expressions using relational and Boolean operators, be careful to use parentheses.
+
C'est l'inverse de l'opérateur d'égalité <tt>=</tt>, on peut donc le remplacer par l'opérateur <tt><></tt> appliqué aux valeurs booléennes.
 +
 
 +
En combinant deux expressions booléennes en utilisant les opérateurs relationnels et booléens, l'emploi de parenthèses est prudent :
 
<syntaxhighlight>
 
<syntaxhighlight>
 
(3>5) or (650<1)
 
(3>5) or (650<1)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This is because the Boolean operators are higher on the order of operations than the relational operators:
+
Cela parce que les opérateurs booléens ont une priorité d'évaluation plus élevée que les opérateurs relationnels :
  
 
# <tt>not
 
# <tt>not
Line 59: Line 61:
 
# < > <= >= = <></tt>
 
# < > <= >= = <></tt>
  
So <tt>3 > 5 or 650 < 1</tt> becomes evaluated as <tt>3 > (5 or 650) < 1</tt>, which makes no sense, because the Boolean operator or only works on Boolean values, not on integers.
+
Ainsi <tt>3 > 5 or 650 < 1</tt> est évalué en <tt>3 > (5 or 650) < 1</tt>, ce qui n'a pas de sens comme expression booléenne (<tt>OR</tt> est un opérateur agissant aussi sur les entiers mais avec un autre sens).
 +
 
 +
Les opérateurs booléens (<tt>AND, OR, NOT, XOR</tt>) peuvent être employés aussi bien sur des expressions booléennes que sur des valeurs booléennes.
 +
 
 +
Quelques remarques:
 +
* bien que ces opérateurs soient commutatifs (on peut changer la place les opérandes des opérateurs), une optimisation fréquente des compilateurs, dite évaluation paresseuse, consiste à n'évaluer que le premier opérande et le second au besoin du fait des propriétés des opérateurs booléens. Cela n'a habituellement aucune conséquence sauf pour des constructions particulières, prudence donc...
  
The Boolean operators (<tt>AND, OR, NOT, XOR</tt>) can be used on Boolean variables just as easily as they are used on Boolean expressions.
+
* Autant que possible, ne jamais comparer directement deux valeurs réelles, de légères différences d'arrondi peuvent fausser le résultat de l'expression. En fait, il vaut mieux comparer la différence à une valeur suffisamment petite.
  
Whenever possible, don't compare two real values with the equals sign. Small round-off errors may cause two equivalent expressions to differ.
+
* Dans la mesure du possible, éviter des expressions du genre
 +
if some_bool = True then
 +
alors que
 +
if some_bool then
 +
suffit largement et allège la lecture.
  
 
{|style=color-backgroud="white" cellspacing="20"
 
{|style=color-backgroud="white" cellspacing="20"

Revision as of 12:09, 15 March 2014

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

3B - Expressions booléennes

Boolean Expressions utilisée pour comparer deux valeurs et retourne true ou false :

valeur1 relational_operator valeur2

Les opérateurs relationnels suivants sont utilisés :

<	inférieur à
>	supérieur à
=	égal à
<=	inférieur ou égal à
>=	supérieur ou égal à
<>	différent de

Les expressions booléennes sont affectables à des variables booléennes. Ici, nous affectons une expression valant true à some_bool :

some_bool := 3 < 5;

Des expressions booléennes plus complexes sont formées avec les opérateurs booléens:

not	négation (~)
and	conjonction (^)
or	disjonction (v)
xor	ou exclusif ((+))

NOT est un opérateur unaire — il est appliqué à une seule valeur et inverse sa valeur:

  • not true = false
  • not false = true

AND retourne TRUE uniquement si les deux valeurs sont TRUE simultanément:

  • TRUE and FALSE = FALSE
  • TRUE and TRUE = TRUE

OR retourne TRUE si au moins l'une des valeurs est TRUE:

  • TRUE or TRUE = TRUE
  • TRUE or FALSE = TRUE
  • FALSE or TRUE = TRUE
  • FALSE or FALSE = FALSE

XOR retourne TRUE si les deux valeurs sont différentes. Ainsi:

  • TRUE xor TRUE = FALSE
  • TRUE xor FALSE = TRUE
  • FALSE xor TRUE = TRUE
  • FALSE xor FALSE = FALSE

C'est l'inverse de l'opérateur d'égalité =, on peut donc le remplacer par l'opérateur <> appliqué aux valeurs booléennes.

En combinant deux expressions booléennes en utilisant les opérateurs relationnels et booléens, l'emploi de parenthèses est prudent :

(3>5) or (650<1)

Cela parce que les opérateurs booléens ont une priorité d'évaluation plus élevée que les opérateurs relationnels :

  1. not
  2. * / div mod and
  3. + - or
  4. < > <= >= = <>

Ainsi 3 > 5 or 650 < 1 est évalué en 3 > (5 or 650) < 1, ce qui n'a pas de sens comme expression booléenne (OR est un opérateur agissant aussi sur les entiers mais avec un autre sens).

Les opérateurs booléens (AND, OR, NOT, XOR) peuvent être employés aussi bien sur des expressions booléennes que sur des valeurs booléennes.

Quelques remarques:

  • bien que ces opérateurs soient commutatifs (on peut changer la place les opérandes des opérateurs), une optimisation fréquente des compilateurs, dite évaluation paresseuse, consiste à n'évaluer que le premier opérande et le second au besoin du fait des propriétés des opérateurs booléens. Cela n'a habituellement aucune conséquence sauf pour des constructions particulières, prudence donc...
  • Autant que possible, ne jamais comparer directement deux valeurs réelles, de légères différences d'arrondi peuvent fausser le résultat de l'expression. En fait, il vaut mieux comparer la différence à une valeur suffisamment petite.
  • Dans la mesure du possible, éviter des expressions du genre
if some_bool = True then

alors que

if some_bool then

suffit largement et allège la lecture.

previous contents next