Строковые утилиты в 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. Во продвинутом варианте замена не нужна