Что означает принцип KISS в разработке?

Ответ

Принцип KISS (Keep It Simple, Stupid / Keep It Short and Simple) — это философия проектирования, призывающая создавать максимально простые и понятные решения. Сложность увеличивает вероятность ошибок, усложняет понимание, тестирование и поддержку кода.

Практическое применение KISS:

  1. Простые функции: Функция должна делать одну вещь и делать её хорошо.

    // Сложно для восприятия
    func process(data: [Int]) -> [Int] {
        return data.filter { $0 > 0 }.map { $0 * $0 }.sorted()
    }
    
    // Проще и понятнее (можно вынести шаги в отдельные функции с говорящими именами)
    func getPositiveNumbers(from array: [Int]) -> [Int] {
        return array.filter { $0 > 0 }
    }
    func squareNumbers(_ array: [Int]) -> [Int] {
        return array.map { $0 * $0 }
    }
    func processData(_ data: [Int]) -> [Int] {
        let positive = getPositiveNumbers(from: data)
        let squared = squareNumbers(positive)
        return squared.sorted()
    }
  2. Понятные имена: Имена переменных, функций и классов должны однозначно отражать их назначение.

  3. Избегание преждевременной оптимизации и излишней абстракции: Не добавляй сложные паттерны «на будущее», если текущие требования этого не требуют.

  4. Прямолинейный поток управления: Минимизируй вложенность условий (if/else) и циклов.

Цель KISS: Сделать код настолько простым, чтобы его мог понять даже новый разработчик в команде.

Ответ 18+ 🔞

Слушай, а вот есть такая хуйня, принцип KISS. Расшифровывается как «Keep It Simple, Stupid», что в переводе на наш, блядь, родной означает «делай проще, долбоёб». Суть в чём, а? В том, что если решение выглядит как ёперный театр с куполами и хуями в пальто — ты, скорее всего, накосячил. Сложность — это рассадник багов, пиздеца и вечных вопросов «какого хуя тут написано?» от коллег, которым через полгода этот код поддерживать.

Как это выглядит на практике, ёпта?

  1. Функции-однодневки. Функция должна делать что-то одно. Не «принять данные, валидировать, отправить на сервер, обработать ответ, обновить интерфейс и сходить за хлебом». Одно действие. Посмотри на этот пиздец:

    // Че это блядь такое? Фильтруем, потом мапим, потом сортируем... Всё в одну строку, красава. А через месяц читать.
    func process(data: [Int]) -> [Int] {
        return data.filter { $0 > 0 }.map { $0 * $0 }.sorted()
    }

    А теперь так:

    // Всё, блядь, по полочкам. Каждая функция — как отдельный винтик. Понятно, что происходит.
    func getPositiveNumbers(from array: [Int]) -> [Int] {
        return array.filter { $0 > 0 }
    }
    func squareNumbers(_ array: [Int]) -> [Int] {
        return array.map { $0 * $0 }
    }
    func processData(_ data: [Int]) -> [Int] {
        let positive = getPositiveNumbers(from: data)
        let squared = squareNumbers(positive)
        return squared.sorted()
    }

    Да, строк больше. Но читается так, будто тебе книжку вслух читают, а не шифровку из штаба Рейха подсовывают.

  2. Имена, от которых не болит булка. Не называй переменную x, temp или dataHandlerFactoryAdapterImpl. Назови так, чтобы даже пьяный в стельку стажёр, глянув, сказал: «А, ну это ж ясно, блядь, userProfileImageURL».

  3. Не выёбывайся с архитектурой. Не надо впаривать абстрактную фабрику для двух кнопок на экране «О приложении». Не надо оптимизировать цикл из пяти элементов, ебать его в сраку. Сначала сделай просто и чтобы работало. Потом, если реально упрёшься в проблему — будешь думать.

  4. Прямой как палка код. Если твой if внутри switch внутри for внутри ещё какого-то if — это уже не код, а лабиринт Минотавра. Выпрямляй эту хуйню. Ранние возвраты (guard, return) — твои лучшие друзья.

А главная цель KISS, блядь, какая? Чтобы код был настолько простым и очевидным, что новый чувак в команде, только вчера пришедший, посмотрел на него и сказал: «Да, ну тут всё понятно». А не сидел три часа, чеша репу, и не гуглил «что за хуйня». Вот и весь принцип. Не умничай, делай проще.