суббота, 29 июня 2013 г.

"Сокровенные" заповеди

НЕ ИСПОЛЬЗУЙТЕ.

Не используйте

  1. TInterfacedObject. Беда там со счётчиком ссылок. Есть Tl3ProtoObjectRe: Так писать нельзя - будут утечки ресурсов2Re: MTDOrb.
  2. Динамические массивы. Почему нельзя пользоватся встроенными динамическими массивами Delphi. Есть l3AtomicListl3PtrListl3RefList.
  3. WideString. Потому же почему и динамические массивы. Только с ними всё ещё запущенней. Ибо это на самом деле объект Windows.
  4. Метод TObject.Free. Потому что остаются невалидные ссылки на уничтоженные объекты. Есть - FreeAndNilПочему FreeAndNil, а не Free.
  5. При прочих равных, значения параметров по-умолчанию. Особенно в локальных процедурах.  Без крайней нужды . Они крайне усложняют процесс чтения и понимания кода.  Попилить TdeDocInfo.IsSame на три атомарных метода.
  6. TObjectList. НИКОГДА, кроме случаев совместимости со стандартными библиотеками. Есть Tl3ObjectRefListTl3CObjectRefListTl3CBaseRefInterfacedListTl3SimpleObjectRefListl3UncomparabeObjectRefList,l3ObjectRefList и т.п. Re: Утечки памяти при работе программ БЧ.
    Достаточно положить один объект в два таких списка (TObjectList) и всё. Костей не соберёшь.
  7. Встроенные строки Delphi. Есть Tl3_String, Tl3WString, Il3CStringTl3PrimStringTl3ConstString.
  8. TStringList. Есть Tl3StringList.
  9. Временные задержки и таймеры я вообще не очень люблю, т.к. они недетерменированно ведут себя при отладке, поэтому стараюсь использовать по минимуму.
  10. Поведенческие флаги типа f_WasSomething - я тоже не особенно люблю, как и таймеры.
  11. Не злоупотребляйте ProcesMessages и "отложенной обработкой" через PostMessage. Они вредят друг другу. Причём - неожиданным образом. Re: МГО. Искажение в сообщении с предложением открыть документ в интернет-версии. Или - Re: List index out of bounds при печати текущей страницы из превью после выделения нескольких элементов списка.
  12. Якоря (Anchors). Они всё равно толком не работают. Особенно с большими шрифтами и Constraints. Используйте дихотомию и TvtPanel.

Естественно надо понимать, что абсолютный запрет не возможен.

Старайтесь

  1. Старайтесь чтобы число параметров функций влезало в доступные регистры.
  2. Использовать общую библиотеку. И исповедуйте декларативный, а не императивный подход. Учимся пользоваться общей библиотекой.
  3.  Настройки среды - W:\common\env\CommandFiles\.
  4. Разделять 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
    
  5. Если вы считаете, что какое-то условие в коде 100% не должно выполнятся - пишите Assert.

2 комментария: