ЗначениеЗаполнено() может быть опасным
Пример вполне логичного ошибочного применения популярной функции...
Значение какой-нибудь ссылочной переменной может быть не просто пустым, а по-разному пустым: пустой ссылкой, Неопределено и даже Null (если получилось из запроса с соединением без преобразования). Но есть удобная универсальная функция, которая очень помогает жить:
Результат = ЗначениеЗаполнено(Товар);
Тут ведь еще такой момент, этим кодом мы уходим от технической конкретики в сторону предметной области. Ну красота же.
Но что будет если эту функцию применять бездумно? Что будет если...
Результат = ЗначениеЗаполнено(Массив.Найти(Товар));
Ну то есть, хотим понять есть ли в массиве нужная номенклатурная позиция. В 99% все будет хорошо. Но вот если искомое в первом же элементе, то приплыли. Дело в том, что Найти() для массивов в случае успеха возвращает индекс, а не значение, а для первого элемента - это ноль, а значит, наша любимая функция ЗначениеЗаполнено() вернет Ложь. Вы представляете, к какой тяжелой труднообнаружимой ошибке приводит этот простой и вроде бы логичный код...
Здесь показательно сталкиваются два фундаментальных взгляда на ноль: с одной стороны это ничто, но с другой, в программировании нумерация данных зачем-то ведется с нуля. И тут мы подходим к важному выводу:
Все абстракции любых языков должны соответствовать реальному миру! Если у людей принято считать и нумеровать с единицы, то также должно быть и в программировании.
Понятно, что поезд давно ушел и это уже никак не изменить. Может в каком-нибудь светлом будущем появится язык в котором упор будет сделан не на скобки, отступы и странные парадигмы, а на привычную человеческую логику... А пока, в конкретном представленном примере надо делать так:
Результат = Массив.Найти(Товар) <> Неопределено;