mercredi 8 juillet 2009
Ah la puissance de la négation !
À main levée, combien d'entre vous programmez des conditions if/else pour inverser la valeur d'un champ booléen ? Réfléchissez à la dernière fois où vous avez codé un tableau HTML dynamique en alternant la couleur des lignes (sauf si bien sûr vous utilisez le truc du modulo...).
Maintenant, vous rappelez-vous des cours élémentaires d'algèbre : ¬p (non p) ? En programmation, on a intérêt à en profiter. Voici quelques exemples dans différents contextes.
PHP
On le retrouve habituellement sous deux formes :
# 1. if/elseAlors qu'une seule négation aurait suffit :
$var = true;
if($var == true){
$var = false;
}
else {
$var = true;
}
var_dump($var); // false
# 2. opérateur ternaire
$var = $var ? false : true;
var_dump($var); // true
$var = true;PostgreSQL
$var = !$var;
var_dump($var); // false
Ici, on accède à la négation par le mot clé NOT :
UPDATE tableSQL Server
SET boolean_value = NOT boolean_value
WHERE id = 1;
Le type boolean n'existe pas sous SQL Server. Son équivalent est le BIT et on peut utiliser l'opérateur bitwise (~) pour créer une négation:
UPDATE tableJavaScript
SET bit_value = ~bit_value
WHERE id = 1;
On n'y pense peut-être pas toujours mais les objets en HTML possèdent aussi des propriétés booléennes qu'on peut inverser à l'aide de JavaScript. Ainsi, une case à cocher possède l'attribut "checked" qui est un booléen.
Un exemple avec Prototype :
HTML
<a href="javascript:;" id="aReverse">Inverser</a>JavaScript
<input type="checkbox" id="chk1" value="1" />
Event.observe('aReverse', 'click', reverse );P.s. ne levez pas la main pour vrai! ;-)
// façon masochiste
function reverse(){
if( $('chk1').checked ){
$('chk1').checked = false;
}
else {
$('chk1').checked = true;
}
}
// pour le programmeur paresseux
function reverse(){
$('chk1').checked = ! $('chk1').checked;
}