Показать сообщение отдельно
Старый 30.12.2014, 23:30   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Простейшие ошибки, отнявшие много времени

Расскажите про особые (см. далее) ошибки в коде, которые вы допускали. Ошибка должна отвечать двум качествам: она проста*, но трудноуловима**.

* - т.е. её возникновение не результат неоднозначного портирования, не следствие артефактов уровня аппаратного интерфейса, не результат ошибок в упрощении громоздких условий или вычислении констант, не итог запутывания в простыне кода, который в принципе невозможно удержать в голове. Ошибка вовсе не кажется таковой, т.к. в некотором смысле действительно описывает реализацию алгоритма, и, если тот не был, заранее продуман, то прочтённый ошибочный код увлекает, затуманив восприятие своей простотой.

** - в силу вышесказанного, ошибка раз за разом ускользает при чтении, отводя подозрения от своего простого окружения на более сложные конструкции.

Давно хотел создать этот тред, и поместить в нём старенький участок кода:
Dim DataTable$(0,0)
;...
Function GetMinInCol#(ID%)
	Local MinV#=DataTable(1,ID)
	Local i%
	For i=2 To DataTableRows
		If DataTable(i,ID)<MinV
			MinV=DataTable(i,ID)
		EndIf
	Next
	Return MinV
End Function
Код в своё время менялся там сям, пока не стал вот таким. Ошибок синтаксических нет - работает странно (не так, как ожидается, исходя из имени функции).
//старожилы помнят, что я как-то уже упоминал об этой ловушке

прим: команда dim от n выделит память под (n+1) элемент массива, и позволяет индексировать их как с нуля, так и с единицы (как будет принято в соглашении). Так что - ошибка не в индексах.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?

Последний раз редактировалось impersonalis, 31.12.2014 в 02:54.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (31.12.2014)