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

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

3.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()

3
Имена методов пишутся с маленькой буквы
неправильно:

char GetLetter()
void ClearEnteredNumbers()
Player CreatePlayer()
правильно:

char getLetter()
void clearEnteredNumbers()
Player createPlayer()
4
Между именем метода и открывающейся круглой скобкой пробел не требуется
неправильно:

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!")
5
Размещайте { на той же строке, что и конструкция к которой она принадлежит
неправильно (так форматируют в C# и C++):

foo()
{
}
правильно:

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

public static void main(String[] args) {

    int number = 5;
}
правильно:

public static void main(String[] args) {
    int number = 5;
}
7
Отделяйте один метод от другого одной пустой строкой
неправильно:

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
}
8
Используйте this в методах только при конфликте имен. Если конфликта нет, писать this избыточно
избыточно:

int getIndex() {
    return this.index;
}
правильно:

int getIndex() {
    return index;
}

void setIndex(int index) {
    this.index = index;
}
9
При именовании геттера для boolean-поля вместо get используйте is
правильно:

private boolean active;

boolean isActive() {
    return active;
}

void setActive(boolean active) {
    this.active = active;
}
10
После запятой, используемой для перечисления аргументов метода, требуется пробел

void addAttempt(int index,int number)
void copy(Object src,int srcPos,Object dest,int destPos,int length)
правильно:

void addAttempt(int index, int number)
void copy(Object src, int srcPos, Object dest, int destPos, int length)

3.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
Имя класса должно быть существительным и может состоять из одного или более слов. Оно не должно содержать глагол
неправильно:

class Sit
class SaveInteger
class CalculateSum
правильно:

class SortedArrayStorage
class CalculatorMain
class Resume
3
Если имя класса состоит из более, чем одного слова, то для именования используется CamelCase
неправильно:

class Guessnumbermain
class calculatortest
class arraystorage
правильно:

class GuessNumberMain
class CalculatorTest
class ArrayStorage
4
Между именем класса и { необходим пробел
неправильно:

public class Calculator{
правильно:

public class Calculator {
5
Размещайте поля только в начале класса
неправильно:

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;
    }
}
6
В одной строке объявляйте за раз только одну переменную
неправильно:

class Person {

    String uuid, name;
    double height, weight;
}
правильно:

class Person {

    String uuid;
    String name;
    double height;
    double weight;
}
7
Не используйте в имени полей (методов) имя класса, т. к. и так понятно, что все, что в нем размещается, относится к данному классу
неправильно:

public class Player {
	
    private String playerName;

    public int getPlayerName() {
        return playerName;
    }
}
правильно:

public class Player {
	
    private String name;

    public int getName() {
        return name;
    }
}
8
Между блоком полей и конструктором необходима пустая строка
неправильно:

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;
    }
}
9
Размещайте конструкторы после всех полей
неправильно:

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;
    }
}
10
Между именем конструктора и ( пробел не требуется
неправильно:

Player (String name)
Resume (String uuid)
new Cat ()
правильно:

Player(String name)
Resume(String uuid)
new Cat()
11
Размещайте конструкторы в классе в порядке, зависящем от принимаемых ими числа аргументов: от меньшего к большему
неправильно:

class Player {

    Resume(String name, int number) {}

    Resume() {}

    Resume(String name) {}
}
правильно:

class Player {

    Resume() {}

    Resume(String name) {}

    Resume(String name, int number) {}
}
12
Перенесенные аргументы конструктора на новую строку необходимо смещать вправо на 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, 60);
правильно:

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, 60);
13
Группируйте геттеры и сеттеры по именам переменных, для которых они созданы. При этом не «приклеивайте» их друг к другу
неправильно:

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;
    }
}
14
Размещайте геттеры и сеттеры в порядке следования полей, к которым они относятся
неправильно:

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;
    }
}
15
Если геттеры (сеттеры) не используются, то в классе их можно не писать
16
Приватные методы размещайте в конце класса по мере их вызова из публичных методов. Располагать приватные методы среди публичных допускается только в случае, если они используются только в данном методе. В этом случае размещайте методы в классе тоже в порядке их вызовов. Код должен читаться сверху вниз, как текст в книге
неправильно:

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;
}
17
В конце класса не должно быть пустых строк
неправильно:

public class Player {

    private String name;

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

public class Player {

    private String name;

    public String getName() {
        return name;
    }
}
18
Порядок объявления членов класса

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

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

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

int numbers[]
int [] numbers
int numbers []
new int [10]
правильно:

int[] numbers = new int[10]
2
Не используйте множественное число в имени сеттера и передаваемого в него аргумента для работы с массивом (если метод за один раз принимает одно значение, а не массив целиком)
неправильно:

private int[] enteredNums;

void setEnteredNums(int nums) {
    enteredNums[index] = nums;
}
правильно:

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;
}

Заключение

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