Classe TStringBuilder - Delphi
Veja neste artigo onde vou apresentar a classe TStringBuilder que foi implementada a partir do Delphi 2009 e veio para “melhorar” a manipulação de strings.
Olá pessoal, nesse artigo vou apresentar a classe TStringBuilder que foi implementada a partir do Delphi 2009 e veio para “melhorar” a manipulação de strings. Na maioria das vezes a manipulação de strings tais como concatenação gera um certo ônus tanto para o compilador como para memória, então a partir do Delphi 2009 foi implementada a classe TStringBuilder que segundo consta na documentação veio para melhorar essa questão.
Não vou me preocupar muito com os detalhes sobre ganho de performance entre o método de concatenação normal e usando a classe TStringBuilder, até porque existe muita discordância dentro da comunidade Delphi sobre se existe vantagens e até que ponto é viável o uso dessa nova classe.
O que realmente temos de interessante é na questão do método Append, que é sobrecarregado para aceitar a inserção de diversos tipos de dados, desde strings até pontos flutuantes, sem a necessidade de especificar um tipo de conversão explicita. Na figura 1 segue a relação de tipos aceitáveis pelo método Append.
Outra coisa interessante é na questão da escrita e entendimento do código que se torna mais legível para compreensão, pois no método normal de concatenação usamos vários “+” dependendo da quantidade se torna um pouco cansativo até para manutenção do código.
Vou exibir algumas comparações do modo normal e usando a classe TStringBuilder, sempre lembrando que antes de utilizar essa classe temos que instanciá-la, pois iremos trabalhar com um objeto da classe TStringBuilder.
Abaixo segue 2 exemplos de concatenações de strings, listagem 1 usando o modo normal com o operador ‘+’ e a listagem 2 usando um objeto do tipo TStringBuilder.
var
str: string;
begin
str := str + 'DevMedia';
end;
var
str: TStringBuilder;
begin
try
str := TStringBuilder.Create;
str.Append('DevMedia');
finally
FreeAndNil(str);
end;
end;
Observação: Notem que o código foi escrito dentro de um bloco try..finally..end, como estamos instanciando um objeto somos responsáveis por descarregá-lo após a execução do bloco de código, sendo assim o bloco finally se encarrega desta tarefa.
Abaixo vou mostrar como concatenar um ponto flutuante à cadeia de strings usando método normal listagem 3 e sem a necessidade de conversão explicita usando a classe TStringBuilder listagem 4.
var
ValorDouble: Double;
Str : string;
begin
ValorDouble := 12.11;
Str := Str + FloatToStr(ValorDouble);
ShowMessage(Str);
end;
var
Str: TStringBuilder;
ValorDouble: Double;
begin
try
ValorDouble := 12.11;
Str := TStringBuilder.Create;
Str.Append(ValorDouble);
ShowMessage(Str.ToString);
finally
FreeAndNil(Str);
end;
end;
Observação: Note que não foi necessário nenhuma conversão do valor double para string, o próprio método Append se encarrega da conversão. A função ToString faz a conversão do conteúdo StringBuilder para strings.
Mas a classe TStringBuilder possui outros métodos interessantes de se analisar, entre eles vale a pena citar:
- AppendFormat();:Método muito semelhante ao Format já existente no Delphi.
- AppendLine();:Inseri uma linha vazia no conteúdo do objeto.
- Clear;:Limpa o conteúdo do objeto.
- Replace();:Substitui substring no conteúdo do objeto.
- ToString;:Converte o conteúdo StringBuilder para string.
Bom pessoal esse artigo na verdade foi um overview sobre a classe TStringBuilder, com ela podemos manipular strings facilmente e com a possibilidade de escrever um código mais legível, seus métodos são muito semelhantes aos que já existem na VCL. Como citei no início e pesquisei sobre o assunto, existe a idéia de que, com o uso dessa classe pode haver um ganho de performance, mas existe muita divergência sobre o assunto, então ficamos com a praticidade do método Append e com o fácil entendimento do código.
Espero que tenham apreciado, com isso finalizo mais um artigo e até a próxima.
Um Abraço.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo