---
title: "Reemplazar Excepción con Comprobación"
type: "refactoring-technique"
slug: "replace-exception-with-test"
url: "http://localhost:3000/es/replace-exception-with-test.md"
category: "Simplifying Method Calls"
description: "Problema: ¿Lanzas una excepción en un lugar donde una simple comprobación haría el trabajo? Solución: Reemplaza la excepción con una comprobación de condición."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Reemplazar Excepción con Comprobación

> Problema: ¿Lanzas una excepción en un lugar donde una simple comprobación haría el trabajo? Solución: Reemplaza la excepción con una comprobación de condición.

## Problem

¿Lanzas una excepción en un lugar donde una simple comprobación haría el trabajo?

## Solution

Reemplaza la excepción con una comprobación de condición.

## Why Refactor

Las excepciones deberían usarse para manejar comportamientos irregulares relacionados con un error inesperado. No deberían servir como sustituto de una comprobación. Si se puede evitar una excepción simplemente verificando una condición antes de ejecutar, hazlo. Las excepciones deberían reservarse para errores reales.

Por ejemplo, entraste en un campo de minas y activaste una mina allí, lo que provocó una excepción; la excepción se manejó con éxito y saliste volando por los aires hasta ponerte a salvo más allá del campo de minas. Pero podrías haber evitado todo esto con solo leer, para empezar, el cartel de advertencia que había delante del campo de minas.

## Benefits

* A veces, una condición simple puede ser más obvia que el código de manejo de excepciones.

## How to Refactor

1. Crea una condición para un caso límite y muévela antes del bloque try/catch.
2. Mueve el código de la sección `catch` dentro de esta condición.
3. En la sección `catch`, coloca el código para lanzar una excepción habitual sin nombre y ejecuta todas las pruebas.
4. Si no se lanzaron excepciones durante las pruebas, deshazte del operador `try`/`catch`.
## Relations

**Similar techniques**

- [Reemplazar Código de Error con Excepción](/es/replace-error-code-with-exception.md)

## Code Examples

### java

```java
// Before
double getValueForPeriod(int periodNumber) {
  try {
    return values[periodNumber];
  } catch (ArrayIndexOutOfBoundsException e) {
    return 0;
  }
}

// After
double getValueForPeriod(int periodNumber) {
  if (periodNumber >= values.length) {
    return 0;
  }
  return values[periodNumber];
}
```

### csharp

```csharp
// Before
double GetValueForPeriod(int periodNumber) 
{
  try 
  {
    return values[periodNumber];
  } 
  catch (IndexOutOfRangeException e) 
  {
    return 0;
  }
}

// After
double GetValueForPeriod(int periodNumber) 
{
  if (periodNumber >= values.Length) 
  {
    return 0;
  }
  return values[periodNumber];
}
```

### php

```php
// Before
function getValueForPeriod($periodNumber) {
  try {
    return $this->values[$periodNumber];
  } catch (ArrayIndexOutOfBoundsException $e) {
    return 0;
  }
}

// After
function getValueForPeriod($periodNumber) {
  if ($periodNumber >= count($this->values)) {
    return 0;
  }
  return $this->values[$periodNumber];
}
```

### python

```python
// Before
def getValueForPeriod(periodNumber):
    try:
        return values[periodNumber]
    except IndexError:
        return 0

// After
def getValueForPeriod(self, periodNumber):
    if periodNumber >= len(self.values):
        return 0
    return self.values[periodNumber]
```

### typescript

```typescript
// Before
getValueForPeriod(periodNumber: number): number {
  try {
    return values[periodNumber];
  } catch (ArrayIndexOutOfBoundsException e) {
    return 0;
  }
}

// After
getValueForPeriod(periodNumber: number): number {
  if (periodNumber >= values.length) {
    return 0;
  }
  return values[periodNumber];
}
```

