---
title: "Reemplazar número mágico por constante simbólica"
type: "refactoring-technique"
slug: "replace-magic-number-with-symbolic-constant"
url: "http://localhost:3000/es/replace-magic-number-with-symbolic-constant.md"
category: "Organizing Data"
description: "Problema: Tu código usa un número que tiene cierto significado. Solución: Reemplaza ese número por una constante con un nombre legible que explique el significado del número."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Reemplazar número mágico por constante simbólica

> Problema: Tu código usa un número que tiene cierto significado. Solución: Reemplaza ese número por una constante con un nombre legible que explique el significado del número.

## Problem

Tu código usa un número que tiene cierto significado.

## Solution

Reemplaza ese número por una constante con un nombre legible que explique el significado del número.

## Why Refactor

Un número mágico es un valor numérico que aparece en el código fuente pero que no tiene un significado evidente. Este «antipatrón» dificulta entender el programa y refactorizar el código.

Surgen aún más dificultades cuando necesitas cambiar ese número mágico. Buscar y reemplazar no servirá para esto: el mismo número puede usarse con distintos propósitos en distintos lugares, lo que significa que tendrás que verificar cada línea de código que usa ese número.

## Benefits

* La constante simbólica puede servir como documentación viva del significado de su valor.
* Es mucho más fácil cambiar el valor de una constante que buscar ese número por toda la base de código, sin el riesgo de cambiar accidentalmente el mismo número usado en otro lugar con un propósito distinto.
* Reduce el uso duplicado de un número o cadena en el código. Esto es especialmente importante cuando el valor es complicado y largo (como `3.14159` o `0xCAFEBABE`).

## How to Refactor

1. Declara una constante y asígnale el valor del número mágico.
2. Encuentra todas las apariciones del número mágico.
3. Para cada uno de los números que encuentres, comprueba dos veces que el número mágico, en este caso concreto, se corresponde con el propósito de la constante. Si es así, sustituye el número por tu constante. Este es un paso importante, ya que el mismo número puede significar cosas absolutamente distintas (y sustituirse por constantes distintas, según el caso).
## Code Examples

### java

```java
// Before
double potentialEnergy(double mass, double height) {
  return mass * height * 9.81;
}

// After
static final double GRAVITATIONAL_CONSTANT = 9.81;

double potentialEnergy(double mass, double height) {
  return mass * height * GRAVITATIONAL_CONSTANT;
}
```

### csharp

```csharp
// Before
double PotentialEnergy(double mass, double height) 
{
  return mass * height * 9.81;
}

// After
const double GRAVITATIONAL_CONSTANT = 9.81;

double PotentialEnergy(double mass, double height) 
{
  return mass * height * GRAVITATIONAL_CONSTANT;
}
```

### php

```php
// Before
function potentialEnergy($mass, $height) {
  return $mass * $height * 9.81;
}

// After
define("GRAVITATIONAL_CONSTANT", 9.81);

function potentialEnergy($mass, $height) {
  return $mass * $height * GRAVITATIONAL_CONSTANT;
}
```

### python

```python
// Before
def potentialEnergy(mass, height):
    return mass * height * 9.81

// After
GRAVITATIONAL_CONSTANT = 9.81

def potentialEnergy(mass, height):
    return mass * height * GRAVITATIONAL_CONSTANT
```

### typescript

```typescript
// Before
potentialEnergy(mass: number, height: number): number {
  return mass * height * 9.81;
}

// After
static const GRAVITATIONAL_CONSTANT = 9.81;

potentialEnergy(mass: number, height: number): number {
  return mass * height * GRAVITATIONAL_CONSTANT;
}
```

