---
title: "Замена параметра вызовом метода"
type: "refactoring-technique"
slug: "replace-parameter-with-method-call"
url: "http://localhost:3000/ru/replace-parameter-with-method-call.md"
category: "Упрощение вызовов методов"
description: "Проблема: Вызываем метод и передаем его результаты как параметры другого метода. При этом значение параметров могли бы быть получены и внутри вызываемого метода. Решение: Вместо передачи значения через параметры метода, попробуйте переместить код получения значения внутрь самого метода."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Замена параметра вызовом метода

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

## Problem

Вызываем метод и передаем его результаты как параметры другого метода. При этом значение параметров могли бы быть получены и внутри вызываемого метода.

## Solution

Вместо передачи значения через параметры метода, попробуйте переместить код получения значения внутрь самого метода.

## Why Refactor

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

## Benefits

* Избавляемся от лишних параметров, упрощая вызовы методов. Эти параметры зачастую создаются как задел на будущее (которое может так и не наступить).

## How to Refactor

1. Убедитесь, что код получения значения не использует параметров из текущего метода. Это важно, так как параметры текущего метода будут недоступны внутри другого метода, из-за чего перенос станет невозможен.
2. Если код получения значения сложнее, чем один вызов какого-то метода или функции, примените [извлечение метода](/ru/extract-method), чтобы выделить этот код в новый метод и сделать вызов простым.
3. В коде главного метода замените все обращения к заменяемому параметру вызовами метода получения значения.
4. Используйте [удаление параметра](/ru/remove-parameter), чтобы удалить неиспользуемый теперь параметр.
## Code Examples

### java

```java
// Before
int basePrice = quantity * itemPrice;
double seasonDiscount = this.getSeasonalDiscount();
double fees = this.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);

// After
int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);
```

### csharp

```csharp
// Before
int basePrice = quantity * itemPrice;
double seasonDiscount = this.GetSeasonalDiscount();
double fees = this.GetFees();
double finalPrice = DiscountedPrice(basePrice, seasonDiscount, fees);

// After
int basePrice = quantity * itemPrice;
double finalPrice = DiscountedPrice(basePrice);
```

### php

```php
// Before
$basePrice = $this->quantity * $this->itemPrice;
$seasonDiscount = $this->getSeasonalDiscount();
$fees = $this->getFees();
$finalPrice = $this->discountedPrice($basePrice, $seasonDiscount, $fees);

// After
$basePrice = $this->quantity * $this->itemPrice;
$finalPrice = $this->discountedPrice($basePrice);
```

### python

```python
// Before
basePrice = quantity * itemPrice
seasonalDiscount = self.getSeasonalDiscount()
fees = self.getFees()
finalPrice = discountedPrice(basePrice, seasonalDiscount, fees)

// After
basePrice = quantity * itemPrice
finalPrice = discountedPrice(basePrice)
```

### typescript

```typescript
// Before
let basePrice = quantity * itemPrice;
const seasonDiscount = this.getSeasonalDiscount();
const fees = this.getFees();
const finalPrice = discountedPrice(basePrice, seasonDiscount, fees);

// After
let basePrice = quantity * itemPrice;
let finalPrice = discountedPrice(basePrice);
```

