Изящный рефакторинг перечесляемых типов.

добавлено: 25 ноя 13
понравилось:0
просмотров: 1117
комментов: 0

теги:

Автор: PeaK

Столкнулся с проблемой. Кода много, много перечисляемых типов, объявленных примерно так:
type
  TMyType = (mtOne, mtTwo, mtThree, mtFour, mtFive);

Это было удобно в старых версиях Дельфи, когда мы присваивали значения, без указания типа. Т.е.
var
  LVariable : TMyType;
...
begin
  LVariable := mtThree;

Времена поменялись, теперь указываем тип и в префиксах необходимость отпала.
  LVariable := TMyType.mtThree;

Как убрать префикс наиболее безболезненно? Разумеется, можно создать рядом новый тип, пометить старый как Deprecated, нагородить кучу методов и перелопатить много кода, поскольку нужна совместимость со старым кодом.
Есть решение проще - использовать хелперы.
type
  TMyType = (One, Two, Three, Four, Five);

  TMyTypeHelper = record helper for TMyType
  const
    mtOne = TMyType.One deprecated 'Use TMyType.One';
    mtTwo = TMyType.Two deprecated 'Use TMyType.Two';
    mtThree = TMyType.Three deprecated 'Use TMyType.Three';
    mtFour = TMyType.Four deprecated 'Use TMyType.Four';
    mtFive = TMyType.Five deprecated 'Use TMyType.Five';
  end;

И теперь работает как старый код, так и новый. Только на каждое использование старых префиксов выдаётся предупреждение
[dcc32 Warning] Unit41.pas(47): W1000 Symbol 'eThree' is deprecated: 'Use TMyType.Three'

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии