Самые интересные или сложные ошибки. Железобетонный код.
Предлагаю писать в эту тему самые интересные ошибки, с которыми вам довелось столкнуться.
Самое важное в теме описать как вы допустили эту ошибку, а не её тип. Пишите подробности и т.д. И начну пожалуй с себя. Недавно, прочитал про программиста гугл, которого попросили описать свою ошибку, из-за которой компания потеряла много денег. Я бы так и забыл об этом, если бы не скрипт, который я отлаживал уже месяц и который регулярно глючил. Ключевое слово - регулярно. Логика скрипта для меня была очень сложная, скрипт работал с временными отрезками и приходилось думать в настоящем прошедшем и будущем одновременно со "сдвигами" в прошлое (когда подсчет идет до определенной даты в прошлом, а сдвиг считается от настоящего или будущего времени). Отладка тоже давалась нелегко, т.к. по всему скрипту нужно было проставить console.log(), прежде чем понять что и куда идет. Ну да суть не в console... В течении месяца я перестраивал логику скрипта и в один момент понял, что всё работает и можно запускать и тут столкнулся с необъяснимым поведением скрипта, он глючил :D в неизвестном месте... После десятков, а может и сотен раз просмотра кода, я наконец нашёл это треклятое место, где была ошибка. Она очень простая и заключалась в ошибке логики. if (условие1 && условие2) { //тут расчёт один } else { //тут другой рассчет } //Исправить оказалось очень легко: //выглядит не так красиво и компактно, как в первом варианте, но зато правильно if (условие1) { if (условие2) { //тут расчёт один } } else { //тут другой рассчет } Честно говоря я от себя такого не ожидал, первое мгновение просто не верилось, что я наступил на эти грабли, первый раз за наверное десять лет. Я думаю в простом коде я бы на такие грабли не наступил, но из-за того, что приходилось много информации держать в голове, такие простые грабли ударили меня особенно сильно :) Пишем железобетонный код. Для себя я вывел следующее, не бояться добавить некрасивую вложенность, главное безошибочность. Пишите свои интересные ошибки и то, как вы их находили и какие выводы после этого делали :) |
Gozar,
может не очень иннтересная ошибка - но продержалась 5 лет пока Aetae незаметил Цитата:
было arr[i]=m.splice(n,1) а нужно arr[i]=m.splice(n,1)[0] весь код функция формирования массива с уникальными данными с заданной длиной и диапазоном |
Давно было, но как то напоролся на такую долгорешаемую ошибку.
Одновременная работа c localStorage на нескольких страницах сайта, вызывает необходимость в дополнительных ячейках флагов занятости/свободности и их тестировании ибо периодически возникали конфликты одновременного обращения, и если заполняется несколько ячеек, бывало что кусок из массива с одной страницы перемежался элементами массива с другой. Естественно для всех страниц использовался общий буфер, ( т.к. размер Storage ограничен ~ 5Mb) /В данном случае массивы на разных страницах подгружались аяксом/ |
Часовой пояс GMT +3, время: 06:30. |