---
title: "Substituir Array por Objeto"
type: "refactoring-technique"
slug: "replace-array-with-object"
url: "http://localhost:3000/pt-br/replace-array-with-object.md"
category: "Organizing Data"
description: "Problema: Você tem um array que contém vários tipos de dados. Solução: Substitua o array por um objeto que terá campos separados para cada elemento."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Substituir Array por Objeto

> Problema: Você tem um array que contém vários tipos de dados. Solução: Substitua o array por um objeto que terá campos separados para cada elemento.

## Problem

Você tem um array que contém vários tipos de dados.

## Solution

Substitua o array por um objeto que terá campos separados para cada elemento.

## Why Refactor

Arrays são uma excelente ferramenta para armazenar dados e coleções de um único tipo. Mas se você usar um array como caixas de correio, armazenando o nome de usuário na caixa 1 e o endereço do usuário na caixa 14, algum dia você ficará muito infeliz por ter feito isso. Essa abordagem leva a falhas catastróficas quando alguém coloca algo na “caixa” errada e também consome seu tempo para descobrir quais dados estão armazenados onde.

## Benefits

* Na classe resultante, você pode colocar todos os comportamentos associados que antes estavam armazenados na classe principal ou em outro lugar.
* Os campos de uma classe são muito mais fáceis de documentar do que os elementos de um array.

## How to Refactor

1. Crie a nova classe que conterá os dados do array. Coloque o próprio array na classe como um campo público.
2. Crie um campo para armazenar o objeto dessa classe na classe original. Não se esqueça de também criar o próprio objeto no local onde você inicializou o array de dados.
3. Na nova classe, crie métodos de acesso um a um para cada um dos elementos do array. Dê a eles nomes autoexplicativos que indiquem o que fazem. Ao mesmo tempo, substitua cada uso de um elemento do array no código principal pelo método de acesso correspondente.
4. Quando os métodos de acesso tiverem sido criados para todos os elementos, torne o array privado.
5. Para cada elemento do array, crie um campo privado na classe e, em seguida, altere os métodos de acesso para que usem esse campo em vez do array.
6. Quando todos os dados tiverem sido movidos, exclua o array.
## Relations

**Similar techniques**

- [Substituir Valor de Dado por Objeto](/pt-br/replace-data-value-with-object.md)

**Eliminates smells**

- [Obsessão por Primitivos](/pt-br/smells/primitive-obsession.md)

## Code Examples

### java

```java
// Before
String[] row = new String[2];
row[0] = "Liverpool";
row[1] = "15";

// After
Performance row = new Performance();
row.setName("Liverpool");
row.setWins("15");
```

### csharp

```csharp
// Before
string[] row = new string[2];
row[0] = "Liverpool";
row[1] = "15";

// After
Performance row = new Performance();
row.SetName("Liverpool");
row.SetWins("15");
```

### php

```php
// Before
$row = [];
$row[0] = "Liverpool";
$row[1] = 15;

// After
$row = new Performance;
$row->setName("Liverpool");
$row->setWins(15);
```

### python

```python
// Before
row = [None * 2]
row[0] = "Liverpool"
row[1] = "15"

// After
row = Performance()
row.setName("Liverpool")
row.setWins("15")
```

### typescript

```typescript
// Before
let row = new Array(2);
row[0] = "Liverpool";
row[1] = "15";

// After
let row = new Performance();
row.setName("Liverpool");
row.setWins("15");
```

