- Основные положения
- Расположение методов
- Комментарии
- Правила именования типовых сущностей
- Использование аннотаций
- Остальное
Код должен соответствовать Code Conventions for the Java TM Programming Language и Google Java Style Guide. Если информация этого документа конфликтует с информацией из приведенных ранее, то следует придерживаться этого документа.
Перед Pull Request ОБЯЗАТЕЛЬНО делаем форматирование кода по Ctrl+Alt+L
(⌘ + ⌥ + L
)
Хотя среды разработки имеет достаточно функционала облегчающего навигацию по коду, следует стараться, чтобы читателю вашего кода не приходилось к ним прибегать.
Наилучший подход к упорядочению методов основан на уровнях абстракции. Возьмем метод самого высокого уровня абстракции. После него располагаются методы которые он вызывает, после этих методов -- методы которые вызываются в них, и так пока не будет достигнут самый нижний уровень абстракции. После этого берется следующий метод из верхнего, неупорядоченного, уровня абстракции. Пример такого порядка.
Его несколько тяжелее поддерживать, но это позволяет легче читать код класса сверху вниз, не прибегая к переходам.
-
Комментарии пишутся на русском языке.
-
Комментариями необходимо описывать предназначение всех классов, кроме самых простейших.
-
Методы необходимо дополнять комментариями, если их название не полностью объясняет выполняемые ими действия.
-
Комментарии для методов и классов должны быть в формате javadoc.
-
Комментарии необходимы для неочевидных участков кода.
-
Комментарии для классов и методов не должны раскрывать деталей реализации.
- screen_semantic_postfix, где
- screen - имя экрана, где используется константа, может отсутствовать, если используется на многих экранах
- semantic - смысл
- postfix - назначение:
- text строковая константа используется в TextView,
- _btn строковая константа используется для Button
- _message, _error_message - используется в Toast / Snack
- _hint - подсказка в EditText -_padding, _margin - паддинг и марджин соответственно
- _width, _height - ширина и высота соответственно
Имена xml layouts должны соответствовать шаблону prefix_semantic, где prefix :
-
activity_ - макет активити
-
fragment_ - макет фрагмента
-
layout_ - некий layout, встраиваемый в другой layout
-
list_item_ - элемент ListView
-
dialog_ - layout диалога
-
view_ - layout для кастомной android.View
id компонентов в layout должны соответствовать шаблону semantic_postfix, где _postfix тип компонента, для распространенных компонентов используется сокращенное название, для остальных полное:
-
_tv - TextView
-
_btn - Button
-
_ibtn - ImageButton
-
_et - EditText
-
_iv - ImageView
-
_pb - ProgressBar
-
_chb - CheckBox
-
_rv - RecyclerView
-
_containter - любой ViewGroup
-
_view - кастомная вью
Константы использующиеся для передачи данных через Intent или Bundle помечаются префиксом EXTRA_. (Есть предустановленные)
-
для парсинга ответа должны быть с суффиксом Response
-
для формирования запроса должны быть с суффиксом Request
-
для парсинга вложенных Json объектов должны быть с суффиксом Obj
-
для сущностей в ORM должны быть с суффиксом Dbo
Именование переменных, соответствующих компонентам, должно соответствовать
шаблону semanticPostfix
, где Postfix
:
- Tv - TextView
- Btn - Button
- Ibtn - ImageButton
- Et - EditText
- Iv - ImageView
- Pb - ProgressBar
- Chb - CheckBox
- Til - TextInputLayout
- Rb - RadioButton
Если возвращаемое значение метода может быть null
, необходимо добавить
аннотацию @Nullable
. То же и для параметров метода.
Если какой либо метод не должен выполняться в главном потоке, то его
следует пометить аннотацией @WorkerThread
.
Если параметры или возвращаемое значение метода являются id ресурса,
то следует пометить их аннотациями @StringRes
, @LayoutRes
, и тд.
Замечание: @ColorInt
не относится к id ресурса
Все поля в объектах SomeResponse
, SomeRequest
, SomeObj
должны быть
с аннотацией @SerializedName
.
-
Цепочечные вызовы следует располагать друг под другом.
-
большинство методов, возвращающих boolean должны начинаться с
is***
,are***
. Допустимо также использовать префиксыcan***
,should***
,has***
,not***
. Примечание: соблюдаем грамматику английского языка. -
Для наборов логически связанных значений следует использовать
Enum
вместо набора констант.