Explication booléens

Fermé
Trust_28 Messages postés 8 Date d'inscription jeudi 22 août 2019 Statut Membre Dernière intervention 24 janvier 2021 - Modifié le 16 sept. 2019 à 11:11
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 16 sept. 2019 à 04:40
Bonjour,

Je suis actuellement le programme France IoI pour javascool.
Mais je bloque sur les explications qu'ils fournissent pour les booléens:
Les booléens

En JavaScool le programme suivant :
if (prix < 10)
{
   println("Pas cher");
}

peut aussi s'écrire
boolean estPasCher = (prix < 10);
if (estPasCher)
{
   println("Pas cher");
}

On a donc stocké dans la variable estPasCher la valeur de la comparaison prix < 10 pour la réutiliser plus tard dans un if.

La variable estPasCher est appelée une variable booléenne ou un booléen car elle ne peut être que vraie ou fausse, ce qui correspond en JavaScool aux valeurs
true
(pour vrai) et
false
(pour faux).

On a déclaré la variable estPasCher comme étant de type boolean pour bien indiquer qu'il s'agit d'une variable booléenne.

Ainsi en JavaScool, (3 < 10) vaut true et (11 == 7) vaut false. true et false sont donc des constantes du langage, au même titre que 0, 1 ou encore 42.

On peut donc affecter directement la valeur true ou false à une variable :
boolean toujoursVraie = true;
if (toujoursVraie)
{
   println("La variable toujoursVraie vaut 'true'");
}

On peut également utiliser les opérateurs && et || comme le montre l'exemple suivant :
boolean estSenior = (age >= 60);
boolean estJeune = (age <= 25) && (age >= 12);
boolean reductionPossible = (estSenior || estJeune);
if (reductionPossible)
{
   println("Réduction!");
}

Questions:
- A quoi sert le "true" ou "false"? Dans le cas de l'exemple, à quoi sert décrire "true" pour "toujoursVraie"?
- Quelle est la différence entre "int estSenior" et "boolean estSenior"? Qu'est-ce que cela change de mettre boolean?

Je ne trouve pas leurs explications claires du tout...
Configuration: Windows / Firefox 69.0

3 réponses

jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712
15 sept. 2019 à 08:37
Bonjour,

c'est aussi une façon de s'assurer que la variable ne contienne que ce que tu attends...
Si ta variable doit contenir "vrai" ou "faux" .. il serait dommage qu'elle contienne autre chose ( NULL, 50 ... )

Autrement dit, si tu demandes à quelqu'un :" Aimes tu le Java" .. tu attends une réponse de type "Oui" ou "Non" .. et pas ... "42"

Et puis c'est aussi (et surtout) une question de mémoire..
Un INT utilise 4 bytes
Un BOOLEEN utilise 1 Bit
  • 1 Byte = 1 octet = 8 bits

https://www.w3schools.com/java/java_data_types.asp

.
0
Trust_28 Messages postés 8 Date d'inscription jeudi 22 août 2019 Statut Membre Dernière intervention 24 janvier 2021
15 sept. 2019 à 10:45
Donc... Si je comprends bien... Par exemple, pour la question "Aimes-tu le Java", ça s'écrit de cette manière?

boolean aimerJava = true;
if (aimerJava)
{
   println("J'aime Java'");
}
else
{
   println("Je n'aime pas Java")
}


Du coup, si "true" il sera écrit "J'aime Java", si "false" "Je n'aime pas Java". C'est ça?
Le "true" et "false" ne servent qu'à avoir une réponse "vraie" ou "faux"? Une réponse binaire?
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 712 > Trust_28 Messages postés 8 Date d'inscription jeudi 22 août 2019 Statut Membre Dernière intervention 24 janvier 2021
15 sept. 2019 à 11:18

Le "true" et "false" ne servent qu'à avoir une réponse "vraie" ou "faux"? Une réponse binaire

Oui.
Booleen = réponse binaire => 1 ou 0 => true ou false

au passage.. renseigne toi sur l'algèbre de Bool
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019 > jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
Modifié le 16 sept. 2019 à 04:42
Bonjour,

