Iteradores

Agora vamos entrar numa das características mais legais de Ruby: iteradores .

Um iterador é um tipo especial de método. Trata-se de um método que permite a você acessar um item de cada vez.

Arrays não são os únicos objetos que têm iteradores, mas são os mais importantes. Iteradores são melhores vistos através de exemplos. Aqui nós usamos Array#each:


friends = ["Melissa", "Jeff", "Ashley", "Rob"]  
friends.each do |friend|
     puts "I have a friend called " + friend 
end 
                       

Isso vai produzir :


I have a friend called Melissa  
I have a friend called Jeff
I have a friend called Ashley
I have a friend called Rob
                       

O aprendiz mais interessado poderá notar que esta aparência é muito semelhante à do primeiro laço que mostramos. O outro tem a forma n.times do ... Trata-se, na verdade, de um iterador. E ele permite que você use sobre os inteiros de 0 a n-1:


4.times do |num|
	puts num
end
                       

O que produzirá :


0
1
2
3
                       

O fato de começar a contagem a partir de 0 pode parecer estranha. Mas, na verdade, isso combina com matrizes (que começam contando de 0). Assim, o código fica:


friends = ["Melissa", "Jeff", "Ashley", "Rob"]  
friends.each do |friend|
     puts "I have a friend called " + friend 
end 
                       

Também pode ser escrito como:


# 'i' is a standard notation for 'index'.
4.times do |i|
	puts "I have a friend called " + friends[i]  
end
                       

Agora, aqui está algo legal: Lembra do método Array#length ?


friends.length.times do |i|  # 'i' for 'index'.
	puts "I have a friend called " + friends[i]  
end
                       

Agora, suponha que eu não queira imprimir todos os meus amigos. Quero apenas imprimir outros amigos. Nós podemos imprimir os amigos que correspondam a determinados índices numerados. Podemos fazê-lo com método remanescente (Integer#%). Este código vai mostrar apenas nomes com índices ímpares.


friends.length.times do |i|
	# Print only even indices (i.e. remainder with 2 is 0).
	if  i % 2 == 0
		puts "I have a friend called " + friends[i]
	end
end
                       

Isso produz :


I have a friend called Melissa  
I have a friend called Ashley
                       

Agora, quero imprimir o nome de meus amigos em ordem alfabética:


friends.sort.each do |friend|
	puts "I have a friend called " + friend  
end
                       

Vai produzir :


I have a friend called Ashley
I have a friend called Jeff
I have a friend called Melissa  
I have a friend called Rob
                       

Exercícios

1- Imprima todo o conteúdo de friends com ordem alfabética inversa.

2- Imprima uma música qualquer usando um iterador.

3- Tenho o seguinte array :


names = [ "daniel", "eduardo", "alejandro", "enrique" ]  
                       

Use o método String#capitalize para imprimir estes nomes com inicial maiúscula.

topo da página

<< Página Anterior | índice | Próxima Página >>
Apostilas de Ruby e RGSS

nossos tutoriais

navegue

livros recomendados