An Empty Line is a Code Smell

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Тема может показаться шуткой, но это не так. Пустая строка, используемая в качестве разделителя инструкций в методе объекта, является симптомом кода. Почему? Вкратце, потому что метод не должен содержать “части”. Метод всегда должен делать одну вещь, а его функциональное разложение должно производиться с помощью языковых конструкций (например, новых методов), а никогда с помощью пустых строк.

Посмотрите на этот класс на Java (он пахнет, не так ли?):

Этот метод сначала загружает содержимое файла. Затем он подсчитывает количество строк, соответствующих предоставленному регулярному выражению. Так почему метод grep “пахнет”? Потому что он делает две вещи вместо одной - загружает и ищет.

Если мы установим правило, чтобы избегать пустых строк в теле метода, метод придется переработать, чтобы сохранить “разделение ответственностей”, введенное этой пустой строкой:

Я считаю, что очевидно, что у этого нового класса методы намного более связаны и читаемы. Теперь каждый метод делает ровно одну вещь, и легко понять, какую именно.

Эта идея об избегании пустых строк также применима и к другим языкам, а не только к Java/C++/Ruby и т.д. Например, этот CSS-код определенно требует рефакторинга.

Пустая строка здесь говорит нам (фактически кричит нам), что класс .container слишком сложен и должен быть разделен на два класса:

К сожалению, использование пустых строк для разделения блоков кода является очень распространенной привычкой. Более того, очень часто я вижу пустые блоки из двух или даже трех строк, которые все выполняют эту злую роль разделителя задач.

Само собой разумеется, что правильно спроектированный класс должен иметь всего несколько публичных методов, а правильно спроектированный метод должен содержать до десяти инструкций (по словам Боба Мартина). Пустые строки внутри методов побуждают нас нарушать эту замечательную правило и превращать их в многостраничные поэмы.

Конечно, проще просто несколько раз нажать enter и продолжить кодировать прямо в том же методе, вместо того чтобы сначала подумать и провести рефакторинг. Эта лень в конечном итоге приведет к коду, который практически невозможно поддерживать.

Чтобы предотвратить это в своих проектах, перестаньте использовать пустые строки внутри методов полностью. Идеально было бы запретить их в автоматизированной сборке. В qulice.com, инструменте статического анализа, который мы используем во всех проектах на Java, мы создали свою собственную проверку Checkstyle, которая запрещает пустые строки в каждом методе.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 13:30

sixnines availability badge   GitHub stars