Вниз  Совершенный код
- 3.07.2017 / 09:36
Ginosaji
  Пользователь

Ginosaji 
Сейчас: Offline
Портянки:
  1. Member myMember = EventUtils.getMember(model.getMembers(), myUserID);
  2. MemberStatus myStatus;
  3. if (myMember != null) {
  4.     myStatus = MemberStatus.from(myMember.getStatus());
  5. } else {
  6.     myStatus = MemberStatus.UNDEFINED;
  7. }
  8. if (useMyStatusInTask && myStatus == MemberStatus.TASK_DONE) {
  9.     date = myMember.getStatusChangeDate();
  10. } else {
  11.     date = model.getStatusChangeDate();
  12. }
Заменить на тернарный оператор:
  1. Member myMember = EventUtils.getMember(model.getMembers(), myUserID);
  2. MemberStatus myStatus = myMember == null ? MemberStatus.UNDEFINED : MemberStatus.from(myMember.getStatus());
  3. date = (useMyStatusInTask && myStatus == MemberStatus.TASK_DONE) ? myMember.getStatusChangeDate() : model.getStatusChangeDate();
И
  1. s/events.size() == 0/events.isEmpty()/

- 3.07.2017 / 10:28
Naik
  Пользователь

Naik 
Сейчас: Offline
Ginosaji, Тернарники в общем случае только ухудшают читабельность и не расширяемы емли нужно дописать парочку else if
- 3.07.2017 / 10:42
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Naik, кстати, согласен насчёт тернарников. С ними код растёт в ширину, а это куда хуже для чтения. Для коротких выражений ещё можно, но последнее составное условие для тернарника явно перебор.

Можно, конечно, форматировать.
  1. Member myMember = EventUtils.getMember(model.getMembers(), myUserID);
  2. MemberStatus myStatus = myMember == null
  3.         ? MemberStatus.UNDEFINED
  4.         : MemberStatus.from(myMember.getStatus());
  5. date = (useMyStatusInTask && myStatus == MemberStatus.TASK_DONE)
  6.         ? myMember.getStatusChangeDate()
  7.         : model.getStatusChangeDate();

__________________
 let live

Изменено aNNiMON (3.07 / 10:44) (всего 1 раз)
- 3.07.2017 / 10:51
Naik
  Пользователь

Naik 
Сейчас: Offline
aNNiMON,
строчки с 22 по 57 превратятся в date = getDate(context, i, model);А как же то, что там используются переменные labelFormatter, todayLocalDate, oldLocalDate, oldDateString?

Сейчас даты создаются один раз, а будут каждую итерацию, а обьект oldDateString и подобные обьекты которые зависят от других элементов списка и динамически меняются придется передавать тоже в getDate(...)

Изменено Naik (3.07 / 10:51) (всего 1 раз)
- 3.07.2017 / 11:00
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Naik, тогда вместо передачи i, oldDateString и oldLocalDate, можно передать результат вычисления выражения (i == 0 || (!todayLocalDate.equals(oldLocalDate) && !dateString.equals(oldDateString))), завёрнутый в Predicate :gg:
__________________
 let live
- 3.07.2017 / 11:18
Naik
  Пользователь

Naik 
Сейчас: Offline
Без InsertSectionType все получается намного проще, вот вставка дат в обьекты где просто нужно ориентироваться на какую-то дату
Открыть спойлер


Изменено Naik (3.07 / 11:22) (всего 1 раз)
- 3.07.2017 / 11:41
Ginosaji
  Пользователь

Ginosaji 
Сейчас: Offline
Naik, дело вкуса. Я пишу if else цепочки, только при сравнении разнородных вещей, а если можно, то либо тернарник форматированный, либо switch для однородных.

Ну и ещё на мой вкус, я не люблю слишком длинные if блоки, да ещё и с большой вложенностью, потому что прокрутив вниз, можно и забыть, что там вверху условия какие-то.
  1. for (int i = 0; i < src.size(); i++) {
  2.         model = src.get(i);
  3.         Date date = model.getSectionDate();
  4.         if (date != null) {
  5.             date = DateTimeUtils.fromUTC(date);
  6.             LocalDate localDate = new LocalDate(date);
  7.             String dateString = labelFormatter.format(context, model, date);
  8.             if (insertMonthSectors) {
  9.                 final int monthOfYear = localDate.getMonthOfYear();
  10.                 final int year = localDate.getYear();
  11.                 if (i != 0 && (monthOfYear != oldMonthOfYear || year != oldYear)) {
  12.                     models.add(new EventListMonthSectorHeader(-(year + 13 + monthOfYear), localDate, year != currentYear));
  13.                 }
  14.                 oldMonthOfYear = monthOfYear;
  15.                 oldYear = year;
  16.             }
  17.             if (i == 0 || (!localDate.equals(oldLocalDate) && !dateString.equals(oldDateString))) {
  18.                 models.add(new SimpleItem<>(dateString, -date.getTime()));
  19.             }
  20.             oldLocalDate = localDate;
  21.             oldDateString = dateString;
  22.         }
  23.         models.add(model);
  24. }

Я бы сделал:
  1. for (int i = 0; i < src.size(); i++) {
  2.         model = src.get(i);
  3.         Date date = model.getSectionDate();
  4.         if (date == null) {
  5.             models.add(model);
  6.             continue;
  7.         }
  8.         date = DateTimeUtils.fromUTC(date);
  9.         LocalDate localDate = new LocalDate(date);
  10.         String dateString = labelFormatter.format(context, model, date);
  11.         if (insertMonthSectors) {
  12.             final int monthOfYear = localDate.getMonthOfYear();
  13.             final int year = localDate.getYear();
  14.             if (i != 0 && (monthOfYear != oldMonthOfYear || year != oldYear)) {
  15.                 models.add(new EventListMonthSectorHeader(-(year + 13 + monthOfYear), localDate, year != currentYear));
  16.             }
  17.             oldMonthOfYear = monthOfYear;
  18.             oldYear = year;
  19.         }
  20.         if (i == 0 || (!localDate.equals(oldLocalDate) && !dateString.equals(oldDateString))) {
  21.             models.add(new SimpleItem<>(dateString, -date.getTime()));
  22.         }
  23.         oldLocalDate = localDate;
  24.         oldDateString = dateString;
  25.         models.add(model);
  26. }

- 24.07.2017 / 16:24
Death
  Пользователь

Death 
Сейчас: Offline
Скажите что не так в коде написано. ООП, или вообще логика. Что лишние, а что стоило бы добавить?

Пост #490975
__________________
 Смерть правит миром
- 24.07.2017 / 16:40
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
2.
Лихой синглтон
load()
Инициализаторы вне конструкторов
addStatic/addDynamic
Повторяющийся код - зло. Повторяющийся код - зло.
fin

__________________
 let live

Изменено aNNiMON (24.07 / 16:46) (всего 7 раз)
- 24.07.2017 / 16:59
Death
  Пользователь

Death 
Сейчас: Offline
aNNiMON, Спасибо. Я вот эту сетку объектов из книги взял. Книга по gamedev для андроид.
Прям с самого начала хотел сделать, что бы просто объект добовлять, а там внутри уже будет typeObject unum-перечесление, ну или хотя бы inte typeObject и статичные финальные DynamicObject и StaticObject.
Сама сетка - вот проблема.
А так из моего это только статичные переменные прямым доступом, как я понял.
__________________
 Смерть правит миром
Наверх  Всего сообщений: 233
Фильтровать сообщения
Поиск по теме
Файлы топика (7)