---
title: "Reemplazar Array con Objeto"
type: "refactoring-technique"
slug: "replace-array-with-object"
url: "http://localhost:3000/es/replace-array-with-object.md"
category: "Organizing Data"
description: "Problema: Tienes un array que contiene varios tipos de datos. Solución: Reemplaza el array con un objeto que tendrá campos separados para cada elemento."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Reemplazar Array con Objeto

> Problema: Tienes un array que contiene varios tipos de datos. Solución: Reemplaza el array con un objeto que tendrá campos separados para cada elemento.

## Problem

Tienes un array que contiene varios tipos de datos.

## Solution

Reemplaza el array con un objeto que tendrá campos separados para cada elemento.

## Why Refactor

Los arrays son una excelente herramienta para almacenar datos y colecciones de un solo tipo. Pero si usas un array como si fueran apartados de correos, almacenando el nombre de usuario en el apartado 1 y la dirección del usuario en el apartado 14, algún día lamentarás mucho haberlo hecho. Este enfoque conduce a fallos catastróficos cuando alguien coloca algo en el «apartado» equivocado y además requiere tu tiempo para averiguar qué datos están almacenados dónde.

## Benefits

* En la clase resultante, puedes colocar todos los comportamientos asociados que anteriormente se almacenaban en la clase principal o en otro lugar.
* Los campos de una clase son mucho más fáciles de documentar que los elementos de un array.

## How to Refactor

1. Crea la nueva clase que contendrá los datos del array. Coloca el propio array en la clase como un campo público.
2. Crea un campo para almacenar el objeto de esta clase en la clase original. No olvides crear también el propio objeto en el lugar donde inicializabas el array de datos.
3. En la nueva clase, crea métodos de acceso uno por uno para cada uno de los elementos del array. Dales nombres autoexplicativos que indiquen lo que hacen. Al mismo tiempo, reemplaza cada uso de un elemento del array en el código principal con el método de acceso correspondiente.
4. Cuando se hayan creado métodos de acceso para todos los elementos, haz que el array sea privado.
5. Para cada elemento del array, crea un campo privado en la clase y luego cambia los métodos de acceso para que usen este campo en lugar del array.
6. Cuando se hayan movido todos los datos, elimina el array.
## Relations

**Similar techniques**

- [Reemplazar valor de datos por objeto](/es/replace-data-value-with-object.md)

**Eliminates smells**

- [Obsesión por los tipos primitivos](/es/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");
```

