НЕ ИСПОЛЬЗУЙТЕ.
Не используйте
- TInterfacedObject. Беда там со счётчиком ссылок. Есть Tl3ProtoObject. Re: Так писать нельзя - будут утечки ресурсов2. Re: MTDOrb.
- Динамические массивы. Почему нельзя пользоватся встроенными динамическими массивами Delphi. Есть l3AtomicList, l3PtrList, l3RefList.
- WideString. Потому же почему и динамические массивы. Только с ними всё ещё запущенней. Ибо это на самом деле объект Windows.
- Метод TObject.Free. Потому что остаются невалидные ссылки на уничтоженные объекты. Есть - FreeAndNil. Почему FreeAndNil, а не Free.
- При прочих равных, значения параметров по-умолчанию. Особенно в локальных процедурах. Без крайней нужды . Они крайне усложняют процесс чтения и понимания кода. Попилить TdeDocInfo.IsSame на три атомарных метода.
- TObjectList. НИКОГДА, кроме случаев совместимости со стандартными библиотеками. Есть Tl3ObjectRefList, Tl3CObjectRefList, Tl3CBaseRefInterfacedList, Tl3SimpleObjectRefList, l3UncomparabeObjectRefList,l3ObjectRefList и т.п. Re: Утечки памяти при работе программ БЧ.Достаточно положить один объект в два таких списка (TObjectList) и всё. Костей не соберёшь.
- Встроенные строки Delphi. Есть Tl3_String, Tl3WString, Il3CString, Tl3PrimString, Tl3ConstString.
- TStringList. Есть Tl3StringList.
- Временные задержки и таймеры я вообще не очень люблю, т.к. они недетерменированно ведут себя при отладке, поэтому стараюсь использовать по минимуму.
- Поведенческие флаги типа f_WasSomething - я тоже не особенно люблю, как и таймеры.
- Не злоупотребляйте ProcesMessages и "отложенной обработкой" через PostMessage. Они вредят друг другу. Причём - неожиданным образом. Re: МГО. Искажение в сообщении с предложением открыть документ в интернет-версии. Или - Re: List index out of bounds при печати текущей страницы из превью после выделения нескольких элементов списка.
- Якоря (Anchors). Они всё равно толком не работают. Особенно с большими шрифтами и Constraints. Используйте дихотомию и TvtPanel.
Старайтесь
- Старайтесь чтобы число параметров функций влезало в доступные регистры.
- Использовать общую библиотеку. И исповедуйте декларативный, а не императивный подход. Учимся пользоваться общей библиотекой.
- Настройки среды - W:\common\env\CommandFiles\.
- Разделять if с условиями OR и AND.
Пример:
Было:if ((aParts = nev_ripChildrenCnahged) or (aParts = [nev_ripHeight])) and (Obj.OverlapType = otUpper) then
Стало:if (Obj.OverlapType = otUpper) then if ((aParts = nev_ripChildrenCnahged) or (aParts = [nev_ripHeight])) then
- Если вы считаете, что какое-то условие в коде 100% не должно выполнятся - пишите Assert.
AtomicList описан тут - http://18delphi.blogspot.com/2013/07/blog-post_3683.html
ОтветитьУдалитьвсе ссылки через локалхост (((
ОтветитьУдалить