[color=blue]Não tinha como não publicar isso aqui, para iniciar um debate, acho que agora ficou bem claro , cada tecnologia vai ter seu responsabilidade, mas a evolução é inevitável. [/color]
:arrow:Fonte Groovy ou Ruby
Groovy ou Ruby? Um breve relato.
Publicado por: Felipe Rodrigues de Almeida
em: 03 Out 2008 às 18:58
Como já é de conhecimento publico, a InfoQ Brasil será lançada no dia 20 de Outubro de 2008 incluindo vários artigos e notícias traduzidos para o protuguês, além do livro Scrum e XP direto das trincheiras também traduzido.
Todos que conhecem o portal InfoQ sabem da qualidade de seu conteúdo e pretendemos manter a mesma qualidade na versão brasileira do portal. Para começar bem, iremos cobrir e publicar as apresentações do Rails Summit 2008 ao longo do próximo ano. Esse evento promete ser um marco na história do Ruby e Rails no Brasil e como tal estarei lá pra conferir. =)
Você devem estar se perguntando o que isso tem a ver com o título do post. =)
Eu explico. Eu pedi pro Floyd Marinescu (co-fundador da InfoQ) uma idéia de quantos posts são publicados por mês na InfoQ original. Ele me respondeu o email dizendo que o máximo que ele podia fazer era conseguir um arquivo CSV com o seguinte conteúdo:
Publications.csv
TYPE;DATE;COMMUNITIES
Interview;15/06/2008;Java
Article;28/03/2008;Architecture
Article;23/05/2008;SOA
News;12/06/2008;.NET
News;12/06/2008;.NET
News;10/06/2008;Java
... continua ... [/code]
Obviamente isso não resolvia meu problema. Nesse arquivo temos o tipo de publicação (Interview, Article, News ou Presentation), tem a data em que foi publicado e a comunidade em que foi publicado o artigo. O que eu pensei? Vou escrever um parser para esse arquivo e assim obter os dados que preciso.
O objetivo era conseguir um resultado como esse:
ANO
A quantidade de materias desse ano foi: <>
A media de materias por mes nesse ano foi: <>
ANO
A quantidade de materias desse ano foi: <>
A media de materias por mes nesse ano foi: <>
O Total de itens é <>
Decidi que faria esse parser em ruby, abri meu e-editor e comecei a digitar o programa. 15 minutos depois percebi que eu estava indo pelo caminho errado e que não conseguiria o reslutado esperado daquela forma. Meus anos de Java me acostumaram errado. Eu comecei a pensar que deveria haver algum modo mais fácil de fazer aquilo. Decidi então escrever em Groovy, linguagem que possuo mais domínio do que Ruby. Em Groovy não tive dificuldades e construi esse código:
[code]publications.groovy
List items = []
new File('publications.csv').splitEachLine(';') { line ->
items.add(line)
}
def range = 2005..2008
range.each { year ->
println year
numItems = items.findAll{it[1] =~ /${year}$/}.size
println "A quantidade de materias desse ano foi: ${numItems}"
def average = (numItems/12) as BigInteger
println "A media de materias por mes nesse ano foi: ${average}"
def weekAverage = (average/4) as BigInteger
println "A media de materias por semana nesse ano foi: ${weekAverage}\n\n"
}
println "Total de itens em todos os anos: ${items.size}\n"
Foi extremamente fácil e não gastei mais do que 15 minutos para concluir esse código. Decidi então que eu iria escrever o mesmo programa em Ruby, tentando seguir os mesmos passos que realizei em Groovy. O resultado saiu em 10 minutos com o seguinte código:
[code]publications.rb
require ‘csv’
rows = CSV::Reader.parse(File.open(‘publications.csv’),’;’)
@items = rows.to_a
range = 2005…2008
range.each {|year|
puts year
@thisYearItems = []
@items.each {|item|
if (item[1] =~ /#{year}$/) != nil
@thisYearItems << item
end
}
numItems = @thisYearItems.size
puts “A quantidade de materias desse ano foi: #{numItems}”
average = (numItems/12)
puts “A media de materias por mes nesse ano foi: #{average}”
weekAverage = (average/4)
puts “A media de materias por semana nesse ano foi: #{weekAverage}\n\n”
}
puts “Total de itens em todos os anos: #{@items.size}\n\n”[/code]
Dessa experiência pude observar várias semelhanças entre as duas linguagens e também algumas diferenças. Os pontos que mais me chamaram a atenção foram o seguinte:
Groovy possue mais métodos de conveniência do que Ruby. Esses métodos são projetados para oferecer mais comodidade para o desenvolvedor. Isso fez com que o programa escrito em Groovy utilizasse apenas 23 linhas de código, enquanto o programa em Ruby utiliza 29 linhas.
Ruby foi mais performático neste caso (rodando ambos como script).
Ambas são linguagens extremamento flexiveis e poderosas com recursos e facilidades muito boas. Eu não tentei escrever esse programa em Java e nem em C, mas imagino que teriamos pelo menos o dobro de linhas de código. Se alguém se habilitar a fazer essa experiência, eu agradeço.
Analisem os dois exemplos e tirem suas próprias concluões sobre qual delas é mais a sua cara.
Isso me deu uma ótima idéia para postar sobre Groovy on Rails e Ruby on Rails. Também pretendo postar sobre meta-programação nestas duas linguagens.’
Pra terminar o post vale a pena mostrar o resultado, assim já dá uma idéia de quanto conteúdo teremos na InfoQ Brasil.
2006
A quantidade de materias desse ano foi: 949
A media de materias por mes nesse ano foi: 79
A media de materias por semana nesse ano foi: 19
2007
A quantidade de materias desse ano foi: 1525
A media de materias por mes nesse ano foi: 127
A media de materias por semana nesse ano foi: 31
2008
A quantidade de materias desse ano foi: 878
A media de materias por mes nesse ano foi: 73
A media de materias por semana nesse ano foi: 18
Total de itens em todos os anos: 3352
Conto com a participação de todos vocês nesse novo e promissor portal brasileiro. =)
Tags: | Ruby | Groovy |