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