|
Зачем перед обходом коллекции для Каждого Из проверять Количество()>0 ? | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
31.08.22
✎
07:24
|
Если ИменаПредметовДляФункций.Количество() > 0 Тогда
Для Каждого ИмяПредмета Из ИменаПредметовДляФункций Цикл собственно |
|||
1
Конструктор1С
31.08.22
✎
07:25
|
Совершенно незачем
|
|||
2
Ненавижу 1С
гуру
31.08.22
✎
07:27
|
(0) тоже не понимаю
экономят на времени создания итератора? глупо кстати, метод Количество() каждый раз пересчитывает число элементов или там встроенный счетчик хранится? |
|||
3
Гипервизор
31.08.22
✎
07:39
|
(2) В каком смысле каждый раз? В условии же однократная проверка.
|
|||
4
Ненавижу 1С
гуру
31.08.22
✎
07:43
|
(3) каждый раз когда вызывается метод, не применительно к данному примеру, а в общем случае
|
|||
5
RomaH
naïve
31.08.22
✎
07:45
|
... я просто дальше не дочитал - там ИначеЕсли дальше
|
|||
6
Гипервизор
31.08.22
✎
07:50
|
(4) А, ну смотря где. Вот в цикле Для тоже однократно.
|
|||
7
TormozIT
гуру
31.08.22
✎
07:53
|
Создание итератора иногда может быть весомым, если код выполняется часто.
Сделал замер. ТаблицаЗначений = Метаданные.Справочники; КоличествоПроходов = 100000; ирОбщий.НачатьЗамерЛкс(КоличествоПроходов, "Замер1"); Для Счетчик = 1 По КоличествоПроходов Цикл Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл Прервать; КонецЦикла; КонецЦикла; ирОбщий.КончитьЗамерЛкс(); ирОбщий.НачатьЗамерЛкс(КоличествоПроходов, "Замер1"); Для Счетчик = 1 По КоличествоПроходов Цикл Если ТаблицаЗначений.Количество() = 0 Тогда КонецЕсли; КонецЦикла; ирОбщий.КончитьЗамерЛкс(); Окончание замера "Замер1" - Длительность = 0.43с, Среднее = 0.00000426с. Окончание замера "Замер1" - Длительность = 0.3с, Среднее = 0.000003с. |
|||
8
TormozIT
гуру
31.08.22
✎
07:58
|
(7) Хотя для пустых выборочно проверенных мной коллекций разницы все равно практически нет. Так что действительно толку от этой проверки не видно.
Возможно для каких то особых коллекций она и будет, но наверное этим можно пренебречь. |
|||
9
Ненавижу 1С
гуру
31.08.22
✎
08:10
|
(7)
ТаблицаЗначений = Новый ТаблицаЗначений; КоличествоПроходов = 1000000; Время = ТекущаяУниверсальнаяДатаВМиллисекундах(); Для Счетчик = 1 По КоличествоПроходов Цикл Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл КонецЦикла; КонецЦикла; Дельта = ТекущаяУниверсальнаяДатаВМиллисекундах()-Время; Сообщить(Дельта); Время = ТекущаяУниверсальнаяДатаВМиллисекундах(); Для Счетчик = 1 По КоличествоПроходов Цикл Если ТаблицаЗначений.Количество() > 0 Тогда КонецЕсли; КонецЦикла; Дельта = ТекущаяУниверсальнаяДатаВМиллисекундах()-Время; Сообщить(Дельта); разница незначительна и даже хуже во втором случае (на несколько процентов) |
|||
10
Ненавижу 1С
гуру
31.08.22
✎
08:11
|
+(9) не хуже, в пределах погрешности в ту или другую сторону скорее всего
|
|||
11
NorthWind
31.08.22
✎
08:11
|
(0) а дальше Иначе нет?
|
|||
12
NorthWind
31.08.22
✎
08:11
|
...конечно, есть. Сорри, не прочел все посты
|
|||
13
СеменовСемен
31.08.22
✎
08:11
|
Проверка нужна, если дополнительно нужно выполнить еще действия
|
|||
14
Timon1405
31.08.22
✎
09:32
|
(2) насколько я помню, какой-то внутренний счётчик там есть
ТЗ = Новый ТаблицаЗначений; ТЗ.Добавить(); ТЗ.Добавить(); ТЗ.Добавить(); Для Сч=1 по ТЗ.Количество() Цикл ТЗ.Добавить(); КонецЦикла; Сообщить(ТЗ.Количество()); |
|||
15
Serg_1960
31.08.22
✎
10:14
|
(0) Условие "Если" обязательно тогда, когда используется совместно с "Иначе" для обработки ситуации с "пустой" коллекцией.
|
|||
16
Kassern
31.08.22
✎
10:19
|
(0) Все от контекста и логики зависит. Например, нужно запустить несколько ресурсоемких процедур/функций, если выборка не пустая. Смысла их запускать для каждого элемента нет.
|
|||
17
Serg_1960
31.08.22
✎
10:21
|
PS: Тема напомнила вчерашнюю ветку - OFF. В выражении "Если" отсутствует ветка "Иначе". Нафига собственно? - если в "Если" и"ИначеЕсли" проверяются все возможные значения реквизита, то "Иначе" - для невозможного :)
|
|||
18
Святофор
31.08.22
✎
11:33
|
>Если" и"ИначеЕсли" проверяются все возможные значения реквизита, то "Иначе" - для невозможного :)
люди косплеят конструкцию switch () case ... break; case ... break; default ... break; |
|||
19
Ненавижу 1С
гуру
31.08.22
✎
11:46
|
(14) этот пример ничего не показывает, просто граничные условия вычисляются всегда ДО цикла в этом операторе 1С
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |