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

Баг: Слишком глубокие вложения (лестница ужасов)

Когда ты вкладываешь if в if в if - код становится нечитаемым. Это называется "лестница ужасов" (pyramid of doom).

// ❌ ПЛОХО (не читается)
if hasCarrot {
    if hasPotato {
        if hasOnion {
            if hasSalt {
                fmt.Println("Овощное рагу!")
            } else {
                fmt.Println("Нет соли...")
            }
        } else {
            fmt.Println("Нет лука...")
        }
    } else {
        fmt.Println("Нет картошки...")
    }
} else {
    fmt.Println("Нет морковки...")
}

Как исправить:

  1. Ранний выход (early return) - но это для функций, мы пока не проходили, но если кратко - вместо того чтобы вкладывать код внутрь if, проверяйте негативные условия и выходите из функции сразу.

  2. Объединять условия через &&:

// ✅ ХОРОШО
if hasCarrot && hasPotato && hasOnion && hasSalt {
    fmt.Println("Овощное рагу!")
} else {
    fmt.Println("Чего-то не хватает...")
}
  1. Использовать else if вместо вложенных:

// ✅ ЛУЧШЕ
if !hasCarrot {
    fmt.Println("Нет морковки")
} else if !hasPotato {
    fmt.Println("Нет картошки")
} else if !hasOnion {
    fmt.Println("Нет лука")
} else if !hasSalt {
    fmt.Println("Нет соли")
} else {
    fmt.Println("Овощное рагу!")
}

"Лестница ужасов" - это признак того, что функция делает слишком много или неправильно структурирована. Цель рефакторинга - сделать основную логику плоской (минимальная вложенность), а проверки вынести наверх или в отдельные функции.

Загрузка...