Dando continuidade ao nosso mini curso, fecharei a parte de tipos, falando rapidamente o que falta sobre arrays, abordando os Hashes e farei a introdução aos métodos.
Arrays multidimensionais
Arrays multidimensionais: Nada mais são que arrays dentro de outros arrays. Abaixo, um exemplo de como fazer isso:
vetor = [ [1,2,3], [4,5,6], [7,8,9] ]
#Cria um array de tamanho 2
outroVetor = Array.new 2
#Atribui um novo array, também de tamanho 2, à posição 0 do array
outroVetor[0]= Array.new 2, 'TesteTerceiroArray'
#Atribui um novo array, também de tamanho 2, à posição 1 do array
outroVetor[1]=Array.new 2,, 'TesteQuartoArray'
Indexando arrays
Você pode indexar a partir do fim de um array usando o sinal de menos (), onde 1 é o índice do
último elemento; Também podemos usar faixas de valor (entre um índice inicial e final separados
por dois sinais de ponto – .. ):
print( arr[0,5] ) #=>; 'hello'
print( arr[5,5 ] ) #=>; 'world'
O ruby possui um alias para arrays de strings, que é o %w. Observe um exemplo abaixo:
arrayDeStrings.inspect
Hashes
Hashes também são coleções, assim como os arrays. A diferença é que o índice dos Arrays é sempre numérico, e Hashes são coleções par-valor onde os índices podem ser objetos também.
Mesmo que os arrays forneçam uma boa forma de indexar uma coleção de itens por número, há situações
que seria mais conveniente indexar de alguma outra forma. Se, por exemplo, ao listar os filmes da sua coleção de DVDs,seria mais significativo ter cada filme indexado pelo nome e/ou pelo gênero, ao invés de números: 26, 42 e assim por diante. O Ruby possui uma classe que permite que você faça isso: A classe Hash. Hashes são conhecidos em outras linguagens como dicionários(em java e em .NET, classes que implementam a interface IDictionary). Tal qual um dicionário de verdade, as entradas são indexadas por uma chave única (em um dicionário, seria uma palavra) e um valor (em um dicionário, seria a definição da palavra).
Você pode criar um hash criando uma nova instância da classe Hash:
segundoHash = Hash.new("Um filme qualquer")
Ambos os exemplos acima criam um Hash vazio. Um objeto Hash sempre têm um valor padrão –
isto é, um valor que é retornado quando nenhum valor específico é encontrado em um dado índice.
Nestes dois exemplos, segundoHash é inicializado com o valor default,”um filme qualquer”. A variável primeiroHash não é inicializado com um valor então seu valor padrão será nil. Tendo criado um objeto Hash, podemos adicionar itens a ele usando uma sintaxe semelhante à dos
arrays – isto é, colocando um índice nos colchetes e usando o sinal de igual para atribuir um
valor.A diferença óbvia aqui é que, com um array, o índice ( a chave ) deve ser um número inteiro; com
um Hash, ele pode ser qualquer item de dado único. Observe o exemplo abaixo:
segundoHash['Comedia'] = 'Uma noite no museu'
segundoHash['Drama'] = 'Sempre ao seu lado'
segundoHash['Sci-fi'] = 'Star Wars'
Muitas vezes, a chave pode ser um número ou, como no código acima, uma string. Por princípio,
uma chave pode ser qualquer tipo de objeto. Dada uma classe Qualquer, a seguinte atribuição é totalmente válida:
segundoHash[qqr] = 'valor qualquer'
Existe uma forma mais simples de criar e inicializar hashes. Adicione a chave seguida por => e o valor associado. Cada par chave-valor deve ser separado por uma vírgula e o lote todo colocado entre os sinais de chaves {}:
'MPB'=>'Chico Buarque',
'Classico'=>'Beethoven',
'New Age'=>'Enya' }
puts musicHash['Eletronica']
puts segundoHash['ValorInexistente']
Repare que no código acima, as últimas duas linhas tentam imprimir chaves que não existem. Nesse caso, o ruby exibe o valor default, que é definido no momento em que a instância é criada. Para o hash de nome segundoHash, definimos esse valor na instância, no código um pouco acima, quando o instanciamos(foi passado como parâmetro para o método new). No caso do hash musicHash, será retornado o valor nil.
Os hashes ainda possuem os métodos keys e values, que retornam um array com os respectivos valores.
Métodos
Os métodos em ruby tem algumas particularidades(que podem ser utilizadas para o bem ou para o mal). Observe o código abaixo:
return a+b
end
def Soma a,b
a+b
end
Ambos são o mesmo método, apenas com pequenas diferenças na declaração. O Ruby não exige parênteses na declaração ou na invocação de métodos(embora seja uma boa prática utilizá-los), e embora tenha a palavra return como reservada, não exige que ela seja colocada no retorno do método, pois o interpretador considera sempre a última linha como um retorno.
O ruby também possui métodos estáticos, ou seja: Métodos de classe, que não precisam de uma instância para serem chamados. Observe abaixo um exemplo:
def self.Soma a,b
a+b
end
def Subtracao a,b
a-b
end
end
Na classe acima, o método Soma é precedido pela palavra self, o que indica que é um método estático e não precisa de um objeto instanciado para ser chamado. Observe o que ocorre ao chamarmos ambos os métodos sem instanciarmos a classe:
Ao chamar o método soma que foi definido como estático, temos o resultado esperado(3), mas ao chamar o método Subtracao obtemos um erro, pois não instanciamos o objeto anteriormente.
Por convenção, os métodos em ruby, ao contrário das classes, começam com letra minúscula. Escrevi os métodos com letras maiúsculas por que eu sou um imbecil por costume, já que a minha linguagem “nativa” de programação é o C#.
Bem, por enquanto é isso. Sugestões e críticas, os comentários estão abertos.
Abraços e keep coding.
goncin em maio 20th, 2010 at 16:01 says:
Opa! Gostei do template novo, mais fácil de ler. É tão Mac que até a fonte Monaco apareceu pra mim!
Bruno Bemfica em maio 20th, 2010 at 16:27 says:
Valeu, Goncin! Eu realmente achei que cores mais claras fossem melhorar a leitura, e deixar mais agradável. Até os acessos do blog subiram depois da troca, hehehehe.