145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|||||||||||
1 | |||||||||||
Как Насипов узнал, что в цикле максимальное значение счетчика цикла пересчитывается на каждой итерации?04.09.2013, 21:05. Показов 8442. Ответов 84
Метки нет (Все метки)
Курс ведет Гилев, но они вместе с Насиповым сейчас делают этот курс. Не суть.
В общем, процитирую близко к тексту.
Так вот, я смотрю в доку, и не вижу этого там. Так откуда он узнал-то? Методом тыка? Я помню, ошибался так с отбором из одного массива в другой на питоне. Дескать, если ты выдернул из массива, он же уменьшился - ай-яй-яй. А ты, дескать, сначала скопируй все нужное в другой массив, а потом примени метод - у тебя из двух массивов останется разница и т.п. Но я работаю с документацией 1С, привыкаю к ней и хочу видеть, где написано, что верхняя граница цикла двигается.
4
|
04.09.2013, 21:05 | |
Ответы с готовыми решениями:
84
Как вернуть значение i из метода после каждой итерации в цикле Как в цикле for (не выходя из цикла) перейти к следующей итерации? Как проверять, нажата ли клавиша Esc, в каждой итерации цикла, и если нажата, то прервать выполнение цикла? Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется |
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
04.09.2013, 21:31 | 2 |
Это видно на глаз. Просто нужно врубаться как работают циклы вообще.
Если в документации не написано, то, наверное, авторы документации посчитали, что это настолько очевидно, что не заслуживает внимания. Если не полностью понимать механизм циклов, этого не видно.
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 21:33 [ТС] | 3 |
Я не уверен, что я полностью его понимаю. Вот, например, для чего нужно двигать верхнюю границу значения итератора цикла?
Т.е. зачем такая возможность дана разработчику?
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
04.09.2013, 21:45 | 4 |
дел
0
|
20 / 20 / 0
Регистрация: 29.08.2013
Сообщений: 57
|
|||||||||||
04.09.2013, 21:48 | 5 | ||||||||||
Да и не двигается верхняя граница вроде. Проверить легко:
Если сделать по другому:
Но и тут тоже похоже ничего пересчитывается, просто при следующем сдвиге индекса система проверяет на наличие элемента в коллекции и если он есть исполняет тело цикла.
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 21:48 [ТС] | 6 |
Он не двигает верхнюю границу. Я просто говорю, что ее можно двигать. Т.е. я сталкивался в своей жизни с таким. И знаю, что выражение вычисляется на каждой итерации. Это просто пример.
Зачем это сделано - я не знаю.
0
|
daslex
|
04.09.2013, 21:58
#7
|
Не по теме: тоже дел
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 22:04 [ТС] | 8 |
Граница двигается прекрасно. Попробовал. И добавить элементы, и удалить.
Вы запутались в индексах.
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
04.09.2013, 22:14 | 9 |
Kubus, что за кривое удаление. Удалять надо с конца, а не сначала.
В любом случае в 1С удобный отладчик и если есть сомнения в чем-то, то отладчиком наглядно видно что происходит. Во встроенной справке, (может и в документации) часто встречаются неправильные тексты. Добавлено через 9 минут Дело не в том, что верхняя планка может меняться, а в том, что, Массив.Количество() - это метод. Этот метод проходит по всему массиву, чтобы учесть каждый его элемент. Будет массив в 100.000.000 элементов, то каждый раз раз на итерации будет вызываться этот метод, а при вызове метода будет притормаживать. Чтобы не выполнять этот метод на каждой итерации приведен пример взятия результата из метода, сохранение его в переменную и использование этой переменной, а не метода как конечного значения.
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 22:26 [ТС] | 10 |
Дело как раз в этом. Метод тут с боку припеку получился. Вопрос был - где документировано, что верхняя граница счетчика движется.
Может, этот смысл скрыт в слове Выражение? Ну, там, выражение 1, выражение 2.
0
|
20 / 20 / 0
Регистрация: 29.08.2013
Сообщений: 57
|
||||||
04.09.2013, 22:28 | 11 | |||||
В данном случае неважно с какого конца удаляем. Я о том что при каждой итерации максимальное значение цикла не пересчитывается. Ладно, не нравится с удалением, тогда так:
Переубедите...
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 22:30 [ТС] | 12 |
Я на двух компах сижу. На одном у меня 1С, а на другом - интернет. Не могу я вам кинуть код.
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
04.09.2013, 23:01 | 13 |
в примере ТС из вопроса граница не движется.
Добавлено через 4 минуты Исходный вопрос: не является тем вопросом, по которому пошло обсуждение.
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 23:04 [ТС] | 14 |
Граница может двигаться, что тут обсуждать.
Если ветка об этом, то я пас. Вопрос был в том - где документировано, что она движется.
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
04.09.2013, 23:05 | 15 |
Слова:
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 23:09 [ТС] | 16 |
Это понятно. Вы мне скажите, что означает слово "Выражение" в синтакс-помощнике для цикла.
Если Выражение означает - вычисляемое выражение, то это ответ на вопрос. Но я бы хотел прочитать это в документации.
0
|
20 / 20 / 0
Регистрация: 29.08.2013
Сообщений: 57
|
|
04.09.2013, 23:20 | 17 |
Сам по себе метод не вызывается, что тогда его вызывает на каждом шаге цикла, откуда такая уверенность? Я вот утверждаю (возможно ошибочно) что нет никакого вызова метода подсчета элементов, кроме как при первом определении верхней границы счетчика. Следовательно в конкретном примере Евгений Гилёв неправ и второй вариант цикла не оптимальней первого.
0
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
|
04.09.2013, 23:22 [ТС] | 18 |
Верь Гилеву.
0
|
20 / 20 / 0
Регистрация: 29.08.2013
Сообщений: 57
|
|
04.09.2013, 23:25 | 19 |
А как же быть с забросом камней в стоячее болото?
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
04.09.2013, 23:43 | 20 |
Для <Имяпеременной> = <Выражение 1> По <Выражение 2>
В цикле под выражением понимается не вычисляемое значение как таковое. По-русски это звучит так: "Выразить нечто как что-то". Выразить переменную Счетчик как 1 (Для Счетчик = 1) Выразить переменную как результат функции (По Счетчик=Массив.Количество()) Выразить переменную как переменную (По счетчик = счетчик2) Выразить переменную как какое-то определенное значение (По счетчик = 100); и т.п. Добавлено через 7 минут оттуда, что проверка идет на результат работы функции. Вы же результат никуда не сохраняете, откуда циклу его брать. Чтобы взять, надо снова выполнить функцию. А циклу в обязательном порядке нужно знать конечное значение. он и не вызывается. Вы его вызываете, причем на каждую итерацию цикла.
0
|
04.09.2013, 23:43 | |
04.09.2013, 23:43 | |
Помогаю со студенческими работами здесь
20
Как вывести значение функции на каждой итерации? Вывод значения на каждой итерации цикла AJAX вывод на каждой итерации цикла Поиск среднего арифметического на каждой итерации цикла Вывод результата при каждой итерации цикла Будет ли происходить обращение к БД на каждой итерации цикла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |