Variáveis (Código Limpo: Que Bruxaria é Essa?!?! - Parte 2)
Tags: cleancode, javascript
Published: 2021-09-23 14:54:11

## Utilize nomes de variáveis significativos e de fácil pronúncia

### Não é recomendável:

```javascript
const yyyymmdstr = moment().format("YYYY/MM/DD");
```

### É recomendável:

```javascript
const currentDate = moment().format("YYYY/MM/DD");
```

## Use o mesmo vocabulário para o mesmo tipo de variável

### Não é recomendável:

```javascript
getUserInfo();
getClientData();
getCustomerRecord();
```

### É recomendável:

```javascript
getUser();
```

## Use nomes fáceis de pesquisar

Leremos mais código do que o escreveremos. É importante que o código que escrevamos seja legível e fácil de pesquisar. Quando não utilizamos nomes de variáveis que, no final das contas, não são significativos para a compreensão do nosso programa, nós ferimos nossos leitores. Faça com que seus nomes sejam fáceis de serem buscados. Ferramentas como buddy.js  e ESLint podem ajudar a identificar constantes sem nome.

### Não é recomendável:

```javascript
// Para que serve o número 86400000?!
setTimeout(blastOff, 86400000);
```

### É recomendável:

```javascript
/*
Declare esse número em uma constante com nomes 
em letras maiúsculas
*/

const MILLISECONDS_PER_DAY = 60 * 60 * 24 * 1000; 
setTimeout(blastOff, MILLISECONDS_PER_DAY);

```

## Utilize variáveis explicativas

### Não é recomendável:

```javascript
const address = "One Infinite Loop, Cupertino 95014";
const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
saveCityZipCode(
  address.match(cityZipCodeRegex)[1],
  address.match(cityZipCodeRegex)[2]
);
```

### É recomendável:

```javascript
const address = "One Infinite Loop, Cupertino 95014";
const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
const [_, city, zipCode] = address.match(cityZipCodeRegex) || [];
saveCityZipCode(city, zipCode);
```

## Evite o mapeamento mental

Explícito é melhor que implícito

### Não é recomendável:

```javascript
const locations = ["Austin", "New York", "San Francisco"];
locations.forEach(l => {
  doStuff();
  doSomeOtherStuff();
  // ...
  // ...
  // ...
  // Wait, what is `l` for again?
  dispatch(l);
});
```

### É recomendável:

```javascript
const locations = ["Austin", "New York", "San Francisco"];
locations.forEach(location => {
  doStuff();
  doSomeOtherStuff();
  // ...
  // ...
  // ...
  dispatch(location);
});
```

## Não acrescente contextos desnecessários

Se o nome de sua classe/objeto lhe comunica algo, não repita esse princípio no nome da sua variável

### Não é recomendável:

```javascript
const Car = {
  carMake: "Honda",
  carModel: "Accord",
  carColor: "Blue"
};

function paintCar(car, color) {
  car.carColor = color;
}
```

### É recomendável:

```javascript
const Car = {
  make: "Honda",
  model: "Accord",
  color: "Blue"
};

function paintCar(car, color) {
  car.color = color;
}
```

## Utilize argumentos padrão em vez de curto circuito ou condicionais

Argumentos padrão são, com frequência, mais limpos do que o curto circuito. Se você os utiliza, tome cuidado porque sua função fornecerá apenas valores padrão para argumentos indefinidos `undefined`. Outros valores considerados "falsos" como `' '`,  `" "`, `false`, `null`, 0 e `NaN` não serão substituídos por um valor padrão.

### Não é recomendável:

```javascript
function createMicrobrewery(name) {
  const breweryName = name || "Hipster Brew Co.";
  // ...
}
```

### É recomendável:

```javascript
function createMicrobrewery(name = "Hipster Brew Co.") {
  // ...
}
```

E aí? Gostaram? Até a próxima tradução! 🤗