|   |   | 
| 
 | Пока Истина Цикл | ☑ | ||
|---|---|---|---|---|
| 0
    
        prtx 25.09.18✎ 17:39 | 
        Собственно вопрос в конструкции кот. указана в заголовке.
 Из ветки v8: О применении "Пока Истина Цикл", я понял что это можно использовать, в случаях когда у нас много всяких-разных условий и в зависимости от условия, мы выполняем какой-то код и "выскакиваем" из цикла. Это типа аналог меток, с тех времен когда их не было? И вот нашел кусок кода в одной конфе и вообще лыжи не едут, на кой фиг эта конструкция там используется. вот: Пока Истина Цикл Выводить = Ложь; ЭтоОбщий = Ложь; // тут мы занимаевся всякой фиговиной и в зависимости от условий присваиваем Выводить = Истина; Если Выводить Тогда ТабДокумент.Вывести(ОбластьМакета); Иначе Прервать; КонецЕсли; КонецЦикла; Просьба, описать конкретные чудодейственные свойства этой конструкции, если можно с примерами. Одним словом по делу, четко, понятно и с пояснениями. Для себя и будущих поколений! Спасибо. | |||
| 1
    
        PR 25.09.18✎ 17:41 | 
        Ты, главное,не останавливайся, даешь еще парочку туповеток!     | |||
| 2
    
        Лефмихалыч 25.09.18✎ 17:42 | 
        это - говнокод.
 еще вопросы? | |||
| 3
    
        Волшебник 25.09.18✎ 17:42 | 
        (0) Суперкомпьютер IBM прокручивает бесконечный цикл за 5 секунд.     | |||
| 4
    
        tesseract 25.09.18✎ 17:43 | 
        Что ты по одному ты выкладываешь?  
 Вот тут много примеров : https://www.govnokod.ru | |||
| 5
    
        prtx 25.09.18✎ 17:44 | 
        (1) я задаю вопросы в ответах на которые сомневаюсь, и на которые на просторох интернета не наше "путевых" статей.
 https://www.google.com.ua/search?newwindow=1&rlz=1C1CHZL_ruUA768UA768&ei=fTeqW63iGoLorgSCkazoCA&q=1с+Пока+Истина+Цикл&oq=1с+Пока+Истина+Цикл&gs_l=psy-ab.12..0i71k1l8.0.0.0.4654830.0.0.0.0.0.0.0.0..0.0....0...1..64.psy-ab..0.0.0....0.negXwsoG3PQ первые две ссылки и все... | |||
| 6
    
        FIXXXL 25.09.18✎ 17:44 | 
        // тут мы занимаевся всякой фиговиной и в зависимости от условий присваиваем Выводить = Истина;
 Иначе Прервать; | |||
| 7
    
        Лефмихалыч 25.09.18✎ 17:47 | 
        (3) дважды?     | |||
| 8
    
        igork1966 25.09.18✎ 18:10 | 
        (0) http://progmatem.ru/pascal/while-and-repeat.html
 Просто в некоторых языках есть больше вариантов циклов. Этой конструкцией имитируют цикл с постусловием (REPEAT-UNTIL) | |||
| 9
    
        igork1966 25.09.18✎ 18:13 | 
        (8) + есть опасность устроить бесконечный цикл.
 PS. Без внятной необходимости я бы постарался не использовать. | |||
| 10
    
        tesseract 25.09.18✎ 18:15 | 
        (8) В данном случае отличия while от repeat никакого.   
 Пока Выводить Цикл КонецЦикла; Сделает то-же самое. | |||
| 11
    
        igork1966 25.09.18✎ 18:19 | 
        (10) Мне лень анализировать зачем в (0) так извращаются....
 ;-) | |||
| 12
    
        igork1966 25.09.18✎ 18:20 | 
        (11) + уж я молчу что подобное можно сделать с помощью goto
 ;-)))) | |||
| 13
    
        lEvGl гуру 25.09.18✎ 18:41 | 
        (0) а что там непонятного     | |||
| 14
    
        APXi 25.09.18✎ 18:59 | 
        Отчет должен сформировать 1 или более раз.     | |||
| 15
    
        Остап Сулейманович 25.09.18✎ 19:00 | 
        (10) А если там таких "Выводить" штук 12?
 Тогда Ваше Пока Выводить Цикл превращается в Пока Выводить1 И Выводить2 И Выводить3 .<где-то там конец строки...>. Цикл А потом еще финт такого плана (что б соблюстить))) ): Если НЕ ВыводитьN Тогда Продолжить; // Типа в заголовке проверим а оно - не оно. И выйдем с цикла. КонецЕсли; А так все просто Пока Истина Цикл Если НЕ Выводить1 Тогда Прервать; КонецЕсли; .. Если НЕ Выводить2 Тогда Прервать; КонецЕсли; .. КонецЦикла; | |||
| 16
    
        Остап Сулейманович 25.09.18✎ 19:02 | 
        (14) Не отчет. А цикл. С отчетом - непонятно.     | |||
| 17
    
        exwill 25.09.18✎ 19:14 | 
        (0) А что тебе не нравится, собственно?
 Цикл, как цикл. | |||
