Aprenda Ruby – parte IV – mais um pouco sobre Array
Nessa sequência de artigos sobre Ruby, venho tentando escrever artigos que não sejam muito extensos, justamente para que você aprenda Ruby ao modo Ruby, ou seja, prático, rápido e simples.
Mas depois de publicar o último post, tive um retorno tão bom que fiquei empolgado em escrever outro logo
.
Alem disso, fiquei com uma sensação de que estava faltando alguma coisa, como disse antes o foco não é mostrar os métodos de cada classe do Ruby, mas o Array em Ruby é tão maneiro que eu tinha que mostrar mais algumas coisas legais.
No post anterior eu disse que uma das coisas que me desanimou no Array, quando comecei a programar, era a dificuldade de recuperar os dados, então aqui vai mais alguns exemplos de como o Ruby resolve esse problema:
Ordenação
1 2 3 4 5 6 7 | #o método sort ordena os valores em ordem alfabética meuArray = %w(Alagoas Rio\ de\ Janeiro Brasília) => ["Alagoas","Rio de Janeiro","Brasilia"] #presto atenção na "\" para escrever algo com espaço dentro do mesmo item do array? #agora vamos ordenar por nome meuArray.sort => ["Alagoas","Brasilia","Rio de Janeiro"] |
Grande coisa o exemplo acima, qual é a linguagem que não faz isso, né?
Então, vamos jogar um pouco do pó mágico do Ruby e deixar o próximo exemplo mais atraente.
1 2 3 4 5 6 7 8 9 | meuArray = ["Alagoas","Brasilia","Rio de Janeiro"] => ["Alagoas","Brasilia","Rio de Janeiro"] #olha o que podemos fazer acrescentando um bloco no final #vamos ordenar ao contrario agora #mas lembre-se que você pode passar N condições #pois estamos trabalhando com blocos! meuArray.sort {|x,y| y <=> x} => ["Rio de Janeiro", "Brasília", "Alagoas"] |
Pesquisa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | estados = ["RJ","MG","SP"] => ["RJ","MG","SP"] #Quero confirmar se nesse Array #realmente existe o estado "Rio de Janeiro" estados.include?("RJ") => true #Agora queremos saber se algum item do meu array possui a letra "S" estados.any? { |item| item.include?("S") } => true #e se eu quiser saber se todos os itens do meu array possui a letra "S"? #simples! estados.all? { |item| item.include?("S") } => false #quero separar do meu array os estados com letra "S" estadosComS, estadosSemS = estados.partition { |item| item.include("S") } estadosComS => ["SP"] estadosSemS => ["RJ","MG"] |
Olha só que linguagem linda! Notem a expressividade desse código: "include?"
Eu quero saber se o meu array de estados contem o estado "RJ". Se eu quero saber algo sobre o meu array, eu tenho que perguntar para ele e uma pergunta deve terminar com interrogação, então: estados.include?("RJ").
Pode falar... da vontade de congelar esse projeto, que você ta desenvolvendo ai na sua empresa e reescreve tudo em Ruby, não é? rs...
Mais uma vez utilizei bastante o conceito de blocos, que é um dos grandes baratos do Ruby.
Logo irão surgir outros conceitos que vão me obrigar a ter a mesma postura, no próximo post vamos ver um pouco sobre lambdas, que é um outro recurso bem bacana.
É importante fixar bem esses conceitos para programadores que vem de linguagens como Java, Delphi, C#, pois é mais difícil se acostumar com algo tão fora do trivial do seu dia a dia, é importante isso ficar na "veia", para que você consiga lembrar de utilizar esses tipos de recursos quando precisar. Tenho certeza que isso vai facilitar muito a sua vida quando estiver programando em Ruby.
Acho que agora deu para fechar com chave de ouro o nosso estudo sobre arrays.
Até a próxima!
Iuri