Задачу решила сама, с решением всё хорошо. Но оно отличается от решения JR тем, что сначала я сделала так же, как они, а потом прошла дальше и объединила все нужные варианты под одним if. Уж очень бросались в глаза одинаковые куски кода. Можно ли делать такой огромный if? Или это не красиво, не функционально, чем-то хуже? Надеюсь, придёт добрая фея Ksenia Volkova и расскажет всю правду )
Neonila Kravtcova
19 уровень
Можно ли делать такое громоздкое условие в if?
Решен
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Владислав
1 декабря 2021, 16:36
Обычно используется вложенность до 3 (включительно) условий if. Если же их больше, то это считается нерациональным решением и придётся найти другой путь!
0
SWK
2 декабря 2021, 18:03
Можно ссылочку на соответствующее постановление ВЦСПС?
0
Justinian Judge в Mega City One Master
2 декабря 2021, 20:58
на код ревью расскажут, если проект с налаженными процессами и команда с экспертизой
0
Ksenia Volkova Java Developer в DXC Master
29 ноября 2021, 08:16
Не видя код трудно сказать что-то конкретное.
Но общий принцип таков - код должен быть читабельным и понятным.
Представь, что ты сама откроешь этот свой код через несколько месяцев. Сможешь ли ты быстро понять, что происходит в твоем условном блоке? А другой человек сможет? Если нет, то вероятно, он перегружен.
Если есть одинаковые куски кода - возможно, их стоит вынести в отдельные методы.
+1
Neonila Kravtcova
29 ноября 2021, 10:36
Вот задача https://javarush.com/tasks/com.javarush.task.task09.task0930, где мы сортируем по возрастанию и убыванию ввёденые строки и "числа" (тоже строки).
Нужно было написать метод сортировки. Написала вот такой:
Метод isNumber(String s) определяет, является ли строка числом.
У JR решение такое (четыре if-а):
0
hidden #598481
29 ноября 2021, 16:09
Ну вот теперь посмотри и реши сама, устраивает тебя внешний вид или не устраивает, можешь ли ты прочитать свой код и сходу понять, что там происходит, или для понимания, придется при прочтении делать в голове паузы и раскладывать по воображаемым полочкам?
Если устраивает, можно оставить как есть и спокойно пойти решать дальше. Если возник вопрос, то вероятно, не устраивает и хочется сделать рефакторинг.
В идеале каждый метод должен делать одно действие, отраженное в его названии.
Метод сорт должен сортировать элементы. Если разбить сортировку на более мелкие действия - перебор элементов, сравнение и перемещение, то становится понятно, как произвести рефакторинг. Выносим каждое действие в отдельный метод:
С одной стороны код стал наоборот, длиннее, но во время рефакторинга мы преследуем не цель сокращения числа строк, а цель сокращения времени, которое тратится на понимание кода.
При прочтении метода sort, мы понимаем, что у нас попарно перебираются элементы, и если их нужно поменять местами (if should swap), мы их меняем местами (swap elements).
А дальше уже только при необходимости можно углубиться в чтение и начать разбираться, при каком же условии они меняются местами и каким образом. +1
hidden #598481
29 ноября 2021, 16:16
Конечно, выносить каждую строку кода в отдельный метод метод не следует, но рекомендуется соблюдать максимальную длину метода, не более 10-20-30-строк, одного экрана, где как принято. И не более одной логической операции в методе. Логической не в смысле boolean, а смысле того, какую функцию несет в себе этот код.
Кстати, idea содержит множество удобных инструментов для рефакторинга. К примеру, можно выделить завершенный кусок кода, например все твое условие в ифе, нажать Ctrl+Alt+M (Method), и она предложит извлечь тебе выделенный код в отдельный метод, сохраняя логику.
Аналогично можно объявлять переменные - Ctrl+Alt+V (Variable),
поля класса - Ctrl+Alt+F (Field),
параметры метода - Ctrl+Alt+P (Parameter),
или наоборот заменять переменные/методы/поля/параметры их непосредственным содержанием при помощи Ctrl+Alt+N (iNline). Это операция, обратная предыдущим четырем)
+2
Neonila Kravtcova
29 ноября 2021, 20:15
Спасибо большое за комментарий, я всё беру на карандаш ) Про Идею и выделение логики в отдельный метод через сочетание клавиш - очень ценная информация, спасибо!
0
Neonila Kravtcova
29 ноября 2021, 20:21
Я бы, наверное, и ходила этим путём, если бы не страшный валидатор ))
0
SWK
2 декабря 2021, 17:59
Их 4 if-а читабельнее одного вашего.
Хотя их 2 аналогичных куска для swap - безусловно, не фонтан.
+1