Небольшой слом шаблона с индексом цикла
Посмотрите на этот код:
Как это ни странно, но он иногда выдавал ошибку:
Я этот код и так вертел и эдак. А причину ошибки найти не мог. Ведь вроде бы все логично, Последний не может превышать Всего. Откуда же нарушение индекса?
И все же я нашел причину ошибки, но это сломало мой шаблон.
Дело в том, что индекс нарушался не сверху, а снизу. Если Последний равен нулю, то мы получали отрицательный индекс в выражении Последний-1.
Поэтому я добавил в код защиту от нуля:
Вот такая элегантная ошибка.
Из кода видно, что от коллекции требуется наличие двух элементов, но никаких гарантий этому нет.
Собственно практически автоматически из этого следует, что алгоритм стоит ограничить условием «Всего>1».
Кстати это условие эквивалентно «Последний>0».
Задним числом мы все умны. А вот до меня не доперло сразу. Я почему-то думал только об ограничениях вверх