| 18
    
        lEvGl гуру 25.09.18✎ 19:18 | 
        ну как бэ писать пока истина цикл - дурной тон, но и криминала тут невидно     | |||
| 19
    
        exwill 25.09.18✎ 19:21 | 
        (18) Что в этом дурного?     | |||
| 20
    
        sechs 25.09.18✎ 19:33 | 
        (18) https://github.com/id-Software/Quake/blob/master/QW/server/sys_win.c#L236
 А пацаны-то и не в курсе... | |||
| 21
    
        Сияющий в темноте 25.09.18✎ 22:37 | 
        Просто,в 1с поленились сделать инструкцию НачалоЦикла,очень бы хорошо заменила данную конструкцию.     | |||
| 22
    
        tesseract 25.09.18✎ 22:42 | 
        (15) Это декомпилятор вам сказал или воображение? 
 (21) А зачем вводить избыточную конструкцию? Какая разница, где идет проверка в начале или конце цикла? Выполнение лишнего безусловного перехода в польской виртмашине - фактически бесплатное. | |||
| 23
    
        Сияющий в темноте 25.09.18✎ 22:57 | 
        (22)не удивлюсь что интерпретатор выкидывает проверку условия,если там написано истина.
 а вот конечного While или Until не хватает явно. | |||
| 24
    
        tesseract 26.09.18✎ 00:26 | 
        (23) Интерпретатор выкидывает проверку просто. 
 >>а вот конечного While или Until не хватает явно. Это скука по паскалю или фортрану. | |||
| 25
    
        MSOliver 26.09.18✎ 05:12 | 
        "Пока Истина Цикл" - встречается в типовой УТ 11.4 - раз двадцать, так что к данной конструкции претензий быть не должно...     | |||
| 26
    
        dmitn 26.09.18✎ 05:26 | 
        Например,
 
Цикл будет бесконечно крутиться, пока переменная не примет конкретное значение. | |||
| 27
    
        Лефмихалыч 26.09.18✎ 09:19 | 
        (20) ты показываешь пример цикла, который реально обязан быть вечным, пока программа запущена. В топике вообще совсем другой случай.     | |||
| 28
    
        Rovan гуру 26.09.18✎ 09:25 | 
        (0) ОбластьМакета - каждый раз разная     | |||
| 29
    
        Лефмихалыч 26.09.18✎ 09:35 | 
        любые аргументы в пользу того, что вечный цикл - это нормально, сродни аргументам в пользу того, что носки можно и не стирать. Можно. Просто есть цена у этого.     | |||
| 30
    
        Пробел 26.09.18✎ 09:42 | 
        хороший цикл, мне нравится) Правда, немного более требовательный к программисту.     | |||
| 31
    
        Пробел 26.09.18✎ 09:45 | 
        (0) цикл крутится пока "Выводить" не примет значение "ложь". Удобно, когда у тебя проблемы с определением нужного количества итераций или тебе лень его определять.     | |||
| 32
    
        Малыш Джон 26.09.18✎ 09:49 | 
        (0) это говнокод.
 Если уж так хочется поизвращаться, то так нагляднее: Выводить = Истина; //... Пока Выводить Цикл // тут мы занимаемся всякой фиговиной и в зависимости от условий присваиваем Выводить = Ложь; Если Выводить Тогда ТабДокумент.Вывести(ОбластьМакета); КонецЕсли; КонецЦикла; | |||
| 33
    
        bolobol 26.09.18✎ 09:53 | 
        (20) Нажал перевод, по подсказке ЯБ, учитался!:
 "// запустить один кадр сразу за первое сердцебиение SV_Frame (0.1); // // основной цикл // Олдтаймер = Sys_DoubleTime () - 0.1; хотя (1) { // выберите на чистое гнездо и stdin // единственная причина, у нас есть тайм-аут на все..." | |||
| 34
    
        SweetaAngel 26.09.18✎ 10:02 | 
        (11) > Мне лень анализировать зачем в
 Допустим происходит чтение EXEL, с неизвестным количеством строк, до определенной строки. Со сложным условием. Например, или до строчки с Итог или если пять последних строк были с пустой суммой. Как сделать без Пока Истина Цикл или ВполнятьЦикл = Истиан; Пока ВполнятьЦикл Цикл ? | |||
| 35
    
        bolobol 26.09.18✎ 10:03 | 
        (34) Пока КолвоПустыхСтрок < 5 ?     | |||
| 36
    
        Кирпич 26.09.18✎ 10:05 | 
        (0) Всё нормально. Все циклы бесконечные и все прерываются по какому либо условию. Главное чтобы условие гарантированно сработало.     | |||
| 37
    
        bolobol 26.09.18✎ 10:11 | 
        (36) Зачем бесконечному циклу гарантированное срабатывание условия? Он же - безконечный! Выключил компьютер - цикл прекратился.     | |||
| 38
    
        Малыш Джон 26.09.18✎ 10:22 | 
        (37) ... перезагрузил сервер, отключил электричество, сбросил бомбу на электростанцию..     | |||