Une petite précision : "Un INT utilise 4 bytes. Un BOOLEEN utilise 1 Bit".
En théorie on pourrait, mais en pratique la JVM fait une conversion des boolean en int (4 octets)
Il y a cependant une optimisation pour les tableaux de booléens où ils sont convertis en byte (1 octet)

Voir Java Virtual Machine Specification
0
Bonjour

on parle de boolean car cela vient de l'algèbre de Bool, du nom du mathématicien anglais qui a décrit "la logique", c'est à dire les relations mathématiques dans un système à 2 états:
  • éteint / allumé
  • arrêt / marche
  • bas / haut
  • etc

vrai / faux est la généralisation des ces 2 états.

L'algèbre de Bool, comme l'algèbre "classique" se repose sur quelques opérations de bases:
  • Non qui retourne l'état inverse de la valeur d'entrée
  • Ou
  • Et
  • Ou exclusif


Chaque opération dispose de d'une table de vérité, qui décrit son comportement, comme vrai et faux sont longs à écrire et pas universel (chaque langue est différente), faux est représenté par 0 et vrai par 1.
Dans une table de vérité il y a 1 ou des variables d'entrée (a, b, c etc...) et une sortie (s).

La table du Non est

a | s
0 | 1
1 | 0


Ou

a b | s
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 1


Et

a b | s
0 0 | 0
0 1 | 0
1 0 | 0
1 1 | 1


Ou Exclusif

a b | s
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 0


On peut ensuite combiner ces opération, Non Ou, Non Et, etc....


Pour écrire des équations on se sert de signes mathématiques. Le Non est symbolisé par une barre horizontale au dessus de la variable, le Ou par le signe +, le Et par la multiplication dans toutes ses formes, le Ou Exclusif par un + dans un cercle:

Par exemple
          _
 s = ab + cd
signifie (a et b) ou (non(c) et d)

Cet algèbre est fondateur de l'automatisme puis plus tard de l'électronique numérique et donc de l'informatique.

Il est important de connaitre les bases de cet algèbre quand on développe.

0
Trust_28 Messages postés 8 Date d'inscription jeudi 22 août 2019 Statut Membre Dernière intervention 24 janvier 2021
15 sept. 2019 à 13:42
Si j'ai bien compris toutes les explications que vous me donnez, pour le programme des explications

boolean estSenior = (âge >= 60);
boolean estJeune = (âge <= 25) && (age >= 12);
boolean réductionPossible = (estSenior || estJeune);
if (réductionPossible)
{
println("Réduction!");
}

Si la fonction "boolean réductionPossible" est "true", ça affichera "Réduction!" si "false", ça n'affichera rien car le résultat de "réductionPossible n'est pas bon, c'est ça?
0
Utilisateur anonyme > Trust_28 Messages postés 8 Date d'inscription jeudi 22 août 2019 Statut Membre Dernière intervention 24 janvier 2021
15 sept. 2019 à 15:07
Au détail près que réductionPossible est une variable du type booléen, ce n’est pas une fonction.
0
Salut, Java est dit un langage "typé" car toutes les variables ou valeurs ont un type définit.
Comme dit précédemment ça permet d'optimiser la gestion de la mémoire et aussi de s'assurer d'avoir le bon 'type' quand on utilise les valeurs. Le cas des booléen est particulier et aussi le plus proche de la 'pensée' de la machine mais admettons que nous attendions un nombre entier utiliser un type int permet d'interdire une valeur décimale, utiliser un chaîne de caractères (string) permet d'éviter d'avoir un nombre etc...
Cela permet d'optimiser un programme en sécurisant les valeurs qui sont admise par le programme et de mieux gérer les ressources nécessaires.
Pour les histoires de Bool(blague d'informaticien!) c'est aussi un schéma logique(dans le sens mathématique) qui est associé aux algorithmes(structure du programme) et à ses embranchements logique; on parle aussi de test logique:
Vrai Faux évaluant une 'expression' ou sa valeur.
C'est très utile de 'penser' en binaire car la programmation n'a que ce mode là de 'réflexion', un programme ne sait déterminer que vrai ou faux et donc toute l'organisation de celui ci est basé sur ce modèle comme évoqué par Whismerhill.
0