Comments 13
В конце второй строки присваивания (в «Проект Qt, язык C++») действительно должно быть умножение?
(Как-то размерность не сходится.)
(Как-то размерность не сходится.)
static ShiftResult shift(....)
{
....
qreal l = (orig->x1 - orig->x2)*(orig->x1 - orig->x2) +
(orig->y1 - orig->y2)*(orig->y1 - orig->y1) * // <-- Здесь
(orig->x3 - orig->x4)*(orig->x3 - orig->x4) +
(orig->y3 - orig->y4)*(orig->y3 - orig->y4);
....
}
+2
Ошибка здесь:
if (CAN_FIFO0 == fifo_number){ .... }else if(CAN_FIFO0 == fifo_number){
А что насчёт этого?
val = (uint8_t)(CAN_RFIFO0(can_periph) & CAN_RFIFO_RFL0_MASK);
...
val = (uint8_t)(CAN_RFIFO1(can_periph) & CAN_RFIFO_RFL0_MASK);
Точно ли второй & должен быть с 0-й маской?
0
А вот тут, в исправлении:
разве не должно быть
Правильно:
const Numeric *const num2 = o1.as<Numeric>();
разве не должно быть
const Numeric *const num2 = o2.as<Numeric>();
?0
>>или если эти числа содержатся в именах переменных
Не стоит так драматизировать. Присвоение индексов переменным нормальный процесс. Главное понимать зачем и что делаешь. Выдумывание «уникальных» и «хороших» смысловых имён работает только если в классе 10 переменных и функций. После этого фантазия заканчивается. Потом пытаешь работать с рефакторингом. Потом забиваешь.
P.S.
У меня есть проект. Там несколько классов от 200 до 500 переменных. Имена придумывали постановщики, потому что идёт обмен данными с их системой. _01, _02, _15 норма. Бывает круче — ...name_01_name_01, ...name_01_name_02, ...name_02_name_01, и т.д. Со временем привыкаешь. А ведь их ещё нужно вытаскивать в web-клиента. Тут вообще дофига правил о «хорошем» коде не работают в принципе.
Ближайшая аналогия — самолёт. Почему вы можете сложить бумажный самолёт из бумаги и он полетит, а сложить такой же самолётик, но длиной 100 метров уже не получится?
Да, нужно стремиться к хорошему оформлению, наименованию и прочее, но задача не обязана подстраиваться под правила хорошего тона.
Не стоит так драматизировать. Присвоение индексов переменным нормальный процесс. Главное понимать зачем и что делаешь. Выдумывание «уникальных» и «хороших» смысловых имён работает только если в классе 10 переменных и функций. После этого фантазия заканчивается. Потом пытаешь работать с рефакторингом. Потом забиваешь.
P.S.
У меня есть проект. Там несколько классов от 200 до 500 переменных. Имена придумывали постановщики, потому что идёт обмен данными с их системой. _01, _02, _15 норма. Бывает круче — ...name_01_name_01, ...name_01_name_02, ...name_02_name_01, и т.д. Со временем привыкаешь. А ведь их ещё нужно вытаскивать в web-клиента. Тут вообще дофига правил о «хорошем» коде не работают в принципе.
Ближайшая аналогия — самолёт. Почему вы можете сложить бумажный самолёт из бумаги и он полетит, а сложить такой же самолётик, но длиной 100 метров уже не получится?
Да, нужно стремиться к хорошему оформлению, наименованию и прочее, но задача не обязана подстраиваться под правила хорошего тона.
0
Нет никакого драматизма. Это просто экскурсию в мир ошибок. Многие уверены, что у них то ошибки о-го-го какие и никакие инструменты, правила хорошего тона не помогут. Ан нет, множество ошибок именно вот такие. И подобные статьи возвращают с небес на землю :).
+2
>>множество ошибок именно вот такие
Совершенно согласен. Но тут как в каламбуре — если отладка является процессом исправления ошибок, то программирования — процессом их внесения.
Intellisence, например, может мешать. Раньше (когда его ещё не было) я свои переменные наизусть знал. А теперь… Обидно даже. Раньше выдумываешь имя переменной. Основательно, со смыслом, чтобы и выражение с этой переменной как стих читалось. А теперь… Пять минут назад придумал имя переменной. Чёрт! В каком классе? Как я её вообще назвал?! Как я назвал объект, в котором мне нужно было это новое свойство? Вот из таких перманентных самовопросов во время написания кодов и устаёшь чертовски. И… допускаешь ошибки. )))
Совершенно согласен. Но тут как в каламбуре — если отладка является процессом исправления ошибок, то программирования — процессом их внесения.
Intellisence, например, может мешать. Раньше (когда его ещё не было) я свои переменные наизусть знал. А теперь… Обидно даже. Раньше выдумываешь имя переменной. Основательно, со смыслом, чтобы и выражение с этой переменной как стих читалось. А теперь… Пять минут назад придумал имя переменной. Чёрт! В каком классе? Как я её вообще назвал?! Как я назвал объект, в котором мне нужно было это новое свойство? Вот из таких перманентных самовопросов во время написания кодов и устаёшь чертовски. И… допускаешь ошибки. )))
+1
Один из способов избежать ошибок с именами или индексами — вовсе их не использовать. Например, задача с сортировкой в Java реашается так:
List<ServiceInstance> getAllInstancesOrdered() {
List<ServiceInstance> list = new LinkedList<>(instances.values());
list.sort(Comparator.comparing(ServiceInstance::getWorkerIdentity));
return list;
}
Даже если критериев сравнения несколько, то так:
list.sort(Comparator.comparing(ServiceInstance::getWorkerIdentity)
.thenComparing(ServiceInstance::getSomeValue));
Вместо создания массивов/списков по индексу в нормальных языках должны быть конструкты для написания именно списка (listOf("aa", "bb", "cc)
).
+1
Проект OpenCV, язык C++
bool Jpeg2KDecoder::readHeader() { .... cmptlut[0] = .... cmptlut[1] = .... cmptlut[2] = .... if( cmptlut[0] < 0 || cmptlut[1] < 0 || cmptlut[0] < 0 ) result = false; .... }
Прям чувствуется, как выражение cmptlut[0] < 0 было дважды размножено копированием, но поправили ноль только в одном месте.
Фикс сделали 7 лет назад: https://github.com/opencv/opencv/commit/e87355463f27702f5c398b22b05021f8290e5329
0
Так и моя статья, описывающая эту ошибку, вышла 7 лет назад. Думаете с тех пор ошибки, допускаемые программистами, принципиально изменились? :)
+4
Хорошо когда IDE может подсвечивать одинаковые слова, при выделении одного из них, как это делается в Notepad++, не все IDE это могут делать, из-за этого приходится открывать один и тот же файл и VS2010 и Notepad++. Хотя новые студии тоже могут подсвечивать.
Короче, эти баги именно из-за этого происходят, что нет такой подсветки. Ну и лучше индексами не пользоваться, если можно использовать именованные члены структуры, x,y,z! Хотя и тут могут быть опечатки(у меня были).
Короче, эти баги именно из-за этого происходят, что нет такой подсветки. Ну и лучше индексами не пользоваться, если можно использовать именованные члены структуры, x,y,z! Хотя и тут могут быть опечатки(у меня были).
0
Очень полезная статья!
Избавляет от ощущения, что это только у меня подобные глупые ошибки бывают :)
Избавляет от ощущения, что это только у меня подобные глупые ошибки бывают :)
+2
Sign up to leave a comment.
Ноль, один, два, Фредди заберёт тебя