Что такое чистый код и каковы его принципы?

Ответ

Чистый код — это практика написания программного обеспечения, при которой код становится понятным и предсказуемым как книга. Это реализация принципов хорошего кода на практике.

Основные принципы:

  1. Выразительные имена: Имя должно сразу отвечать на вопросы "что это?" и "зачем это?".

    // Плохо
    var d: Int
    func pr() {}
    
    // Хорошо
    var daysSinceLastLogin: Int
    func printInvoice() {}
  2. Компактные функции: Функция должна делать одну вещь и умещаться на одном экране (обычно < 20 строк).

  3. Минимум аргументов: Чем меньше параметров у функции, тем легче её понять и тестировать. 0-2 аргумента — идеально.

  4. Отсутствие "магических" чисел и строк: Все константы должны быть именованными.

    // Плохо
    if user.age >= 18 { ... }
    
    // Хорошо
    let legalAdultAge = 18
    if user.age >= legalAdultAge { ... }
  5. Прямолинейная логика: Избегайте глубокой вложенности условий. Используйте guard для раннего возврата.

    // Плохо
    func process(order: Order?) {
        if order != nil {
            if order?.isValid == true {
                // основная логика
            }
        }
    }
    
    // Хорошо
    func process(order: Order?) {
        guard let order = order, order.isValid else { return }
        // основная логика
    }
  6. Соблюдение соглашений: Следование принятым в команде и языку стандартам (отступы, структура файлов).

Цель: Чистый код экономит время и нервы всей команды на этапах ревью, отладки и рефакторинга.

Ответ 18+ 🔞

Слушай, а вот этот ваш «чистый код» — это ж не какая-то там высшая математика, а просто, блядь, здравый смысл, доведённый до абсолюта! Это когда ты пишешь так, чтобы через полгода не пришлось разгадывать свои же шифровки, как египетские иероглифы, сука.

Основная мысль — код должен быть как хорошая книжка: открыл, прочитал, всё понял, а не как записка от психопата, где каждая строчка — новая загадка.

Вот на чём всё держится, если по-простому:

  1. Имена, от которых не болит башка. Называй вещи так, чтобы сразу было ясно, что это за хуйня и зачем она нужна. Не d, а daysSinceLastLogin. Не pr(), а printInvoice(). Элементарно, Ватсон! А то потом сидишь и гадаешь: «А это d — это дни или доллары? А pr — это print или prank?».

    // Пиздец, что это?
    var d: Int
    func pr() {}
    
    // А, вот теперь понятно, спасибо, кэп!
    var daysSinceLastLogin: Int
    func printInvoice() {}
  2. Функции-коротышки. Функция должна делать ОДНУ вещь. И влезать, в идеале, на один экран. Если она разрослась, как говно в проруби, — пора резать на куски. 20 строк — уже много, 100 — это пиздец, апокалипсис.

  3. Аргументов — в меру. Чем их меньше, тем лучше. Ноль — идеально. Два — ещё терпимо. Три — уже подозрительно. Пять — ты явно что-то делаешь не так, дружок. С таким количеством параметров уже и тестировать страшно, и вызывать.

  4. Никакой магии, только хардкор. Эти ваши «магические числа» и строки, раскиданные по коду — они же как мины. Наступишь — проект ебнется. Выноси в константы с нормальными именами, и спи спокойно.

    // Плохо: а почему 18? А если закон поменяется?
    if user.age >= 18 { ... }
    
    // Хорошо: всё на своих местах, всё ясно.
    let legalAdultAge = 18
    if user.age >= legalAdultAge { ... }
  5. Прямая дорога, а не лабиринт Минотавра. Зачем городить эти вложенные if в три этажа, если можно сделать красиво и с guard? Ранний выход — наше всё. Сразу отсекаем всё невалидное и идём по чистому, прямому пути к логике.

    // Плохо: уже голова кружится от вложенности.
    func process(order: Order?) {
        if order != nil {
            if order?.isValid == true {
                // основная логика
            }
        }
    }
    
    // Хорошо: guard, как вышибала, — не прошёл проверку, нахуй с пляжа.
    func process(order: Order?) {
        guard let order = order, order.isValid else { return }
        // основная логика — чистое поле!
    }
  6. Держи строй! Соблюдай соглашения команды и языка. Отступы, порядок импортов, структура файлов — это не для зануд, это чтобы все выглядело единообразно. Открываешь любой файл — и сразу понимаешь, где что искать.

А суть-то, блядь, в чём? В экономии времени и нервов, ебать мои старые костыли! Ты потратишь на написание чистого кода на 10% больше времени сейчас, но сэкономишь 90% времени и сил всей команды потом, когда этот код будут читать, править, дебажить и расширять. Это как инвестиция в своё же спокойное будущее, а не в адский рефакторинг в пятницу вечером.