|   |   | 
| 
 | Зачем перед обходом коллекции для Каждого Из проверять Количество()>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С     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |