Совпадающие выражения в вычислениях
Части выражений, находящиеся справа и слева от операторов *
, не должны быть одинаковыми.
Подобный код снижает читаемость, а также может приводить к трудновыявляемым проблемам. Т.к. при необходимости внесения одинаковых изменений в обе части, может возникнуть опечатка.
Подозрительный код
Перем2 = Перем1 * Перем1;
Правильный код
Перем2 = pow(Перем1, 2);
См. также
- Неверное и бессмысленное арифметическое выражение
- Правило Совпадающие/одинаковые тела методов
- Правило Дублирование одинаковых/похожих блоков кода
- Правило Одинаковые условия в последовательности вида "Если (....) ИначеЕсли (....) ИначеЕсли (....)".
- Правило Сравнение выражения с самим собой
- Правило Одинаковый код во взаимоисключаемых ветках ветвления кода
- Правило Одинаковые выражения (вызов методов) в разных ветках/блоках кода
- Правило Одинаковые части условий в разных условиях блока "Если ИначеЕсли"
- V501. There are identical sub-expressions to the left and to the right of the 'foo' operator
- Статья на хабре от PVS-Studio
Экранирование кода
// sonar:EqualExpressionInCalculation:off
// sonar:EqualExpressionInCalculation:on