Игра, помогающая визуализировать эффекты стиля размещения скобок в Java.

Цель — быть объективной

Несколько лет назад я придумал творческий подход, чтобы помочь установить и согласовать стиль кодирования с новой командой, над которой я работал. Мы были на начальных этапах кодирования нового проекта с использованием языка программирования Java. Я попросил, чтобы мы приняли решение и согласовали единые принципы стиля кода как команда, заранее. Я знал, что мне нужно придумать объективный и творческий аргумент для решения одного из спорных споров о стиле кода в Java — где разместить фигурные скобки.

Выбор творчества вместо конфликта

Плыть против течения «но все так делают» сложно. Еще сложнее, когда уважаемая поисковая компания ставит печать одобрения на определенный стиль программирования Java.

Чтобы помочь мне представить объективные аргументы в пользу определенного стиля размещения брекетов, я создал игру, которую назвал «Соедини брекеты». Я взял код из двух созданных мной примеров классов и вставил их в презентацию Powerpoint, буквально нарисовав линии поверх кода, чтобы соединить начальную и конечную фигурные скобки. Игра была вдохновлена ​​одной из моих любимых игр детства — «Соедини точки».

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

Я представил игру команде, и после того, как я закончил, никто не ответил: «Но все так делают». Это подтвердило, что по крайней мере одна команда хорошо отреагировала на творческий аргумент о стиле размещения брекетов.

Автоматизация игры

Я рассказал моему другу Владимиру Захарову (Владу) об этой игре и о том, как она эффективно разрядила то, что я ранее испытал как зажигательные дебаты. Я спросил Влада, может ли он написать код на Java для визуализации игры, которую я ему описал. Влад лучше меня разбирается в визуальном программировании, поэтому я знал, что он завершит код быстрее, чем я.

Влад сделал кое-что даже лучше, чем просто соединил фигурные скобки в исходном файле. Он также выделял блоки кода зеленым цветом. Это имеет дополнительное преимущество визуального выделения пробелов.

Изображения в следующем разделе были сгенерированы с использованием автоматизированной версии Connect the Braces Влада на реальном коде из Eclipse Collections Kata.

Предупреждение! Игра началась!

Следующие изображения являются графическими. Некоторых разработчиков они могут смутить. Фактический исходный код был использован при создании следующих визуальных эффектов. Любые изображения, которые нельзя скрыть после прокрутки этого текста, являются исключительной ответственностью человека, который прокручивает, а не автора. Любые фрукты или домашние животные, которые пострадали во время двух раундов «Соедини скобки», были результатом выбора стиля кода, а не автором. Выбирай с умом. Вы были предупреждены!

Раунд первый: Fruit Enum

Второй раунд: перечисление PetType

Выбор ясности вместо беспорядка

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

Я предпочитаю ясность беспорядку. Сигнал над шумом. Я выбираю стиль справа.

Цитирую мой друг Влад:

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

Стиль форматирования с вертикальными скобками имеет естественный эффект четкого разделения «что» от «как» за счет введения пробела между сигнатурой (определениями классов и методов) и реализацией (переменные и код). Начальная и конечная фигурные скобки всегда находятся в одном и том же горизонтальном положении с изменчивостью, основанной на глубине вложенных областей (например, операторы управления, такие как if, for и while). Вы ожидаете увидеть основание в форме пирамиды с фигурными скобками, поэтому можете спокойно игнорировать их расположение, потому что вы знаете, где они находятся. В этом стиле легко реализовать автоматическое форматирование в вашей среде IDE и применить его в сборке CheckStyle.

Я плыву против течения, используя этот стиль форматирования фигурных скобок в Java уже более 20 лет. Разработчикам, которым из-за меня приходится читать или работать с кодовыми базами, отформатированными с использованием стиля размещения вертикальных скобок, мне есть что сказать.

Пожалуйста!

Исключение из правил

Я выбираю другой стиль размещения скобок при создании слайдов Powerpoint или текста для книги с кодом Java. Только в этих двух печатных изданиях я почти всегда выбираю стиль, который предполагает меньшее количество строк кода. Разбивать код на страницы нежелательно. Это компромисс, который достигается из-за ограничений доступного вертикального пространства. Это наложенное ограничение не существует в коде, который вы читаете в своей IDE, или в браузере, читающем источник из VCS, такого как GitHub или GitLab, где вертикальная прокрутка работает просто отлично.

Семь неэффективных привычек кодирования многих программистов

Через несколько месяцев после того, как я создал игру «Соедини брекеты», я наткнулся на удивительный доклад Кевлина Хенни, который представил отличный аргумент в пользу определенного стиля установки брекетов, среди многих других замечательных моментов, которые он приводит в разговор о стиле кодирования.

Итак, то, что я только что сказал вам, если вам интересно, да, есть способ определить правильный способ выравнивания брекетов… объективно.

Никаких спойлеров. Очень рекомендую посмотреть это выступление. Предупреждение, это выступление может стать конструктивным нарушением вашего текущего стиля кодирования.

Призыв к действию в стиле кода Java

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

Вот мои правила построения приемлемого стиля кодирования в команде.

  1. Обсудите с вашей командой рекомендации по стилю кода.
  2. Применяйте согласованные рекомендации по стилю кода в своем проекте, используя правила автоматического форматирования, закодированные и настроенные в вашей любимой среде IDE.
  3. Запустите автоматическую непрерывную сборку, которая прервется из-за коммитов с несогласованным стилем кода (например, CheckStyle).
  4. Опубликуйте свои рекомендации по стилю кода в системе контроля версий вашего проекта.
  5. Имейте смелость и найдите время, чтобы развить свои принципы стиля кода, когда вы обнаружите или узнаете что-то новое.

Этот блог посвящен только одному аспекту стиля кода — размещению фигурных скобок. Есть много других аспектов стиля кода, которые следует учитывать, и Кевлин отлично объясняет некоторые из них в своем выступлении. Я настоятельно рекомендую посмотреть выступление Кевлина «Семь неэффективных привычек кодирования многих программистов», на которое я ссылался выше. Я рекомендую обсудить и согласовать в команде, как вы будете решать долгосрочные свойства читабельности вашей базы кода. Не перенимайте чужой стиль кода только потому, что он удобен и доступен.

Не стесняйтесь использовать игру Connect the Braces, чтобы способствовать рациональным и объективным обсуждениям стиля кода, особенно в том, что касается обсуждения стиля размещения фигурных скобок в Java. Если вам нравится этот стиль и вы хотите увидеть настройки стиля кода, которые мы использовали в IntelliJ IDEA для коллекций Eclipse в течение последних семи лет, они проверены на GitHub здесь.

Наслаждаться!

Я являюсь создателем и участником проекта OSS Eclipse Collections, которым управляет Eclipse Foundation. Eclipse Collections открыт для вкладов.