---
title: "Объединение дублирующихся фрагментов в условных операторах"
type: "refactoring-technique"
slug: "consolidate-duplicate-conditional-fragments"
url: "http://localhost:3000/ru/consolidate-duplicate-conditional-fragments.md"
category: "Упрощение условных выражений"
description: "Проблема: Одинаковый фрагмент кода находится во всех ветках условного оператора. Решение: Вынесите его за рамки оператора."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Объединение дублирующихся фрагментов в условных операторах

> Проблема: Одинаковый фрагмент кода находится во всех ветках условного оператора. Решение: Вынесите его за рамки оператора.

## Problem

Одинаковый фрагмент кода находится во всех ветках условного оператора.

## Solution

Вынесите его за рамки оператора.

## Why Refactor

Дублирующий код находится внутри всех веток условного оператора. Зачастую это является результатом эволюции кода внутри веток оператора, тем более, если над кодом работало несколько человек.

## Benefits

* Убивает дублирование кода.

## How to Refactor

1. Если дублирующие участки находятся вначале веток оператора, вынесите их перед условным оператором.
2. Если такой код выполняется в конце веток, поместите его после условного оператора.
3. Если дублирующий код расположен случайным образом внутри веток, вам нужно для начала попытаться передвинуть его в начало или в конец ветки, в зависимости от того, меняет ли он результат последующего кода.
4. Дублирующий фрагмент кода более одной строки можно попытаться [извлечь в новый метод](/ru/extract-method), если в этом есть смысл.
## Relations

**Eliminates smells**

- [Дублирование кода](/ru/smells/duplicate-code.md)

## Code Examples

### java

```java
// Before
if (isSpecialDeal()) {
  total = price * 0.95;
  send();
}
else {
  total = price * 0.98;
  send();
}

// After
if (isSpecialDeal()) {
  total = price * 0.95;
}
else {
  total = price * 0.98;
}
send();
```

### csharp

```csharp
// Before
if (IsSpecialDeal()) 
{
  total = price * 0.95;
  Send();
}
else 
{
  total = price * 0.98;
  Send();
}

// After
if (IsSpecialDeal())
{
  total = price * 0.95;
}
else
{
  total = price * 0.98;
}
Send();
```

### php

```php
// Before
if (isSpecialDeal()) {
  $total = $price * 0.95;
  send();
} else {
  $total = $price * 0.98;
  send();
}

// After
if (isSpecialDeal()) {
  $total = $price * 0.95;
} else {
  $total = $price * 0.98;
}
send();
```

### python

```python
// Before
if isSpecialDeal():
    total = price * 0.95
    send()
else:
    total = price * 0.98
    send()

// After
if isSpecialDeal():
    total = price * 0.95
else:
    total = price * 0.98
send()
```

### typescript

```typescript
// Before
if (isSpecialDeal()) {
  total = price * 0.95;
  send();
}
else {
  total = price * 0.98;
  send();
}

// After
if (isSpecialDeal()) {
  total = price * 0.95;
}
else {
  total = price * 0.98;
}
send();
```

