Fala Rubem!

2008/10/15 Rubem Nascimento da Rocha <[EMAIL PROTECTED]>:
>
> Sinceramente, não vejo hack nenhum. Em linguagem C, condições do tipo "if 
> (var> 0)"
> podem ser simplificadas com "if (var)". O Object Pascal me permite fazer isso 
> também,
> como ilustro no meu código. Portanto, pra mim, não é hack.

Hack é tudo que é feito sem o suporte da linguagem. No Object Pascal,
boolean e números não são compatíveis. O que o Object Pascal te
fornece é um meio de hac^H^H^H forçar esta compatibilidade.

C não tem nem boolean, nem elegância, nem diferença entre código limpo
e hackeado, então a comparação ficou meio forçada.

> E ainda acrescento que faço uso de intensivo de constantes por ser uma 
> prática que torna
> bem mais claro o código, algo bem melhor do que ficar usando magic numbers.

Hã... Boolean(Items.Count) não me parece mais claro do que
(Items.Count > 0), pelo contrário. A menos que você seja um
programador C ou Assembly.

No entanto não importa. O que coloquei é o que o prof. Wirth esperava
que fizéssemos, e não colocar a minha opinião, muito menos ir contra a
sua.

> Quanto ao uso de TStringList,... ora, se em Java eu posso usar coisa 
> parecida, pq não em
> Delphi? Se o Object Pascal possui artefatos para uso de orientação a objetos, 
> e classes
> utilitárias para auxiliar nosso trabalho, pq não fazer uso delas? "Ah, o 
> código é complexo e
> faz uso de heap!" Mas uma função dessas, muito provavelmente, não seria usada 
> em
> textos muito extensos, e o impacto na performance geral de um grande sistema 
> aplicativo
> seria o mínimo.

A pouca demanda para o uso de uma rotina jamais deve ser argumento
para escolher uma opção mais cara perante uma opção mais simples. É
justamente assim que nascem códigos mal feitos. Outros fatores como
manutenção futura também entram na conta, mas que simplesmente não se
aplica para uma rotina tão simples como essa.

> Alias será, pq faço uso dessas funções intensivamente no sistema que dou 
> manutenção
> atualmente, e não existe perda de performance com o seu uso.
>
> Agora, putz, se for pra escrever sempre código simpleco e estruturado, então 
> quem vêm
> do Delphi e tá acostumado a escrever só procedimentos e funções ou está 
> acostumado
> somente a colocar componentes e codificar razoavelmente eventos vai se lascar 
> feio ao
> tentar pegar códigos mais trabalhados em Java ou C#. Imagina pegar algo mais
> complicado como, por exemplo, validar uma texto em uma caixa de edição 
> (a.k.a. TEdit)
> usando expressões regulares (a.k.a. RegEx)!

Entendo aonde você quer chegar. Então agora basta, ou escolher um
exemplo a altura da complexidade da implementação, ou implementar a
rotina a altura da sua simplicidade. Mais bonito, menor e melhor são
três grandezas diferentes para trechos de código.

> Mas, como diria Voltaire, "posso não concordar com o que dizes, mas até o fim 
> defenderei
> o direito que o tens de dizê-lo."

Eu não esperava que fosses concordar comigo, no entanto devo confessar
que eu esperava argumentos melhores para as suas escolhas.

>
> Sds.

--
Joao Morais


>
> ________________________________
> To: delphi-br@yahoogrupos.com.br
> From: [EMAIL PROTECTED]
> Date: Wed, 15 Oct 2008 22:16:55 -0300
> Subject: Re: [delphi-br] [DICA] +Funções para strings
>
> 2008/10/15 Rubem Nascimento da Rocha <[EMAIL PROTECTED]>:
>>
>>
>> if not AllowEmpty then
>> for i := 0 to Count - 1 do
>> while (List[i] = EmptyStr) and Boolean(List.Count) do
>
> No seu lugar eu removeria o while e colocaria um for downto, além de
> tirar esse hack do código e ajudar o caboclo a escrever código limpo.
>
>> { Conta quantas palavras existem em uma string }
>> function CountWords(S: string): integer;
>> begin
>> with TStringList.Create do
>
> Por que não usar o for? TStrings além de usar o heap tem um código
> mais complexo para uma tarefa simples.
>
> --
> Joao Morais
>
>> try
>> Delimiter := ' ';
>> DelimitedText := S;
>> Result := Count;
>> finally
>> Free
>> end
>> end;
>>
>>
>> Sds.,
>>
>> Rubem Rocha
>> Manaus, AM

Responder a