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

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

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

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

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

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

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

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

class Person {

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

class Person {

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

public class Player {
	
    private String playerName;

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

public class Player {
	
    private String name;

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

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

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

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

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

class Player {

    Resume(String name, int number) {}

    Resume() {}

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

class Player {

    Resume() {}

    Resume(String name) {}

    Resume(String name, int number) {}
}
11) В конце класса не должно быть пустых строк
неправильно:

public class Player {

    private String name;

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

public class Player {

    private String name;

    public String getName() {
        return name;
    }
}
12) Группируйте геттеры и сеттеры по именам переменных, для которых они созданы. При этом не «приклеивайте» их друг к другу
неправильно:

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

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

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;
}
16) Порядок объявления членов класса

class Name {
    константы
    статические поля
    final-поля
    поля
    конструкторы
    геттеры/сеттеры
    методы
    перегруженные методы
    вложенные классы
}
17) После package и import требуется пустая строка
неправильно:

package com.webapp.storage;
import java.util.Scanner;
public class ArrayStorage {
правильно:

package com.webapp.storage;

import java.util.Scanner;

public class ArrayStorage {

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 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;
}
Автор: Чимаев Максим
Оцените статью, если она вам понравилась!