Postado em abril 9, 2010 às 3:20 am

[Mini curso] Do Ruby ao Rails – Parte 3

Continuando o minicurso, continuarei a parte de tipos do Ruby falando sobre arrays. Aproveitarei para alinhar o post à esquerda, atendendo a pedidos, e para testar o codecolorer, plugin de exibição de código.

Arrays(Vetores)

Em Ruby, um array é um objeto que contém um número de items. Estes items podem ser variáveis(como strings, inteiros, Hash etc)  ou até mesmo outros objetos(incluindo outros arrays para criar um array/vetor multimensional). Uma vez que os items foram agrupados em um array, você pode realizar tarefas como ordenação em ordem alfabética ou numérica, acessar e alterar o valor atribuído a cada item do array e até mesmo passar o grupo de items como argumento para um método. Há mais de uma forma de se criar um array em Ruby. Essencialmente, um array é uma instância da classe Array. Logo, podemos criar um array diretamente atribuindo valores a ele, ou simplesmente criar como um objeto, como demonstrado abaixo:

DiasDaSemana = Array.new

O construtor da classe Array tem algumas sobrecargas, logo poderíamos ter passado como parâmetro para ele apenas o tamanho do array (Ex: Array.new 7 ),o tamanho e um valor padrão para os elementos (Ex: Array.new 7, “hoje”) ou diretamente os valores  de cada elemento (Ex:  Vetor = [1,2,3]). Abaixo há uma pequena demonstração sobre as mais variadas formas de se instanciar um Array.

figura9_arraystypes

As várias maneiras de se instanciar um array

Outros métodos que temos ainda para arrays são empty?,shift, pop,push,delete, delete_at e size. O primeiro verifica se o array está vazio, shift remove o primeiro elemento do array, pop remove o último elemento do array,push adiciona um elemento, delete remove um elemento passado como parâmetro,delete_at remove um elemento que esteja em uma posição passada como parâmetro e size retorna o tamanho do array. Execute o código abaixo e verifique o resultado:

vetor = ["a",1,2,"d","e","f"]
vetor.empty?
vetor.size
vetor.shift
vetor.pop
vetor.delete_at(1)
vetor.delete("d")
vetor.inspect

Observe o resultado do código acima:

Exclusão de objetos em um array

Exclusão de objetos em um array

Os arrays em Ruby permitem infinitas possibilidades. Notem que o array acima possui elementos Fixnum e strings também. Sim, arrays em ruby podem conter diferentes tipos de elementos. Acessar elementos em arrays também é algo bem simples. Podemos acessar através do índice, ou através do próprio elemento. Execute o código abaixo e veja os resultados:

vetor.index("e")
vetor[0]
vetor[0].class

Outra coisa interessante do ruby é a subtração de vetores, algo inexistente em linguagens como Java e C#. Execute o código abaixo e observe o resultado:

vetorDeLetras = ["a","b","c"]
outroVetor =  ["a","b"]
vetorFinal = vetorDeLetras - outroVetor
vetorFinal.inspect

O resultado é um vetor com os elementos que estão no primeiro vetor, mas não no segundo: figura11_arraysubtraction Ordenação de arrays é também muito simples em Ruby. Utilizando o método sort!, ordenamos o array, e utilizando o método reverse (cuja utilização já foi demonstrada quando falei de strings – lembrando que strings nada mais são que arrays de caracteres), podemos ordenar nossos arrays sem nenhum problema. Experimente rodar o código abaixo, e verifique os resultados:

vet = ["a","c","d","b"]
vet.sort!
vet.reverse
Ordenação de Arrays no Ruby

Ordenação de Arrays no Ruby

E para terminar, vamos fazer uma atribuição de valores a mais de um elemento ao mesmo tempo. Execute o código abaixo, e veja como o Ruby faz isso:

vet = ["a","b","c","d","e"]
vet[1..3] = "z","x","y"
vet.inspect
Sobrescrevendo elementos de um array

Sobrescrevendo elementos de um array

Bem, por enquanto é só. Os Arrays são uma ferramenta muito poderosa no Ruby, e ainda há muito a falar sobre eles, mas tópicos mais avançados deixarei para que vocês descubram. Dúvidas, críticas e sugestões, os comentários estão abertos. Espero que tenham gostado do artigo(e do fato de não estar mais centralizado, hehe). Abraços e keep coding! ;)

Tags:, , , ,

Deixar um comentário