Desenvolvimento

14 mai, 2018

Conheça o operador exponencial do JavaScript

Publicidade

Há muitos anos que o JavaScript não ganhava modificações e funcionalidades novas tão relevantes, mas isso finalmente mudou quando o ECMAScript 2015 (ES6) chegou. Desde então, o TC39 – comitê da ECMA Internacional, responsável por manter a especificação – está lançando uma nova versão a cada ano. A ideia é que, com atualizações mais constantes, a evolução também é constante; evitando assim, grandes anos sem mudanças, como aconteceu na transição do ES5 para o ES6.

Por ser uma especificação mais enxuta, o ES7 trouxe basicamente duas funcionalidades interessantes para a linguagem: O método includes() para o objeto Array, e o operador exponencial.

Neste artigo, vamos focar no funcionamento deste novo operador. Caso você tenha interesse em aprender de forma mais completa sobre o ES7 e o ES8, te convido a olhar meu recém-lançado curso sobre o tema na Udemy, disponível neste link. Se você ainda não domina o ES6, há meu outro curso bem bacana sobre o tema também.

Conhecendo o operador de exponenciação

Para entender como esse operador trabalha, precisamos rever quais os fatores envolvidos no funcionamento de uma operação com potência:

Visto isso, antes do ES7 entrar em cena, para realizarmos uma operação exponencial, utilizávamos a famosa função pow do objeto Math. Como neste exemplo: vamos elevar cinco ao cubo, como representado na figura:

const resultado = Math.pow(5,3);

console.log(resultado); // 125

Bem simples, certo? No primeiro parâmetro da função colocamos a base, e no segundo o expoente. Se trocarmos a ordem dos elementos do exemplo anterior, teremos três elevado a cinco, onde o resultado é duzentos e quarenta e três.

const resultado = Math.pow(3,5);

console.log(resultado); // 243 = 3 * 3 * 3 * 3 * 3

Por outro lado, também precisamos lembrar que operações deste tipo podem conter expoentes negativos como, por exemplo, dois elevado a menos três:

const resultado = Math.pow(2,-3);

console.log(resultado); // 0.125 = 1/(2*2*2)

Até aí acredito que não há nenhuma novidade. Como o ES7, ou ECMAScript 2016, nós ganhamos o operador de exponenciação, que é representado por dois asteriscos seguidos (**). Seu funcionamento é praticamente igual aos exemplos anteriores, com a diferença que não há nenhuma função envolvida.

Por exemplo, vamos calcular novamente cinco ao cubo. Utilizando esse novo operador, ficaria assim:

const resultado = 5 ** 3;

console.log(resultado); // 125 = 5 * 5 * 5

Bem simples, certo? Conseguimos até mesmo quebrar o cálculo exponencial em duas partes, desta maneira:

let numero = 5;
numero **= 3;
console.log(resultado); // 125

Reparem que, ao utilizar a notação **=, ele pega o valor armazenado na variável número como base e coloca o valor depois da igualdade como exponente. Ao final, temos exatamente o mesmo resultado.

Por fim, também conseguimos realizar operações com o expoente negativo, da mesma maneira que fizemos antes:

const resultado = 2 ** -3;

console.log(resultado); // 0.125

Conclusão

Esta é uma das funcionalidades trazidas para a linguagem, além do método includes() para Array. Seu funcionamento é bem simples, e de acordo com o site “Can I Use“, todos os navegadores modernos já dão suporte a ela (no caso do Node, somente a partir da versão 8.10). Caso você tenha interesse em ver mais detalhes sobre essa funcionalidade, neste link há os detalhes da funcionalidade na especificação.

Referências