Вход | Регистрация
 

Почему в типовой сравнивают типы, а не значения?

Почему в типовой сравнивают типы, а не значения?
Я
   DrLekter
 
14.01.21 - 12:47
Вроде похожее обсужденгие встречал когда-то, но сейчас не найти.
Наткнулся в типовой на такой момент - проверку на наличие значения в массиве проводят по типу результата:

"Если ТипЗнч(МассивСтатусовСоздатьНаОсновании.Найти(Статус)) = Тип("Неопределено") Тогда"

Чем это лучше/правильней такого сравнения:

"Если МассивСтатусовСоздатьНаОсновании.Найти(Статус) = Неопределено Тогда" ?
   ДенисЧ
 
1 - 14.01.21 - 12:49
Букв больше, конфигурация становится больше, метрики улучшаются...
   Волшебник
 
2 - 14.01.21 - 12:52
правильнее сравнивать со значением "Неопределено"
   Bigbro
 
3 - 14.01.21 - 13:00
может механизм платформы так работает что получить тип значения можно считав грубо говоря одну ячейку памяти.
а для получения значения придется читать это значение целиком и неясно сколько оно будет занимать для массива - может и умереть в процессе чтения.
но это только предположение.
   Вафель
 
4 - 14.01.21 - 13:01
(3) в любом случае в (0) на 2 операции взятия типов больше
   RomanYS
 
5 - 14.01.21 - 13:05
(0) Скорее всего тупо скопипастили и заменили
Т.е. было что-то типа:

ТипЗнч(Статус) = Тип("ПеречислениеСсылка.Перечисление1")
...
ТипЗнч(Статус) = Тип("ПеречислениеСсылка.Перечисление2") 

по аналогии сделали для неопределенно. Выглядит не красиво и вряд ли несёт большой смысл
   polosov
 
6 - 14.01.21 - 13:22
(0) Возможно и вправду это работает быстрее, т.к. 1С оперирует типом variant, который представлен значением и типом. при сравнении значений всегда надо сравнивать и типы. А для Неопределено достаточно сравнить типы. Но вот выигрыш как-то сомнителен.
   acces969
 
7 - 14.01.21 - 13:41
(6) В спорте центами меряются)
Вопрос вдогонку - замечал в типовых использование "Вычислить()" там, где этого не требуется. Чем интересно обсуловлен такой подход?
   VladZ
 
8 - 14.01.21 - 13:43
(7) Скорей всего 1С для разработки типовых использует не конфигуратор, а что-то другое. Поэтому иногда и "выскакивают" подобные решения.
   Вафель
 
9 - 14.01.21 - 13:44
код все равно рукамит пишется
   Вафель
 
10 - 14.01.21 - 13:44
интересно есть статистический анализ у них?
по идее такое должно отлавливаться
   aka MIK
 
11 - 14.01.21 - 13:50
(0) в сравнении с достаточно тяжелой функцией поиска в массиве оптимизация ничтожна, даже если она и есть
   DrLekter
 
12 - 14.01.21 - 14:09
(2) "правильнее сравнивать со значением "Неопределено"" 
- я так всегда и делаю, но, смотрю, квалифицированные разрабы ERP со мной не согласные. Задумался...

По поводу оптимизации - выполняется не в цикле, однократно при открытии документа, массив состоит в лучшем случае из единиц элементов. Как говорится, "люди, которые пишут спс вместо спасибо - куда вы деваете такую прорву сэкономленного времени?" )))
   mikecool
 
13 - 14.01.21 - 14:16
(0) так понимаю, что сравнение только с типом Неопределено, с другими типами так не делают?
тогда надо на партнерке спросить - нафейхоа?
   DrLekter
 
14 - 14.01.21 - 14:18
Судя по коду, это проверка на наличие в массиве определенного значения.
   polosov
 
15 - 14.01.21 - 14:20
(13) В данном случае, если тебе нужно только подтверждение нахождения Статус в массиве, то можно просто сравнить с типом "Число"
   DrLekter
 
16 - 14.01.21 - 14:21
Я думаю, разницы сравнения с типом Неопределено и с типом Число особой нет. Я всегда сравниваю со значением Неопределено.
   polosov
 
17 - 14.01.21 - 14:24
(16) С числом по-идее должно быть сравнение медленнее, т.к. есть числа int и float.
В этих ваших богомерзких буржуйских языках для этого придумали всякие <int> для коллекций, чтобы сказать какой тип тебе нужен.
   Bigbro
 
18 - 15.01.21 - 06:37
(4) еще раз.
предположим у вас есть структура памяти.
в которой первым байтом обозначен тип данных, дальше длина, дальше собственно само значение.
в этом случае операция сравнения типов, без чтения самих значений будет быстрой.
адекватный разработчик платформы сделал бы так.
а вот вычитать 2 значения и сравнить их, при том что у вас потенциально огромный объем данных, под который придется выделить предварительно память ...

все правильно сделано в (0).
   DrLekter
 
19 - 15.01.21 - 10:02
(18) Поиск в массиве дает результат типа "Число" или "Неопределено". Не может там даже теоретически оказаться "огромный объём данных". Да и структуры данных уже получены и существуют. Да, вероятно, одной операцией будет меньше, если платформа действительно сначала сравнивает тип. Но какое будет выиграно время? Нано-, фемтосекунда? На фоне того, сколько времени впустую теряется в бесчисленных цепочках вызовов в БСП, например.
Я бы ещё понял, если бы это в каком-то цикле вызывалось.
И это ещё если предположить, что операция извлечения типа совсем ничего не стоит.
   GANR
 
20 - 15.01.21 - 10:27
(0) напиши в их поддержку и спроси

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.