| 39
    
        Кирпич 26.09.18✎ 10:28 | 
        (37) "Выключил компьютер - цикл прекратился"
 Возможно, но лучше на всякий случай условие поставить. | |||
| 40
    
        Сияющий в темноте 26.09.18✎ 10:38 | 
        Иногда еще цикл используется для того,чтобы спятать goto.
 Например,если в процессе работы нужно выйти из куска кода,но тогда в конце цикла обязательно стоит break опять же,такой чудл цикл в 1с принято выносить в отдельную процедуру,где return вполне себе выполняет эти функции,но читаемость кода становится хуже. | |||
| 41
    
        bolobol 26.09.18✎ 10:39 | 
        (38) (39) Это вам к (3)     | |||
| 42
    
        bolobol 26.09.18✎ 10:42 | 
        (40) "ПолучитьОкончаниеБесконечногоЦикла();" - ну... нет, с читаемостью всё в порядке, проблема в пейсателе.     | |||
| 43
    
        bolobol 26.09.18✎ 10:44 | 
        Или как сейчас принято: "НачатьОжиданиеОкончанияБесконечноЦикла()", чтобы система не повисла - спецом, именно для этого, придумали асинхронные вызовы))     | |||
| 44
    
        SweetaAngel 26.09.18✎ 10:55 | 
        (35) Там есть еще вариант, что слово "Итого".     | |||
| 45
    
        Mr_Rm 26.09.18✎ 12:09 | 
        (23) > не удивлюсь что интерпретатор выкидывает проверку условия,если там написано истина.
 Нет, не выкидывает. Честно генерит // Пока Истина Цикл PushTrue LineNo # JZ ... | |||
| 46
    
        tesseract 26.09.18✎ 12:22 | 
        (40) >>такой чудл цикл в 1с принято выносить в отдельную процедуру
 Function on task - отличный шаблон проектирования, например когда делаешь рефакторинг, он позволяет избавляться от побочных влияний и оптимизировать количество переменных. (43) Ты не поверишь - все компы, контроллеры штор и прочие вибраторы работают на бесконечном цикле обработки прерываний :-) | |||
| 47
    
        bolobol 26.09.18✎ 12:24 | 
        (46) Вы меня с кем-то перепутали     | |||
| 48
    
        Cool_Profi 26.09.18✎ 12:25 | 
        (46) "Ты не поверишь -  все компы"
 Не поверю. Прерывания вызываются коллбеками, а не крутят цикл. | |||
| 49
    
        VIPetriv 26.09.18✎ 12:41 | 
        (26) В этом примере лучше вместо "Истина" поставить проверку на ноль: "ТекущийЭлемент_HTML <> неопределено".
 И вообще бесконечные циклы делать не стоит, лучше сделать "ДЛЯ н = 1 по 100000 ЦИКЛ" программу тупить меньше будет в критических ситуациях. | |||
| 50
    
        tesseract 26.09.18✎ 12:42 | 
        (47) Вроде нет - асинхронные вызовы в любом случае имеют встроенный цикл обработки сообщений. Всякий синтаксический сахар - всего лишь обертка.
 (48) у callback уже нет точки входа и возврата? И стэк им уже не нужен ? | |||
| 51
    
        Cool_Profi 26.09.18✎ 12:44 | 
        (50) Ну не циклами они же проверяются. А аппаратными (или вызовами ядра) прерываниями     | |||
| 52
    
        Eiffil123 26.09.18✎ 12:50 | 
        А что плохого. Я таким циклом часто из табдока инфу загружаю, когда заранее неизвестно количество строк.     | |||
| 53
    
        tesseract 26.09.18✎ 12:53 | 
        (51) А чем еще? Всегда есть цикл, который обрабатывает. 
 int main() { } | |||
| 54
    
        Cool_Profi 26.09.18✎ 12:55 | 
        (53) Неа. В программе есть обычный воркфлоу.
 При возникновении прерыывания - воркфлоу останавливается и управление передаётся обработчику этого прерывания. Такая же картина и в многозадачных системах, только там не аппаратное прерывание, а шедулер задач останавливает поток и вызывает зарегистрированный коллбек | |||
| 55
    
        tesseract 26.09.18✎ 13:00 | 
        (54) А что такое воркфлоу?  Куда в итоге все коллбэки попадают?     | |||
| 56
    
        Cool_Profi 26.09.18✎ 13:02 | 
        (55) Воркфлоу - это то, чем занимается программа для своих нужд.
 Что значит - куда попадают? Они регистрируются в отдельной таблице, и когда событие возникает - из этой таблицы выбирается обработчик | |||
| 57
    
        los_hooliganos 26.09.18✎ 13:24 | 
        Причем тут метки? Это обычная управляющая конструкция. Для упр конструкции "Пока Истина Цикл" есть Прервать и Продолжить и Возврат (если это функция).
 Минус этой конструкции в том, что сложно найти ошибки в большом/длинном цикле, поэтому она должна быть максимально простой. | |||
| 58
    
        los_hooliganos 26.09.18✎ 13:24 | 
        (57) точнее "Возврат, если это Процедура"     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |