Небольшой слом шаблона с индексом цикла
Посмотрите на этот код:
![](https://geniy1s.ru/wp-content/uploads/2022/08/image.png)
Как это ни странно, но он иногда выдавал ошибку:
![](https://geniy1s.ru/wp-content/uploads/2022/08/image-1.png)
Я этот код и так вертел и эдак. А причину ошибки найти не мог. Ведь вроде бы все логично, Последний не может превышать Всего. Откуда же нарушение индекса?
И все же я нашел причину ошибки, но это сломало мой шаблон.
Дело в том, что индекс нарушался не сверху, а снизу. Если Последний равен нулю, то мы получали отрицательный индекс в выражении Последний-1.
Поэтому я добавил в код защиту от нуля:
![](https://geniy1s.ru/wp-content/uploads/2022/08/image-2.png)
Вот такая элегантная ошибка.
![](https://geniy1s.ru/wp-content/uploads/2022/08/cockroach3-1024x844.jpg)
Из кода видно, что от коллекции требуется наличие двух элементов, но никаких гарантий этому нет.
Собственно практически автоматически из этого следует, что алгоритм стоит ограничить условием «Всего>1».
Кстати это условие эквивалентно «Последний>0».
Задним числом мы все умны. А вот до меня не доперло сразу. Я почему-то думал только об ограничениях вверх