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