---
title: "Удаление присваиваний параметрам"
type: "refactoring-technique"
slug: "remove-assignments-to-parameters"
url: "http://localhost:3000/ru/remove-assignments-to-parameters.md"
category: "Составление методов"
description: "Проблема: Параметру метода присваивается какое-то значение. Решение: Вместо параметра воспользуйтесь новой локальной переменной."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Удаление присваиваний параметрам

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

## Problem

Параметру метода присваивается какое-то значение.

## Solution

Вместо параметра воспользуйтесь новой локальной переменной.

## Why Refactor

Причины проведения этого рефакторинга такие же, как и при [расщеплении переменной](/ru/split-temporary-variable), но в данном случае речь идёт о параметре, а не о локальной переменной.

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

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

## Benefits

* Каждый элемент программы должен отвечать только за одну вещь. Это сильно упрощает поддержку кода в будущем, так как вы можете спокойно заменить этот элемент, не опасаясь побочных эффектов.
* Этот рефакторинг помогает в дальнейшем [выделить повторяющиеся участки кода в отдельные методы](/ru/extract-method).

## How to Refactor

1. Создайте локальную переменную и присвойте ей начальное значение вашего параметра.
2. Во всем коде метода после этой строки замените использование параметра вашей локальной переменной.
## Relations

**Helps you do**

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

**Similar techniques**

- [Расщепление переменной](/ru/split-temporary-variable.md)

## Code Examples

### java

```java
// Before
int discount(int inputVal, int quantity) {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}

// After
int discount(int inputVal, int quantity) {
  int result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}
```

### csharp

```csharp
// Before
int Discount(int inputVal, int quantity) 
{
  if (quantity > 50) 
  {
    inputVal -= 2;
  }
  // ...
}

// After
int Discount(int inputVal, int quantity) 
{
  int result = inputVal;
  
  if (quantity > 50) 
  {
    result -= 2;
  }
  // ...
}
```

### php

```php
// Before
function discount($inputVal, $quantity) {
  if ($quantity > 50) {
    $inputVal -= 2;
  }
  ...

// After
function discount($inputVal, $quantity) {
  $result = $inputVal;
  if ($quantity > 50) {
    $result -= 2;
  }
  ...
```

### python

```python
// Before
def discount(inputVal, quantity):
    if quantity > 50:
        inputVal -= 2
    # ...

// After
def discount(inputVal, quantity):
    result = inputVal
    if quantity > 50:
        result -= 2
    # ...
```

### typescript

```typescript
// Before
discount(inputVal: number, quantity: number): number {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}

// After
discount(inputVal: number, quantity: number): number {
  let result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}
```

