Table of Contents

Строковые утилиты в EPCL: exStrings
Введение
Подключение
Использование
Множественное преобразование
Интерфейс
Заключение

Строковые утилиты в EPCL: exStrings


Введение

В этом документе я постараюсь пояснить сущность строковых утилит в EPCL

Подключение

Добавить exStrings в список
uses exStrings;

Использование

Основной фичей является функция asString
Она позволяет преобразовывать в текст: string:
ТИП
КОММЕНТАРИЙ
integer
преобразуется в текст
real
тоже
boolean
тоже
char
тоже
WideChar
тоже
string
тоже
pointer
что-то вроде "@450528": адрес в памяти в формате десятичного числа
PChar
содержимое преобразуется в string
TClass
asString(TComponent) = 'TComponent', т.е. берётся ClassName
TObject
Преобразуется в свой ClassName, если nil - в "Nil"
TComponent
Преобразуется в свой "ClassName + Name"; пример: asString(form1) = 'TForm1 Form1'
Exception
Преобразуется в свой "ClassType + e.message"

При этом использование функции всегда выглюдит одинаково
var
  s: string;
begin
  s:=asString(MYVAR);
end;

Множественное преобразование

Второй по порядку, но важнейшей по значимости является возможность преобразования сразу нескольких переменных
  // Общий вид
s:=asString( [v1, v2, v3, v4, ..., vn] );
 
  // Пример
s:=asString( ['form1 = ', form1, '; x = ', x, 
  '; ... ', v, TComponent, 1.3] );
При этом все аргументы преобразуются также, как и по отдельности и склеиваются

Интерфейс

Если класс наследует интерфейс IStringConvable, объявленный в модуле exStrings, то он может быть также преобразован в строку функцией asString, как и все вышеперечисленные типы. При этом будет использован его метод function getAsString: string;
пример:
  TMyTextable = class(TComponent, IStringConvable)
  public
    x, y: integer;
    function getAsString: string;
  end;
 
function TMyTextable.getAsString: string;
begin
  result:=AsString( ['(', x, ', ', y, ')'] );
end;  

После чего его можно преобразовывать как отдельно, так и вместе с другими переменными
s:=asString(myTextable);
s:=asString( ['My textable = ', myTextable ] );

Если же необходимо получить заголовок объекта "ClassName Name" вместо его строкового предстваления, то следует написать так:

s:=asString(myTextable, true);

Заключение

Использование exStrings в теории должно повысить эффективность программирования. Сравним

  // Старый вариант
s:='a = ' + IntToStr(a) + '; b = ' + FloatToStr(b)
  + '; c = ' + BolToStr(c, true);
 
  // Продвинутый вариант
s:=asString(['a = ', a, '; b = ', b, 'c = ', c]);

Также, если вы измените тип a с integer на real в данном примере, то в первом варианте придётся заменить IntToStr на FloatToStr. Во продвинутом варианте замена не нужна