![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| le_chat |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
Доброго времени суток.
Есть два примера простого кода - примерная схема так сказать. Не могу определится какую лучше использовать... Первая мне больше нравится - если метод большой то у него будет только одна точка выхода - наверно его будет проще понять другим разработчикам. Но хотелось бы узнать мнение профессионалов.
вот второй
упс, точно немного ошибся Это сообщение отредактировал(а) le_chat - 8.8.2007, 18:57 |
||||
|
|||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: нет Всего: 134 |
Легче? Спорное утверждение. Хотя бы потому что первый метод скорее всего ошибочен, так как он всегда вернёт null. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Мне больше нравится второй вариант - он на самом деле более информативный и понятный. Чего тянуть кота за хвост, если уже надо что-то возвращать.
|
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
ИМХО вторая на много проще для прочтения, и с возвратом понятнее.
|
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Кроме того, зачастую в первом варианте после if'a с break'ом придётся делать проверку некоего флажка, надо ли выполнять оставшиеся действия метода. Это сильно загрязняет код. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
С точки зрения рефакторинга - оба варианта плохи - нельзя выделить тело цикла и сделать Extract Method.
Но второй вариант проще. |
|||
|
||||
| le_chat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
а можно немного по подробнее про рефакторинг. как должен выглядеть приемлемый вариант? |
|||
|
||||
| math64 |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Ну например так:
После рефакторинга:
Но это не эффективно - цикл всегда прогоняется до конца. Можно отказаться от foreach, но это тоже некрасиво:
|
||||||
|
|||||||
| mindflyer |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.10.2004 Где: Smolensk, Russia Репутация: 1 Всего: 4 |
Одна точка выхода - идея из парадигмы структурного программирования, и в случае типичных коротких методов классов в java не актуальна. Т.е. лучше сосредоточить свои усилия не на единственной точке выхода, а на коротких легко читаемых методах. Второй вариант из первого поста более понятный.
ИМХО, предложенный тобою код гораздо запутаннее. Какова цель рефакторинга в данном случае? |
||||
|
|||||
| le_chat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
я понял так что для рефакторинга хорошо, когда тело цикла можно вынести в отдельный метод.
при этом идеальный случай, когда цикл выполняется от начала и до конца. но ведь довольно часто выполнять цикл до конца не имеет смысла, тогда приходится делать некоторую проверку на его прерывание. с точки зрения возможного рефакторинга это плохо? если да, то какие могут быть варианты решения? |
|||
|
||||
| mindflyer |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 20.10.2004 Где: Smolensk, Russia Репутация: 1 Всего: 4 |
Если что-то не имеет смысла, то и не нужно это делать
Ты хочешь решить этот вопрос на абстрактном уровне? Нужно смотреть в каждом конкретном случае, решения могут отличаться. Рефакторинг не самоцель, а средство улучшения качества кода, _когда_это_необходимо_. Под качеством подразумевается в том числе и читабельность кода, и, в общем случае, если рефакторинг затрудняет чтение кода, нафик такой рефакторинг. В привёденном тобой примере второй вариант самодостаточен и не требует никакого рефакторинга. Хочешь более подробного обсуждения, приведи ещё примеры. А так это похоже на обсуждение сферического коня в вакууме |
||||
|
|||||
| le_chat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 26.10.2006 Репутация: нет Всего: нет |
ок, я понял. пока примеров нет. переодически возникают вопросы в процессе кодирования - это был как раз один из них все огромное спасибо за разъяснение |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |