Usando arrays no Ruby

17/04/08

O Ruby tem algumas particularidades que muitas pessoas não conhecem. Algumas são especialmente úteis, como é o caso do atalho de array. Normalmente, utilizamos a seguinte sintaxe:

items = ['mac', 'linux', 'windows', 'unix']
puts items.size # returns 4

Esse formato é bastante simples, mas se você tiver muitos itens pode se tornar um pouco cansativo para se digitar. No Ruby, você também pode utilizar esta sintaxe:

items = %w[mac linux windows unix]
puts items.size # returns 4

É importante notar que você deve escapar o espaço se quiser usar um termo composto por mais de uma palavra.

items = %w[mac linux windows\ vista unix]
puts items.size # returns 4

Note que você pode usar qualquer caracter como agrupador. Veja alguns exemplos:

items = %w{mac linux windows unix}
puts items.size # returns 4
 
items = %w"mac linux windows unix"
puts items.size # returns 4
 
items = %w(mac linux windows unix)
puts items.size # returns 4

Uma dica muito simples, mas elegante!

O modo Ruby de fazer

19/02/07

Ruby é uma linguagem e tanto! Vou mostrar abaixo algumas coisas que considero maravilhosas e uma vez que você se acostuma, sente falta em todas as outras linguagens que você trabalha!

Adicionar itens em um array

items = ['apple', 'windows', 'linux']
 
# modo antigo
items.push('unix')
 
# modo ruby
items << 'unix'

Concatenando strings*

phrase = 'I do not like '
 
# modo antigo
phrase += 'Windows'
 
# modo ruby
phrase << 'Windows'

Verificando se um item existe no array e se não existir, adiciona

items = ['apple', 'windows', 'linux']
 
# modo antigo
if not items.include?('unix')
  items << 'unix'
end
 
# modo ruby
items |= ['unix']

Atribuindo valores de um array a variáveis

items = ['apple', 'windows', 'linux']
 
# modo antigo
a = items[0]
b = items[1]
 
# modo ruby
a, b = *items

Atribuindo um valor a uma variável somente se ela não tiver nenhum valor pré-definido

a = nil
 
# modo antigo
if not a
  a = 'linux'
end
 
# modo ruby
a = 'linux' unless a
 
#modo ruby melhor ainda
a ||= 'linux'

*Antes que me perguntem qual a vantagem de se utilizar << ao invés de += é que você padroniza o método "adicionar a" para arrays e strings, além de arquivos (se anda como um pato e faz o som de um pato, deve ser um pato).