﻿# V8001\. Identical sub\-expressions to the left and to the right of the 'foo' operator\.

Анализатор обнаружил фрагмент кода, который может содержать логическую ошибку\. В тексте программы присутствует бинарное выражение, в котором левое и правое подвыражение одинаковы\. В качестве оператора такого выражения могут быть: <, \>, <\=, \>\=, \=\=, \!\=, &&, \|\|, \-, /, &, \| или ^\.

Рассмотрим пример:

```cpp
func ConvertRGB(rgb RGBContainer) {
  if rgb.R > 1 && rgb.G > 1 && rgb.R > 1 {
    ....
  }
  ....
}
```

В данном случае в условии есть два подвыражения `rgb.R > 1`, объединённые с помощью оператора `&&`\. Допущена ошибка по невнимательности, поскольку нет смысла использовать одно и то же подвыражение несколько раз через логический оператор `&&`\.

Корректный код, который не вызовет подозрений у анализатора, будет выглядеть так:

```cpp
func ConvertRGB(rgb RGBContainer) {
  if rgb.R > 1 && rgb.G > 1 && rgb.B > 1 {
    ....
  }
  ....
}
```

Анализатор производит сравнение блоков с учётом перестановки частей выражения относительно операторов\. Ошибка будет обнаружена и в следующем примере кода:

```cpp
if len([]rune(name)) > maxlength && 
   maxlength < len([]rune(name)) {
  ....
}
```