Skip to content

Latest commit

 

History

History
169 lines (110 loc) · 8.06 KB

java_codestyle.md

File metadata and controls

169 lines (110 loc) · 8.06 KB

Главная

Android Java Code Style

Основные положения

Код должен соответствовать Code Conventions for the Java TM Programming Language и Google Java Style Guide. Если информация этого документа конфликтует с информацией из приведенных ранее, то следует придерживаться этого документа.

Перед Pull Request ОБЯЗАТЕЛЬНО делаем форматирование кода по Ctrl+Alt+L (⌘ + ⌥ + L)

Расположение методов

Хотя среды разработки имеет достаточно функционала облегчающего навигацию по коду, следует стараться, чтобы читателю вашего кода не приходилось к ним прибегать.

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

Его несколько тяжелее поддерживать, но это позволяет легче читать код класса сверху вниз, не прибегая к переходам.

Комментарии

  • Комментарии пишутся на русском языке.

  • Комментариями необходимо описывать предназначение всех классов, кроме самых простейших.

  • Методы необходимо дополнять комментариями, если их название не полностью объясняет выполняемые ими действия.

  • Комментарии для методов и классов должны быть в формате javadoc.

  • Комментарии необходимы для неочевидных участков кода.

  • Комментарии для классов и методов не должны раскрывать деталей реализации.

Правила именования типовых сущностей

Имена констант в xml:

  • screen_semantic_postfix, где
    • screen - имя экрана, где используется константа, может отсутствовать, если используется на многих экранах
    • semantic - смысл
    • postfix - назначение:
      • text строковая константа используется в TextView,
      • _btn строковая константа используется для Button
      • _message, _error_message - используется в Toast / Snack
      • _hint - подсказка в EditText -_padding, _margin - паддинг и марджин соответственно
      • _width, _height - ширина и высота соответственно

Имена layout

Имена xml layouts должны соответствовать шаблону prefix_semantic, где prefix :

  • activity_ - макет активити

  • fragment_ - макет фрагмента

  • layout_ - некий layout, встраиваемый в другой layout

  • list_item_ - элемент ListView

  • dialog_ - layout диалога

  • view_ - layout для кастомной android.View

Имена компонент в layout

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

Имена view-переменных

Именование переменных, соответствующих компонентам, должно соответствовать шаблону 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 вместо набора констант.