Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, eao197, Вы писали:
E>>Еще раз: программисты ошибаются. ОШИБАЮТСЯ! S>Пока что вся эта дискуссия показывает недостатки плюсов как языка по сравнению с полноценным ФП.
Мне тоже яблоки больше груш нравятся.
S>Если я правильно понимаю, на ФЯ написать некорректную реализацию max_element практически нереально. S>Потому, что непустые последовательности там радикально отличаются от пустых. В итоге программист вынужден явно обработать все случаи:0, 1, и больше элементов.
Это и есть предусловия.
S>А все эти припрыгивания с лишним сравнением (которое предположительно снизит производительность для вырожденных случаев)
Производительность здесь вообще не является главным критерием(это скорее бонус).
Во-первых, каждую проверку необходимо поддерживать. Если сегодня есть 'a > 0', а завтра нужно сделать 'a > 1', то необходимо править _все_ вхождения.
Во-вторых, это банальная логика — прежде чем прыгнуть в басейн, я проверю уровень воды, а вы прыгните в любом случае, плюс необходимо будет добавить реакцию на исключение — "прыгнуть не получилось". Зачем ? А потом огрмное количство кода занимается обработкой таких вот фиктивных ошибок. А ведь этот код опять же, надо поддерживать.
Да, бывают такие места где проверить не получается(или это сложно) — там приходится прыгать.
eao197 пропагандирует defensive programming, где все(функции) друг другу не доверяют. Я, в принципе, применяю этот же подход, только более "крупномасштабно": функции разростаются до неких trusted regions, где данные могут существовать только если удовлетворяют некоторым условиям, а проверки происходят на их границах. Это снижает количество проверок, локализует места появления багов, делает логику более чистой, но за это необходимо платить некоторую цену — в данном случае соблюдение контрактов. Где-то помогает типизация, где-то тестирование. С++ не навязывает своих решений.
S>и надеждой на корректную обработку [b]неочевидных контрактов[b] — соревнования в эквилибристике.
Вот кому неочевидно, тому остается только надеятся.