---
title: "Параметризация метода"
type: "refactoring-technique"
slug: "parameterize-method"
url: "http://localhost:3000/ru/parameterize-method.md"
category: "Упрощение вызовов методов"
description: "Проблема: Несколько методов выполняют похожие действия, которые отличаются только какими-то внутренними значениями, числами или операциями. Решение: Объедините все эти методы в один с параметром, в который будет передаваться отличающееся значение."
---
# Параметризация метода

> Проблема: Несколько методов выполняют похожие действия, которые отличаются только какими-то внутренними значениями, числами или операциями. Решение: Объедините все эти методы в один с параметром, в который будет передаваться отличающееся значение.

## Problem

Несколько методов выполняют похожие действия, которые отличаются только какими-то внутренними значениями, числами или операциями.

## Solution

Объедините все эти методы в один с параметром, в который будет передаваться отличающееся значение.

## Why Refactor

Если у вас есть схожие методы, скорей всего, в них присутствует дублирующий код со всеми вытекающими недостатками.

Кроме того, если вам нужно будет добавить ещё одну вариацию функциональности, вам придётся создавать ещё один метод. Вместо этого можно бы было запустить существующий метод с другим параметром.

## How to Refactor

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

**Similar techniques**

- [Извлечение метода](/ru/extract-method.md)
- [Создание шаблонного метода](/ru/form-template-method.md)

**Opposite refactorings**

- [Замена параметра набором специализированных методов](/ru/replace-parameter-with-explicit-methods.md)

**Eliminates smells**

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

