| 
    
            
         
         | 
    
    
  | 
Пока Истина Цикл | ☑ | ||
|---|---|---|---|---|
| 
    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) точнее "Возврат, если это Процедура"     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |