четверг, 12 декабря 2024 г.

[prog.flame] Иногда просто поражаешься трудолюбию программистов

Недавно довелось увидеть что-то вроде вот такого:

void data_holder::validate_data()
{
  std::cout << "*** Data validation: 1/15 (checking) ***" << std::endl;
  check();
  std::cout << "*** Data validation: 2/15 (sorting) ***" << std::endl;
  sorting();
  std::cout << "*** Data validation: 3/15 (deduplication) ***" << std::endl;
  deduplicate();
  std::cout << "*** Data validation: 4/15 (normalization) ***" << std::endl;
  normalize();
  ... // И так еще несколько строк пока не будет сделан шаг 15 из 15.
}

Вот честно, удивлен такому трудолюбию, т.к. меня бы быстро задолбало выписывать однотипные строки печати в std::cout с инкрементом значений в них. Особенно с учетом того, что количество этих шагов увеличивается по мере развития проекта :)

Так что я бы чуть ли не сразу написал бы что-то вроде:

void data_holder::validate_data()
{
  constexpr int total_steps = 15;
  auto inform = [step = int{1}](const char * name) mutable {
    std::cout << "*** Data validation: " << step << "/" << total_steps
      << " (" << name << ") ***" << std::endl;
    ++step;
  };

  inform("checking");
  check();
  inform("sorting");
  sorting();
  inform("deduplication");
  deduplicate();
  inform("normalization");
  normalize();
  ... // И так еще несколько строк пока не будет сделан шаг 15 из 15.
}

ИМХО, программист должен быть достаточно ленивым, чтобы не повторять однообразную рутинную работу. И еще он должен видеть повторяющиеся паттерны, которые можно преобразовать в повторно используемый код.

Ну и да, исходный пример заставляет вспомнить народную мудрость "простота хуже воровства".

Комментариев нет: