Opened 4 years ago

Closed 4 years ago

#1000 closed ожидается проверка (задача сдана)

WW #15

Reported by: Filippov Denis Owned by: Egor Suvorov
Component: WW_linq Version: 3.0
Keywords: Cc:

Description


Change History (6)

comment:1 Changed 4 years ago by Egor Suvorov

Resolution: задача сдана
Status: assignedclosed
Type: ожидается проверкаожидаются исправления

Корректность 4/7:

  • until работает в другую сторону: оно должно обрываться при выполненном условии. Но если исправить, то начинают падать сэмплы. В общем, что-то нечисто.
  • select использует moved-from функтор.

Стиль 1/3:

  • Не хватает слов explicit у конструктора и оператора.
  • Слишком много noexcept. Исключения могут кинуть как минимум: перевыделение вектора, любые операции с элементами, пользовательские функции...
  • У enumerator стоит запретить копирование и даже перемещение (потому что в C++17 появился copy elision).
  • until_eq/where_neq зря захватывают по значению,
  • std::back_insert_iterator --> back_inserter
  • Выносить parent в enumerator — плохая идея, как минимум в select_enumerator и range_enumerator он весит мёртвым неиспользуемым грузом. А в select_enumerator вообще можно опечататься. Если уж хотите вынести, сделайте промежуточный класс вроде enumerator_with_parent. А ещё не стоит делать using _parent в публичной секции, это деталь реализации всё-таки.
  • Раз класс enumerator полиморфный, стоит сделать виртуальный деструктор. Тут на корректность не влияет, но вообще стоит.
  • throwFirstElems() --> drop, по названию класса. Аналогично с setCurElem() — лучше такие штуки назвать единообразно.
  • take_enumerator — лучше не curElemNum/count, а один инт "сколько осталось"
  • _isPredicateFailed — это странная половина условия "жив ли итератор". Она имеет смысл только в сочетании с реализации setCurElem и operator bool(). Лучше обобщить и упростить инвариант класса: например, _isCompleted.
  • Много раз спрашиваете текущий элемент у родителя в until_enumerator.

comment:2 Changed 4 years ago by Filippov Denis

Resolution: задача сдана
Status: closedreopened

Договорились в телеграмме о дорешке. Дедлайн 3 июня в 22:59

comment:3 Changed 4 years ago by Filippov Denis

Status: reopenedassigned
Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:4 Changed 4 years ago by Egor Suvorov

Owner: changed from Egor Suvorov to Filippov Denis
Type: ожидается проверкаожидаются исправления

Корректность 7/7.

Стиль 1.25/3:

  • Не хватает rvalue-ref-qualifier у методов.
  • Методы в enumerator лучше сделать чисто виртуальными, а не выдавать какие-то бесполезные реализации по умолчанию.
  • !(_isCompleted |= !_parent) — не хочу это читать. Выглядит ужасно, плюс зачем-то мутирует _isCompleted лениво и из-за этого надо его делать mutable. Настолько лениво не надо. Лучше переписать until_enumerator с нуля, будет чище. Это основное ограничение на набирание баллов.
  • Кажется, что ещё пара методов может быть noexcept.
  • back_inserter не надо передавать руками тип, он сам выведет.
  • otherTypeParent — странное имя.
  • left --> remaining
  • until_enumerator::set() — неясное название. Аналогично в where_enumerator.

comment:5 Changed 4 years ago by Filippov Denis

Owner: changed from Filippov Denis to Egor Suvorov
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:6 Changed 4 years ago by Egor Suvorov

Resolution: задача сдана
Status: assignedclosed

Корректность 7/7.

Стиль 2.25/3:

  • defaultElem не используется
  • copy_to
    • *(it++) — скобки не нужны.
    • И вообще тут как-то несимметрично увеличиваются указатели
    • Должен быть &&
  • until/until_eq/where_neq тоже могут быть noexcept. where, скорее всего, тоже, если move-конструктор func не кидается.
  • range_enumerator хорошо бы мувать итераторы, а не копировать. Они, конечно, маленькие, но это обобщённый код — мало ли.
  • until_enumerator::findNext() — можно упростить, если убрать const auto &cur. Минус ссылка, минус иф.
Note: See TracTickets for help on using tickets.