Правила форматирования кода в Java (ч. 5.2)

Вторая часть статьи, посвященной форматированию кода в Java. Из нее вы узнаете, как форматировать классы, методы и массивы.

Правила форматирования кода в Java (ч. 5.2)

2.5. Правила для методов

1) Если имя метода состоит из более, чем одного слова, то для именования используется camelCase

неправильно:

void addnumber(int number) boolean isexist() void makemove()

правильно:

void addNumber(int number) boolean isExist() void makeMove()

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

неправильно:

void endGame() int calculation() void attemptsClear()

правильно:

void finishGame() int calculate() void clearAttempts() void factorial() int max()

3) Классическое именование boolean-методов происходит по схеме:
is/has/can/should + прил. (сущ.) + сущ. (опционально) + глагол (опционально). Но встречаются и другие схемы

неправильно:

boolean getPermission() boolean LogEvent() boolean check() boolean findNext() boolean errorStatus()

правильно:

1) is + прил. (сущ.) + сущ. (опционально): boolean isActive() boolean isValidEmail() boolean isLetter() 2) has + прил. (сущ.) + сущ. (опционально): boolean hasPermission() boolean hasErrors() boolean hasNextPage() boolean hasUnreadMessages() 3) can + глагол + сущ. (опционально): boolean canRead() boolean canSendMessage() boolean canGenerateReport() 4) should + глагол + сущ. (опционально): boolean shouldUpdate() boolean shouldLogEvent() boolean shouldSaveChanges()

4) Имена методов всегда должны начинаться с маленькой буквы

неправильно:

char GetLetter() void ClearEnteredNumbers() Player CreatePlayer()

правильно:

char getLetter() void clearEnteredNumbers() Player createPlayer()

5) Между именем метода и круглой скобкой ( пробел не ставится

неправильно:

public static void main (String[] args) public int getIndex (String uuid) System.out.println ("Math operator is wrong!")

правильно:

public static void main(String[] args) public int getIndex(String uuid) System.out.println("Math operator is wrong!")

6) Размещайте { на той же строке, что и конструкция к которой она принадлежит

неправильно (так форматируют в C# и C++):

foo() { }

правильно:

foo() { }

7) После объявления метода пустая строка не ставится

неправильно:

public static void main(String[] args) { int number = 5; }

я это называю программерской клаустрофобией. Ей страдают по началу все новички. В интернете полно примеров, где пустая строка ставится. Но не делайте так. Нет никаких правил или обоснований это делать

правильно:

public static void main(String[] args) { int number = 5; }

8) Отделяйте реализацию методов друг от друга пустой строкой

неправильно:

public void setName(String name) { this.name = name; } public String getName() { return name; } public void move() { // some code } public void fire() { // some code }

правильно:

public void setName(String name) { this.name = name; } public String getName() { return name; } public void move() { // some code } public void fire() { // some code }

9) Используйте this в методах только при конфликте имен. Если конфликта нет, писать this избыточно

избыточно:

int getIndex() { return this.index; }

правильно:

int getIndex() { return index; } void setIndex(int index) { this.index = index; }

10) При именовании геттера для boolean-поля вместо get используйте is

правильно:

private boolean active; boolean isActive() { return active; } void setActive(boolean active) { this.active = active; }

11) После запятой, используемой для перечисления аргументов метода, требуется пробел

неправильно:

void addAttempt(int index,int number) void compareNumbers(int hiddenNum,int playerNum,String name)

правильно:

void addAttempt(int index, int number) void compareNumbers(int hiddenNum, int playerNum, String name)

2.6. Правила для классов

1) После package и import требуется пустая строка

неправильно:

package com.webapp.storage; import java.util.Scanner; public class ArrayStorage {

правильно:

package com.webapp.storage; import java.util.Scanner; public class ArrayStorage {

2) Имена классов должны начинаться с большой буквы

неправильно:

public class math { } public class random { } public class board { }

правильно:

public class Math { } public class Random { } public class Board { }

3) Если имя класса состоит из более, чем одного слова, то для именования используется CamelCase

неправильно:

class Guessnumbermain class calculatortest class arraystorage

правильно:

class GuessNumberMain class CalculatorTest class ArrayStorage

4) Имя класса должно начинаться с существительного и может состоять из одного или более слов. Оно также может начинаться с прилагательного, но за ним обязательно должно следовать существительное. При этом имя класса не должно содержать глагол

неправильно:

class Sit class SaveInteger class CalculateSum

правильно:

class SortedArrayStorage class CalculatorMain class VirtualThread class Resume

5) Между именем класса и { необходим пробел

неправильно:

public class Calculator{

правильно:

public class Calculator {

6) Между объявлением класса и объявлением полей требуется пустая строка

неправильно:

public class Resume {
private String uuid;
private String fullName;

...
}

правильно:

public class Resume {

private String uuid;
private String fullName;

...
}

7) Поля следует размещать только в начале класса (перед конструкторами)

неправильно:

public class Wolf { private String sex; public String getSex() { return sex; } private String name; public String getName() { return name; } }

правильно:

public class Wolf { private String sex; private String name; public String getSex() { return sex; } public String getName() { return name; } }

8) В одной строке объявляйте за раз только одну переменную

неправильно:

class Person { String uuid, name; double height, weight; }

правильно:

class Person { String uuid; String name; double height; double weight; }

9) Не используйте в именах полей и методов имя класса, в котором они размещаются, т. к. и так понятно, что все, что в нем находится, относится к данному классу

неправильно:

public class Player { private String playerName; public int getPlayerName() { return playerName; } }

