Соглашения об именовании в Java

Соглашения об именовании в Java

Денис
Классика

Соглашение об именовании — это такой документ. Разработчики договариваются, как они будут называть переменные, классы, методы, функции и т.д. в коде. В результате получается документ — соглашение об именовании.

На английском это называется Naming Conventions

В разных языках принято по-разному. В Java с соглашеним об именовании строго: если в одном C++ проекте используется snake_case, а в другом - CamelCase, то в Java везде одинаковое соглашение.

Я расскажу о соглашении об именовании в Java: как правильно и нет, не углубляясь в детали, и дам ссылки


Код, соблюдающий Java Naming Conventions

На скриншоте пример кода, из учебного проекта RestBucks. Он учитывает принятые соглашения об именовании:

  1. Имя класса "Engine" — в CamelCase. Каждое слово - с заглавной буквы, без нижних подчёркиваний, первая буква - заглавная.
  2. Именя полей "orders", "settings", "ordersInProgress"lowerCamelCase
  3. Метод handleOrderPaidEventlowerCamelCase

В Java не принято писать так:

Код, не соблюдающий Java Naming Conventions

Я изменил первый пример, и Intellij IDEA начала подсвечивать мне код жёлтым в местах, где я ошибся:

  1. Имена классов должны начинаться с заглавной буквы - Engine
  2. Поля _orders, settings_, orders_in_progress: нижние подчёркивания не годятся. Должно быть orders, settings, ordersInProgress.
  3. Имя метода должно начинаться с со строчной буквы: handleOrderPaidEvent
  4. Локальная переменная processing_ime. Должно быть processingTime

Нижние подчёркивания разрешены в константах, пример из ArrayList:


Формальные правила

У Oracle есть документ https://www.oracle.com/java/technologies/javase/codeconventions-contents.html (последняя ревизия была аж в 1999 году!).

Но я препочитаю давать ссылку на Google Code Style.

И документ Oracle, и Google рассказывают примерно об одном и том же.

На практике

На практике главное соблюдать именование классов, параметров, методов и т.д., а для всего остального, например, выбора между табами и пробелами придерживаться того, что принято в проекте.

IDE, например, Intellij IDEA умеет сама форматировать код, от разработчика только требуется нажать кнопку или включить форматирование при коммите.

Подробнее: https://www.jetbrains.com/help/idea/reformat-and-rearrange-code.html

Спорные моменты

Константы

По правилам константы должны именоваться ЗАГЛАВНЫМИ_БУКВАМИ_С_НИЖНИМИ_ПОДЧЕРКИВАНИЯМИ.

Обычно под константой в Java понимают static final поле. Однако, на мой взгляд, если я в static final поле положил изменяемый список myList, то я не должен называть его MY_LIST. Константы не меняются, а список можно менять.

При этом если список неизменяемый, то мне кажется правильным назвать его MY_LIST.

Некоторые проекты всё равно будут наставить на именовании MY_LIST, даже если список изменяемый.

Примеры кода

  1. Код библиотеки JDK. Например, исходный код ArrayList
  2. Guava - это библиотека от Google. Например, HostAndPort

Инспекции Intellij IDEA

У меня Intellij IDEA подсветила код с ошибками. По умолчанию она это не делает. Чтобы Intellij IDEA начала подсвечивать ошибочные имена, я сделал профиль инспекций: https://github.com/diligent-snail/intellij-idea-inspections

Заключение

  1. Соглашение об именовании в Java не отличается между проектами
  2. Google Code Style формальный документ с требованиями к именованию и Code Style
  3. В Intellij IDEA используем встроенное форматирование

Report Page