diff --git a/README.md b/README.md index b50ddcb..6e08c5f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@ ## Intro -Правила описываются с помощью плагина Checkstyle [http://checkstyle.sf.net/](http://checkstyle.sf.net/). +The following list offers practical advices that will help you write better Java code. + +These rules has been written on Checkstyle [http://checkstyle.sf.net/](http://checkstyle.sf.net/). Для соблюдения всеми разработчиками **Coding Style**, необходимо **включить проверку на стадию Continuous Integration** с помощью плагинов: @@ -68,4 +70,86 @@ project-name ## Source File ### Encoding -Файлы с исходным кодом должны быть в кодировке `UTF-8`. \ No newline at end of file +Файлы с исходным кодом должны быть в кодировке `UTF-8`. + +### Выравнивание +* Использовать пробелы (не табы), один отступ - 4 пробела +* Строки должны заканчиваться на **LF** (Unix way), не CRLF (Windows way) +* Длина строки не должна превышать 120 символов (исключение import statements) +* Файл должен заканчиваться пустой строкой + +## Структура файла с исходным кодом +1. Лицензия +2. Пакет (package statement) +3. Пустая строка +4. Импорт зависимостей (import statements) +5. Пустая строка +6. Один класс верхнего уровня + +### Лицензия +В каждый файл с исходным кодом следует помещать лицензию в заголовок. + +#### Полный текст с лицензией + +```java + /* + * Copyright (C) 2019 Arthur Aukhatov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + ``` + +#### Сокращенный текст с лицензией + + ```java +/* + * Copyright (C) 2019 Arthur Aukhatov + * + * This software may be modified and distributed under the terms + * of the MIT license. See the LICENSE file for details. + */ + ``` + +### Import Statements + +Зависимости в **import statements** следует структурировать следующим образом: + + * import `java.*` + * `` + * import `javax.*` + * `` + * 3rd party imports + * `` + * import `your.own.imports` + * `` + * other static imports + +> Импорты с `wildcard` не рекомендуется использовать - если импортов так много, значит следует разбить класс на несколько + +### Java Class Structure + +Описание порядка организации/структуризации элементов `java` класса: + +1. **static** поля класса +2. **public** поля экземпляра +3. **protected** поля экземпляра +4. **private** поля экземпляра +5. **конструктор без параметров** +6. **другие конструкторы** +7. **private** методы, который вызываются из конструктора +8. **static** фабричные методы +9. **getters**, **setters** +10. реализации методов интерфейса +11. **private** или **protected** методы вызываемые из метода реализации интерфейса +12. другие методы +13. `equals`, `hashCode`, `toString`