﻿# V6123\. Modified value of the operand is not used after the increment/decrement operation\.

Анализатор обнаружил, что значение постфиксной операции не используется\. Скорее всего, или операция избыточна, или вместо постфиксной операции следует использовать префиксную\.

Пример:

```cpp
int calculateSomething() {
  int value = getSomething();
  ....
  return value++;
}
```

В данном примере имеется локальная переменная 'value'\. Ожидается, что метод вернёт её инкрементированное значение\. Однако согласно [JLS](https://docs.oracle.com/javase/specs/jls/se21/html/jls-15.html#jls-15.14.2):

> The value of the postfix increment expression is the value of the variable before the new value is stored\.

Таким образом оператор '\+\+' никак не повлияет на значение, которое вернёт метод 'calculateSomething'\. Возможный исправленный вариант:

```cpp
int calculateSomething() {
  int value = getSomething();
  ....
  return ++value;
}
```

Следующий вариант исправления кода ещё лучше подчёркивает, что следует вернуть значение на единицу больше:

```cpp
int calculateSomething() {
  int value = getSomething();
  ....
  return value + 1;
}
```

Мы рекомендуем использовать второй вариант, так как его проще понять\.

Рассмотрим ещё один синтетический пример:

```cpp
void foo() {
  int value = getSomething();
  bar(value++);
  bar(value++);
  bar(value++);
}
```

Каждый раз метод 'bar' вызывается с аргументом на единицу больше\. Последний инкремент не имеет смысла, так как увеличенное значение переменной далее не используется\. Однако ошибки здесь нет, так как последний инкремент написан из эстетических соображений\. Предупреждение не выдаётся, если переменная последовательно инкрементируется более двух раз подряд\.

Однако мы всё равно рекомендуем писать следующим образом:

```cpp
void foo() {
  int value = getSomething();
  bar(value++);
  bar(value++);
  bar(value);
}
```

Или так:

```cpp
void foo() {
  int value = getSomething();
  bar(value + 0);
  bar(value + 1);
  bar(value + 2);
}
```