~

L’opérateur ~ ou non binaire en js vous ne l’avez surement jamais vu mais il peut vous être utile.

Sommaire :

a) ~ sur les entiers
b) utilisation booléenne de ~
c) IIFE fonction auto appelante
d) tronquer les floatants avec ~~

a) ~ sur les entiers

L’opérateur ~ permet d’inverser chaque bit d’un nombre

ex :
+ 3  (base 10)  -> 00000000000000000000000000000011  (base2)
~3   (base 10)  -> 11111111111111111111111111111100  (base2) =  -4  (base 10)
retenez donc que ~ n=  – n – 1

b) Utilisation booleene de ~

indexOf est une fonction qui cherche dans un tableau et retourne -1 si il ne trouve rien ce qui nous oblige à faire
if (monTab.indexOf(« quelqueChose ») > 0){
console.log(« quelquechose trouvé « )
}

or ~-1 = -(-1)-1=0 et 0 vaut false on peut donc faire :
if (~monTab.indexOf(« quelqueChose »)){
console.log(« quelquechose  trouvé « )
}

c) IIFE fonction auto appelante

~ peut aussi servir pour évaluer une function IIFE ( immediately-invoked function expression) une function qui s’exécute directement après déclaration,sans l’opérateur on ferait:
(function(){
console.log(« ~ est géniale »)
})()

Ce qui est trop verbeux pour moi avec ~ on a juste à faire:
~function(){
console.log(« ~ est géniale »)
}()
Niveau performance c’est du pareil au même. Notez que l’on pourrait aussi utiliser n’importe quel autre opérateur tel que + avec +function{…}() voir  ! et –  mais comme le ~ n’est jamais utilisé ça réduit les confusions.

d) tronquer les floatants avec ~~

Une troisième caractéristique de ~ est qu’il tronque les floatant, si on le fait une fois par exemple sur 3,15 on obtient  ~3.15 = – 4 soit le même résultat que si on avait fait ~3.
Mais si on le fait deux fois, on obtient notre nombre tronqué ~~3.15 = 3 et pour les négatifs ~~-3.15=-3
~~ est donc différent de Math.ceil ou Math.floor qui  arrondisse vers l’inférieur ou le supérieur. c’est en fait un math.ceil dans les négatifs et un math.floor pour les positifs.
Voilà vous allez pouvoir gagner un ou deux caractère(s), au mieux 9 pour Math.floor sans parenthèse nécessaire  ^^.
Notez aussi que ~ étant un opérateur binaire il n’est pas propre au js et marche aussi en java ou C.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current ye@r *