правильно:

public class Player { private String name; public int getName() { return name; } }

10) Между блоком полей и конструктором необходима пустая строка

неправильно:

public class Resume { private String uuid; private String name; public Resume(String uuid) { this.uuid = uuid; } }

правильно:

public class Resume { private String uuid; private String name; public Resume(String uuid) { this.uuid = uuid; } }

11) Конструкторы следует размещать после блока с полями

неправильно:

class BankAccount { private String name; String getName() { return name; } public BankAccount(String name) { this.name = name; } }

правильно:

class BankAccount { private String name; public BankAccount(String name) { this.name = name; } String getName() { return name; } }

12) Между именем конструктора и ( пробел не ставится

неправильно:

Player (String name) Resume (String uuid) new Cat ()

правильно:

Player(String name) Resume(String uuid) new Cat()

13) Конструкторы следует размещать в порядке, зависящем от принимаемых ими числа аргументов: от меньшего к большему

неправильно:

class Player { Resume(String name, int number) {} Resume() {} Resume(String name) {} }

правильно:

class Player { Resume() {} Resume(String name) {} Resume(String name, int number) {} }

14) Перенесенные на новую строку аргументы конструктора необходимо смещать вправо на 8 пробелов относительно первой строки. При этом старайтесь, чтобы на каждой строке было примерно равное количество аргументов

неправильно:

public Jaeger(String modelName, String mark, String origin, float height, float weight, int strength) { this.modelName = modelName; this.mark = mark; ... } Jaeger jaeger = new Jaeger("Guardian Bravo", "Mark-6", "Japan", 73.21f, 2.18f, 35, 70);

правильно:

public Jaeger(String modelName, String mark, String origin, float height, float weight, int strength) { this.modelName = modelName; this.mark = mark; ... } Jaeger jaeger = new Jaeger("Guardian Bravo", "Mark-6", "Japan", 73.21f, 2.18f, 35, 70);

15) Группируйте геттеры и сеттеры по именам переменных, для которых они созданы. При этом не «приклеивайте» их друг к другу

неправильно:

public class Jaeger { private String mark; private String origin; public String getMark() { return mark; } public String getOrigin() { return origin; } public void setMark(String mark) { this.mark = mark; } public void setOrigin(String origin) { this.origin = origin; } }

правильно:

public class Jaeger { private String mark; private String origin; public String getMark() { return mark; } public void setMark(String mark) { this.mark = mark; } public String getOrigin() { return origin; } public void setOrigin(String origin) { this.origin = origin; } }

16) Размещайте геттеры и сеттеры в порядке следования полей, к которым они относятся

неправильно:

class Player { private String name; private int number; int getNumber() { return number; } void setNumber(int number) { this.number = number; } String getName() { return name; } void setName(String name) { this.name = name; } }

правильно:

class Player { private String name; private int number; String getName() { return name; } void setName(String name) { this.name = name; } int getNumber() { return number; } void setNumber(int number) { this.number = number; } }

17) Если геттеры (сеттеры) не используются, то в классе их можно не писать

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

неправильно:

private boolean makeMove() { inputNumber(); return compareNumbers(); } private void inputNumber() { // some code } public void start() { makeMove(); } private boolean compareNumbers() { return true; }

правильно:

public void start() { makeMove(); } private boolean makeMove() { inputNumber(); return compareNumbers(); } private void inputNumber() { // some code } private boolean compareNumbers() { return true; }

19) В начале и в конце класса не должно быть пустых строк

неправильно:

// лишняя пустая строка public class Player { private String name; public String getName() { return name; } // лишняя пустая строка } // лишняя пустая строка

правильно:

public class Player { private String name; public String getName() { return name; } }

20) Порядок объявления членов класса

class Name { константы статические поля final-поля поля конструкторы геттеры/сеттеры методы перегруженные методы вложенные классы }

2.7. Правила для массивов

1) При создании переменной для хранения ссылки на массив и самого массива, размещайте [] в Java-стиле, а не в Си или С++, а также не ставьте лишних пробелов

неправильно:

int numbers[] int [] numbers int numbers [] new int [10]

правильно:

int[] numbers = new int[10]

2) Не используйте множественное число в имени сеттера и передаваемого в него аргумента для работы с массивом (если метод за один раз принимает одно значение, а не массив целиком)

неправильно:

private int[] enteredNums; void setEnteredNums(int num) { enteredNums[index] = num; }

правильно:

private int[] enteredNums; void setEnteredNum(int num) { enteredNums[index] = num; } или void addNum(int num) { enteredNums[index] = num; }

3) Используйте this в методах для работы с массивами только при конфликте имен. Если конфликта нет, писать this избыточно

неправильно:

public void setNumber(int number) { this.numbers[index] = number; }

правильно:

public void setNumber(int number) { numbers[index] = number; }

Заключение

В данной статье была представлена очень важная информация для начинающих программистов, которую многие недооценивают. А зря, т. к. форматирование кода можно сравнить с правилами правописания в литературе: любой текст, каким бы гениальным он не был, без должного оформления будет выглядеть небрежно и плохо читаемым. Так же качество и читабельность кода во многом зависят от его оформления.

Автор: Чимаев Максим

Друзья, если вам понравилась статья, и вы изучаете Java, то приглашаем вас на курс для начинающих с нуля StartJava. Под руководством ментора Максима вы сможете с самых азов освоить язык Java. Курс очень насыщенный и постоянно развивается. Более сотни положительных отзывов.

Контакты:

2 комментария

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

1

Может, кто-то возьмется за это непростое дело).