Skip to content

Пул реквест с код ревью#3

Open
vane-spb wants to merge 1 commit into
79165815727:mainfrom
vane-spb:patch-1
Open

Пул реквест с код ревью#3
vane-spb wants to merge 1 commit into
79165815727:mainfrom
vane-spb:patch-1

Conversation

@vane-spb

@vane-spb vane-spb commented Jan 20, 2023

Copy link
Copy Markdown

Для начала, по структуре кода есть некоторое замечание к порядку методов. Обычно принять вначале писать публичные методы, а после приватные. То есть метод main должен быть первым, затем остальные методы в том порядке, в котором они вызываются в main

потом, может быть объясните как более красиво в гитхабе оставлять комментарии к коду
@vane-spb vane-spb changed the title чтобы создать мерж реквест Пул реквест с код ревью Jan 20, 2023
@vane-spb

vane-spb commented Jan 20, 2023

Copy link
Copy Markdown
Author

 По использованию Scanner сразу замечание: он работает с потом ввода-вывода и его нужно закрывать. Ты вызываешь метод close()  в коде, но этот метод не будет вызван в случае, если произойдет исключение. Нужно писать close в try-finally блоке, но более удобный метод try-wiyh-resources. (Думаю, не проблема найти примеры как это сделать в интернете)

@vane-spb

Copy link
Copy Markdown
Author

По структуре метода main замечание, что он делает сразу несколько видов работ:

  •   принимает текст от пользователя
  • печатает результаты работы функций в консоль
  • хранит за очередность заданий
  • хранит некоторые данные (список для заданий 5 и 6)

Предлагаю улучшить структуру следующим образом:

  • оставить в main  только очередность заданий
  • выделить в отдельный метод получение данных от пользователей (как мне видится, он должен принимать на вход сообщение от пользователя, а на выходе возвращать строку или число, полученные от пользователя
  • ради тренировки разделим уровни абстракции: main - это логический слой, он работает только с другими функциями, написанными в рамках задания, он не должен вызывать функции java, например System.out.printf

@vane-spb

Copy link
Copy Markdown
Author

Ко всем функциям замечание: они должны возвращать какие-то данные, нужно подобрать подходящие возвращаемые типы. Функция должна делать ровно то, что у нее в названии, например, checkYear, как мне бы казалось, проверяет год. Из названия не понятно какая именно проверка происходит, также она ничего не возвращает и не понятно как узнать результат проверки. Очень плохо, что она печатает в консоль, обычно функции ничего не печатают в консоль, а используют логгеры, но поскольку это учебное задание, печать в консоль допустима. Нужно вернуть из данной функции результат проверки, потом какая-то другая функция должна его принять и передать на печать третьей функции. Также стоит описать функцию при помощи javadoc.

Данное замечание относится ко всем функциям и их все нужно переделать по аналогии.

@vane-spb

Copy link
Copy Markdown
Author

К функции checkOS дополнительно замечание к количеству if конструкций. Необходимо снизить их количество до одного if-else. Прочие проверки нужно вынести в отдельные методы. В данном случае я бы советовал формировать ответ постепенно: узнать андроид или айос, узнать легкая нужна версия или полная, далее сделать одно сообщение с ответом.
Намного удобнее читать код, когда точек вывода минимально и они находятся в конце функци (но у всего есть исключения)

1 similar comment
@vane-spb

Copy link
Copy Markdown
Author

К функции checkOS дополнительно замечание к количеству if конструкций. Необходимо снизить их количество до одного if-else. Прочие проверки нужно вынести в отдельные методы. В данном случае я бы советовал формировать ответ постепенно: узнать андроид или айос, узнать легкая нужна версия или полная, далее сделать одно сообщение с ответом.
Намного удобнее читать код, когда точек вывода минимально и они находятся в конце функци (но у всего есть исключения)

@vane-spb

Copy link
Copy Markdown
Author

Рекомендую в функции calcDeliveryTime вынести проверку корректности ввода данных в начало, в случае ошибки кидать исключение.
Если логика действительно такова, что время доставки может быть 1, 2 или 3, то можно переписать это в switch  конструкцию и возвращать константы. Но мне кажется, что нужна какая-то формула вычисления времени доставки. (Примечание: У меня в тз нет формулы)

@vane-spb

Copy link
Copy Markdown
Author

reverseArrayOrder как мне кажется не может работать корректно, потому что перезатирает данные в массиве. Также крайне не рекомендую модифицировать объект, принимаемый функцией. Лучше создать новый массив и сделать все манипулиции над ним

@vane-spb

vane-spb commented Jan 20, 2023

Copy link
Copy Markdown
Author

getAverage в java не принято создавать переменную, когда можно просто вернуть значение

заменить

double averageValue = sum / arr.length;
 return averageValue;

на

return sum / arr.length;

@vane-spb

Copy link
Copy Markdown
Author

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

Плохое сообщение об ошибке: Incorrect input!
Лучше:  Error whole calculation delivery time: got delivery distance %s, but delivery distance cannot be zero or negative

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

@vane-spb

Copy link
Copy Markdown
Author

Советую все строки и настаиваю все числа вынести в статические переменные, лучше - в enum, если уже умеете. Переменные должны называться так, чтобы было понятно что за базнес значение они содержат, например

есть проверка
if (clientOS == 1)

можно создать константу  public static final int IOS_CODE = 1
тогда проверка уже будет if (clientOS == IOS_CODE)

можно оформить в  enum

package pro.sky.java.course1.homework6;

public enum OperatingSystems {
    IOS(1), ANDRIOD(2);

    private final int code;

    OperatingSystems(int code) {
        this.code = code;
    }

    public int getCode() {
        return code;
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant