Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.07.2015, 09:19
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Самые интересные или сложные ошибки. Железобетонный код.
Предлагаю писать в эту тему самые интересные ошибки, с которыми вам довелось столкнуться.
Самое важное в теме описать как вы допустили эту ошибку, а не её тип. Пишите подробности и т.д.

И начну пожалуй с себя.

Недавно, прочитал про программиста гугл, которого попросили описать свою ошибку, из-за которой компания потеряла много денег.

Я бы так и забыл об этом, если бы не скрипт, который я отлаживал уже месяц и который регулярно глючил. Ключевое слово - регулярно.

Логика скрипта для меня была очень сложная, скрипт работал с временными отрезками и приходилось думать в настоящем прошедшем и будущем одновременно со "сдвигами" в прошлое (когда подсчет идет до определенной даты в прошлом, а сдвиг считается от настоящего или будущего времени). Отладка тоже давалась нелегко, т.к. по всему скрипту нужно было проставить console.log(), прежде чем понять что и куда идет. Ну да суть не в console...

В течении месяца я перестраивал логику скрипта и в один момент понял, что всё работает и можно запускать и тут столкнулся с необъяснимым поведением скрипта, он глючил в неизвестном месте...

После десятков, а может и сотен раз просмотра кода, я наконец нашёл это треклятое место, где была ошибка. Она очень простая и заключалась в ошибке логики.

if (условие1 && условие2) {
//тут расчёт один
}
else {
//тут другой рассчет
}

//Исправить оказалось очень легко:

//выглядит не так красиво и компактно, как в первом варианте, но зато правильно
if (условие1) {
  if (условие2) {
    //тут расчёт один
  }
}
else {
  //тут другой рассчет
}


Честно говоря я от себя такого не ожидал, первое мгновение просто не верилось, что я наступил на эти грабли, первый раз за наверное десять лет.

Я думаю в простом коде я бы на такие грабли не наступил, но из-за того, что приходилось много информации держать в голове, такие простые грабли ударили меня особенно сильно

Пишем железобетонный код.

Для себя я вывел следующее, не бояться добавить некрасивую вложенность, главное безошибочность.

Пишите свои интересные ошибки и то, как вы их находили и какие выводы после этого делали

Последний раз редактировалось Gozar, 05.07.2015 в 09:24.
Ответить с цитированием
  #2 (permalink)  
Старый 05.07.2015, 09:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,120

Gozar,
может не очень иннтересная ошибка - но продержалась 5 лет пока Aetae незаметил
Сообщение от Aetae
рони, кстати твой вариант по ссылке создаёт массив массивов.)
ошибка была в том что вырезая с помщью splice один элемент неучёл что splice возвращает массив.
было
arr[i]=m.splice(n,1)

а нужно
arr[i]=m.splice(n,1)[0]

весь код функция формирования массива с уникальными данными с заданной длиной и диапазоном
Ответить с цитированием
  #3 (permalink)  
Старый 05.07.2015, 13:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Давно было, но как то напоролся на такую долгорешаемую ошибку.
Одновременная работа c localStorage на нескольких страницах сайта, вызывает необходимость в дополнительных ячейках флагов занятости/свободности и их тестировании ибо периодически возникали конфликты одновременного обращения, и если заполняется несколько ячеек, бывало что кусок из массива с одной страницы перемежался элементами массива с другой. Естественно для всех страниц использовался общий буфер, ( т.к. размер Storage ограничен ~ 5Mb)
/В данном случае массивы на разных страницах подгружались аяксом/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Это будет копия или реф объекта? (код внутри) kostyanet Events/DOM/Window 9 14.11.2014 18:32
javascript обфускатор или как правильно скрыть код syegorius Общие вопросы Javascript 1 19.09.2012 02:58
АААААААААА!!! Протестируйте пожалуйста код в разных браузерах. выявляем ошибки. prototype Элементы интерфейса 1 22.07.2011 07:47
Определить код ошибки. crot26rus jQuery 2 15.07.2011 15:32
Стоит ли пользоваться библиотеками или лучше писать свой код? lancer Общие вопросы Javascript 5 24.03.2008 19:31