Мы постоянно слышим о качестве кода. Рекомендуется всегда следовать рекомендациям по кодированию при написании кода, чтобы его было легко расширять, читать или поддерживать.

Как говорится, мы пишем код не только для машины, но и для человека, поэтому читабельность — важный фактор.

Хорошее качество кода помогает нам сэкономить время, усилия и затраты, когда речь идет о расширяемости, ремонтопригодности и тестируемости. Поэтому здесь я пишу несколько советов, которые могут быть полезны.

Создавайте самодокументирующийся, описательный, читаемый код, используя правильное соглашение об именах —

Имя метода и переменной должно раскрывать намерения. Он должен указывать причину, по которой метод или переменная были определены или объявлены. Прочитав название метода, мы должны легко понять, что он делает. Так что здесь аргумент о намерении, а не о реализации. Я думаю, пройдясь по названию, мы должны понять намерение.
Пример -
У нас есть метод, объявленный для расчета процентов, тогда мы должны определить
public double calculateInterest(double PrincipleAmount , с плавающей запятой InterestInPercentage)

Разделение ответственности/единая ответственность —

Каждый метод должен выполнять только одну задачу и не должен превышать 30 строк кода. Если он будет, то мы должны разделить его на несколько методов.
Это сделает код более читабельным, понятным, чистым и понятным.

СУХОЙ — не повторяйтесь —

У нас никогда не должно быть дублированного кода. Всегда рекомендуется разделить всю логику на маленькие части и использовать или использовать их повторно.

KISS – будьте проще и глупее –

Логика должна быть проста для понимания, ведь коды написаны так, чтобы люди могли их понять. Мы должны постараться сделать его максимально читабельным.
Пример -
Сложная логика -

public boolean rangeCheck(int[] arr) {
if(arr.length › 10 || arr.length ‹ 0){
return false;
}else{
return true ;

}

Простая логика -
public boolean rangeCheck(int[] arr) {
return arr.length ›= 0 && arr.length ‹= 10 ;
}

Вам это не понадобится (ЯГИНИ) -

Удалите закомментированный, неиспользуемый или мертвый код.

Минимизировать количество аргументов в функциях –

Рекомендуется свести формальные аргументы к минимуму. Если будет больше 3, инкапсулируйте его в объект и передайте объект в качестве аргумента.

public Book searchBook(String bookName, String category, String author, DatePublishOn){}

Код рефакторинга -

общедоступная книга поиска книг(SearchCriteria searchCriteria){}

класс SearchCriteria {String bookName; Категория строки; Автор строки; Дата публикации;}

Код самотестирования —

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

  • Тестовое поведение, а не реализация
  • Мы должны писать тест только для той функциональности, которую собираемся написать, а не для внешней библиотеки или фреймворков.
  • Каждый тест должен быть написан для проверки одной концепции, должен быть независимым друг от друга и не зависеть от среды.

Запишите положительную логику в условный оператор -

Положительную логику легко читать и понимать, поэтому следует попытаться закодировать положительную логику (предпочесть if(условие) вместо if(!условие)) в условных операторах.

Пример -

если(!дверь.isNotClosed()){}

Предпочтительно-

если(дверь.isOpen()){}

Функция должна либо что-то делать, либо что-то отвечать. Функция не должна делать и то, и другое одновременно -

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

Пример -

общественный логический setSwitchOn () {

//логика изменения состояния

вернуть состояние переключателя;

}

Код рефакторинга -

общественный недействительным setSwitchOn () {

//логика изменения состояния

}

публичное логическое значение isOn(){}

общественное логическое значение isOff () {}

Предпочтительнее возвращать исключение, а не коды ошибок –

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

Избегайте передачи логического значения в функцию –

Если вы передаете логическое значение, это означает, что мы будем использовать некоторое предложение if else, что означает, что две логики для покрытия в функции нарушают правило, согласно которому метод должен выполнять только одно действие за раз. Поэтому вместо того, чтобы передавать логическое значение в качестве формального аргумента, мы должны сломать функцию.

Пример -

public void setSwitch (логическое значение) {

if(on){

//логика включения переключателя

}еще{

//логика выключения

}

}

Здесь мы выполняем две операции, что является нарушением правила единой ответственности.

Код рефакторинга -

void setSwitchOn(){// логика включения включения};

void setSwitchOff(){// логика выключения};

Локальные переменные должны быть объявлены рядом с их использованием -

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

Избегайте выходных аргументов –

Избегайте использования методов, которым были переданы объекты в качестве аргумента, а логика обновляет состояние объекта. Это делает методы тесно связанными с другими методами через общий объект, а также затрудняет чтение, поддержку и отладку.

Метод всегда должен изменять состояние объекта, принадлежащего методу.

Пример -

public void appendFooter (StringBuffer reportContent) {

reportContent.append («нижний колонтитул»);

}

Код рефакторинга -

public void appendFooter (StringBuffer reportContent) {

вернуть новый StringBuffer(reportContent).append("нижний колонтитул");

};

Никогда не возвращать значение null –

Исключения нулевого указателя - убийца. Всегда рекомендуется, чтобы функция никогда не возвращала null, она должна обрабатываться исключениями или нулевыми объектами.

Пример -

public Book searchBook(String bookName){

//логика для получения искомой книги и возвращаемого значения

вернуть ноль;

}

Код рефакторинга -

  • Мы можем использовать option для обработки нулевых объектов
    public Optional‹Book› searchBook(String bookName){
    //логика для получения искомой книги и возврата значения
    return Optional.empty(); }
  • Мы можем использовать исключения для обработки нулевых условий.
  • Мы также можем создавать нулевые объекты
    class NullBook extends Book{};

Избегайте глубокой вложенности.

Слишком большое количество вложений может затруднить чтение и отслеживание кода.

Пример -

если(isSrcFileOpen()){

если(isTargetFileOpen()){

если(естьСледующаяСтрокаДоступна()){

}

}

если(isSrcFileOpen() && isTargetFileOpen()){

если(isNextLineAvailable())){

}

}

Вместо жестко заданных значений используйте константы или перечисления (типизированная константа) -

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

Инструменты статического анализа кода —

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