Gerando números randômicos com vanila JS
Tags: javascript, programming, portugues
Published: 2023-12-01 15:43:13

_**Nota:** apenas traduzi o texto abaixo e postei aqui._

Hoje, veremos como criar números randômicos com vanilla JS.

## O método Math.random()

O método `Math.random()` gera um float randômico (um número com decimais) entre 0 e 1.

```javascript
// Registra algo assim: 0.37111265461165543
// Será diferente a cada vez
var rand = Math.random();
console.log(rand);
```

O número que o método `Math.random()` gera inclui 0 (por exemplo, às vezes pode ser 0, embora eu nunca tenha visto isso acontecer pessoalmente), mas exclui 1 (por exemplo, nunca chegará a ser exatamente 1).

## Obtendo números maiores que 0

E se você quisesse obter integers, ou inteiramente integers, em vez de float numbers?

Para fazer isso, podemos multiplicar o que `Math.random()` retornar por um número que seja uma potência de dez. Quanto maior o número pelo qual você multiplica, mais dígitos terá o number retornado.

```javascript
var randomOverZero = function (pow) {
    return Math.random() * pow;
};

// Loga algo como: 14.48985072988853
var rand100 = randomOverZero(100);
console.log(rand100);

// Loga algo como: 9005.187977724258
var rand10000 = randomOverZero(10000);
console.log(rand10000);
```

## Obtendo um integer randômico

E se você quisesse um integer randômico, ou inteiramente integer, em vez de um float number?

Para isso, podemos usar o método `Math.floor()` após multiplicar o valor retornado de `Math.random()` pela nossa potência de dez.

```javascript
var randomInteger = function (pow) {
    return Math.floor(Math.random() * pow);
};

// Loga algo como: 14
var rand100 = randomInteger(100);
console.log(rand100);

// Loga algo como: 9005
var rand10000 = randomInteger(10000);
console.log(rand10000);
```

## Obtendo um integer randômico entre dois números

Finalmente, vamos ver como obter um integer randômico entre dois números. Por exemplo, digamos que você queira um número que seja pelo menos 5, mas não maior que 42.

Para isso, criaremos uma helper function que aceita um número mínimo e um número máximo, para o número randômico, como arguments.

Então, subtrairemos o mínimo do máximo e adicionaremos 1 a ele (caso contrário, o máximo nunca seria alcançado). Multiplicaremos o valor retornado de `Math.random()` por este novo número e adicionaremos o mínimo a ele. Isso nos dá um float randômico entre nossos dois valores.

Por fim, usaremos Math.floor() para transformá-lo em um integer e retornar o resultado.

```javascript
var randomNumber = function (min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
};

// Loga algo como 37
var rand = randomNumber(5, 42);
console.log(rand);
```

## Exemplos da MDN

Apoio à [seção de exemplos](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random) do MDN para `Math.random()` por me ajudar a descobrir isso.

```javascript
// retorno: float => [min, max[
function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

// retorno: integer => [min, max[
function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min) + min);
}

// retorno: integer => [min, max]
function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
```

### Fonte

- Newsletter de [Go Make Things](https://gomakethings.com/)
- MDN