@SergeySerge11

Как избежать преждевременной оптимизации? Или как не зная что будет потом в проекте, обрабатывать исключения?

void fun()
        {
            int a = div(4,6); // внешний код, не будет знать как-там что проиошло, но может когда-то знахочет знать
        }
        int div(int x,int y)
        {
            try
            {
                return x / y;
            }catch(Exception ex)
            {
                return 0; // вот тут потеря информации. К примеру сейчас мне всю-равно.
                //А вдруг потом при обновлении, мне понадобится
                // извлечь  сообщение, и сохранить значения Х,У допустим.
            
        }

Не раз сталкиваюсь с такой проблемой(мягко говоря). Не где вроде не описана.
Допустим вы делаете приложение, на стадии разработки, может так получится такая ситуация, что начнётся преждевременная оптимизация, или как сказать, начнешь тратить время на мелочи.
К примеру, допусти такой простой пример, есть Массив данных, с Путем и Временем присуждения N людей. Нужно допустим найти скорости всех. Потом выбрать самых быстрых.
Теперь. Такая ситуация, DataSet может быть не точным, и где-то время будет стоять 0. Окей Обработаем исключение и пропустим их просто и забудем!
И вот тут самое интересное, А что если в будущем мне потребуется вывести число людей в этом массиве с временем 0. Допустим, к примеру сделать кнопку, показать число спортсменов с 0-временем. Что делать изменять код, а что если этот код находится в другой библиотеке dll, менять ее?
Если я начну сразу обрабатывать и находить все такие ситуации, то я могу уйти от главной задачи( теряя время).
Пример самый простой, но иногда бывает и сложнее. и не понятнее, особенно при увеличении задач для готового проекта.
Есть ли какие-то советы, Баланса и оптимальности.
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 3
freeExec
@freeExec
Участник OpenStreetMap
Если ты не можешь поменять код потом, ну не знаю, отлил в камне и запустил на луну и не хочется посрамиться перед внуками, то делай всё сразу и на века. У остальных людей нет проблем выпустить версию 1.1
Ответ написан
Комментировать
@Akela_wolf
Extreme Programmer
Для вашей ситуации придумали интерфейсы.

Вот смотрите, есть логика вывода (Котлин, надеюсь понятно что этот код делает):
interface Report {
  fun getAverageTime(): BigDecimal
}

fun printReport(report: Report) {
  println("Average time: ${report.getAverageTime()}") 
}

Мы получаем данные из отчета. И нас в этом месте мало волнует как именно эти данные рассчитаны и как обрабатывается 0. Это логика отчета. Мало того, у нас может быть несколько разных реализаций интерфейса Report, каждая из которых обрабатывает этот случай каким-то собственным образом, вплоть до того что кидает исключение и, в результате, возникает ошибка (обработка такого исключения за рамками этого примера).

Теперь у нас возникает необходимость добавить еще один параметр в отчет:
interface Report {
  fun getAverageTime(): BigDecimal
  fun getCountWithZeroTime(): Int
}

fun printReport(report: Report) {
  println("Average time: ${report.getAverageTime()}") 
  println("Participants have zero-time: ${report.getCountWithZeroTime()}")
}


И никакой преждевременной оптимизации, только структурированный код.
Ответ написан
Комментировать
402d
@402d
начинал с бейсика на УКНЦ в 1988
если мне кажется, что информация при отладке об игнорирование пригодиться
я пишу в кетче вывод в консоль отладки.
Если на 100 процентов уверен, что она не поможет потом при анализе, то
try{
// действия
return честный результат
}catch(Exception ignored){}
return значение по умолчанию
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы