>>Можно, конечно, писать такой софт, который у любого юзера на любых данных будет надёжным как танк.Не можно, а нужно! Как по вашему, можно ли писать код для адронного коллайдера исходя из вашей логики (выше приведённого утверждения о не обязательности написания абсолютно безошибочного кода)?
>>А можно и дисциплинировать юзеров. Ввёл некорректные данные - ССЗБ, надо было думать что вводишь.
в программировании понятие "предположить" для меня лично не приемлемо, нельзя и не нужно предполагать, что данные не кривые, что руки у юзера нормальные, что сторонняя библиотечная функция работает безошибочно и всё такое (не говорю ещё про безопасность).
>>А если писать софт для аудитории из грамотных и внимательных юзеров, то многие проверки можно опустить. В общем, подходы бывают разные.
"Нормальных" нет, действовать нуно от противного, скептически ко всему относится. Говоря о подходе приведу не совсем удачный пример по этому поводу. Представьте себе такую картину - вызов библиотечных функция открыть, прочитать/записать, закрыть. Исходя из моей логики код будет выглядеть на подобии этого:
1) переменная1 = открыть(что-то)
2) проверить открыт ли "что-то"
3) записать/прочитать(переменная1, что-то)
4) проверить записалось/прочиталось "что-то"
5) закрыть(переменная1) "что-то" (от случая - ещё проверить открыто что-либо или нет)
исходя из вашей же логики будет так:
1) переменная1 = открыть(что-то)
2) записать/прочитать(переменная1, что-то)
3) закрыть(переменная1) "что-то"
а вот пример как избежать обоих вариантов:
1) записать/прочитать_туда-то_что-то(туда-то, что-то)
2) проверить результат
но как видно это банальный враппер на выше перечисленные отдельные функции, всё равно даже внутри этого враппера нам необходимо проверить все три условия (открытия, записи/чтения, закрытия) - что и требовалось доказать.