Ol pessoal, nesse artigo vou apresentar a classe TStringBuilder que foi implementada a partir do Delphi 2009 e veio para melhorar a manipulao de strings. Na maioria das vezes a manipulao de strings tais como concatenao gera um certo nus tanto para o compilador como para memria, ento a partir do Delphi 2009 foi implementada a classe TStringBuilder que segundo consta na documentao veio para melhorar essa questo. No vou me preocupar muito com os detalhes sobre ganho de performance entre o mtodo de concatenao normal e usando a classe TStringBuilder, at porque existe muita discordncia dentro da comunidade Delphi sobre se existe vantagens e at que ponto vivel o uso dessa nova classe. O que realmente temos de interessante na questo do mtodo Append, que sobrecarregado para aceitar a insero de diversos tipos de dados, desde strings at pontos flutuantes, sem a necessidade de especificar um tipo de converso explicita. Na figura 1 segue a relao de tipos aceitveis pelo mtodo Append. Outra coisa interessante na questo da escrita e entendimento do cdigo que se torna mais legvel para compreenso, pois no mtodo normal de concatenao usamos vrios + dependendo da quantidade se torna um pouco cansativo at para manuteno do cdigo.
Vou exibir algumas comparaes 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 concatenaes de strings, listagem 1 usando o modo normal com o operador + e a listagem 2 usando um objeto do tipo TStringBuilder. Listagem 1: Exemplo de concatenao de strings usando o +.
1var 2
str: string;
3begin 4 5end;
str := str + 'DevMedia';
1 2
3 begin 4 5 6 7 8 9
end; try str := TStringBuilder.Create; str.Append('DevMedia'); finally FreeAndNil(str); end;
10
Observao: Notem que o cdigo foi escrito dentro de um bloco try..finally..end, como estamos instanciando um objeto somos responsveis por descarreg-lo aps a execuo do bloco de cdigo, sendo assim o bloco finally se encarrega desta tarefa. Abaixo vou mostrar como concatenar um ponto flutuante cadeia de strings usando mtodo normal listagem 3 e sem a necessidade de converso explicita usando a classe TStringBuilder listagem 4. Listagem 3: Exemplo de concatenao de um valor double no modo normal.
1var
2 3 4 5 6 7
ShowMessage(Str);
8 9
end;
1
var
2
Str: TStringBuilder;
3 4 5 6 7 8 9 10 11 12
13 14
end;
Observao: Note que no foi necessrio nenhuma converso do valor double para string, o prprio mtodo Append se encarrega da converso. A funo ToString faz a converso do contedo StringBuilder para strings. Mas a classe TStringBuilder possui outros mtodos interessantes de se analisar, entre eles vale a pena citar:
AppendFormat();
Mtodo muito semelhante ao Format j existente no Delphi.
AppendLine();
Inseri uma linha vazia no contedo do objeto.
Clear;
Limpa o contedo do objeto.
Replace();
Substitui substring no contedo do objeto.
ToString;
Converte o contedo 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 cdigo mais legvel, seus mtodos so muito semelhantes aos que j existem na VCL. Como citei no incio e pesquisei sobre o assunto, existe a idia de que, com o uso dessa classe pode haver um ganho de performance, mas existe muita divergncia sobre o assunto, ento ficamos com a praticidade do mtodo Append e com o fcil entendimento do cdigo.
http://www.devmedia.com.br/classe-tstringbuilder-delphi/24319