Continuando os estudos de Ruby, e a leitura do livro The Ruby Programming Language
Hoje vamos continuar falando de Symbol, é hora de nos aprofundar.
Symbol
Uma implementação típica de um interpretador Ruby mantém um símbolo em tabela que ele armazena os nomes de todas as classes, métodos e variáveis que ele conhece. Isso permite que tal intérprete evite mais comparações de string: refere-se a nomes de métodos (por exemplo) pelo sua posição na presente tabela de símbolos. Isso transforma uma string relativamente pesada em uma certa operação, e relativamente leve com operação de números inteiro.
Esses símbolos não são puramente interno para o intérprete, pois eles podem também ser usado por programas Ruby. Um objeto de Symbol refere-se a um símbolo. Um símbolo literal é escrito prefixando um identificador ou uma string com um dois pontos:
1 2 3 4 5 |
|
Símbolos têm também uma sintaxe literal %s que permite delimitadores arbitrários da mesma maneira que %q e %Q pode ser usado para strings:
1
|
|
Os símbolos são usados frequentemente para se referir a nomes de métodos no reflexivo código. Por exemplo, suponha que queremos para saber se algum objeto tem um método each:
1
|
|
Aqui está outro exemplo. Ele testa se um determinado objeto responde a um método especificado, e, em caso afirmativo, invoca o método:
1 2 3 4 |
|
Você pode converter uma String para um Symbol utilizando os métodos intern ou to_sym. E você pode converter um Symbol de volta para uma String com o método to_s ou sue alias id2name:
1 2 3 4 5 |
|
Duas seqüências podem ter o mesmo conteúdo e ainda ser completamente de objetos distintos. Este nunca é o caso com símbolos. Duas strings com o mesmo conteúdo irá tanto converter para exatamente o mesmo objeto symbol. Dois objetos distintos Symbols terá sempre conteúdo diferente.
Sempre que você escrever código que usa string não para o seu conteúdo textual, mas como uma espécie de identificador único, considere o uso de symbols em vez disso. Ao invés de escrever um método que espera um argumento para ser ou a string de “AM” ou “PM”, por exemplo, você poderia escrevê-lo para esperar o símbolo :AM ou o símbolo :PM. Comparando-se dois objetos Symbols de igualdade, é muito mais rápido de comparar duas strings para a igualdade. Por esta razão, os símbolos são geralmente preferido para strings como chaves de hash.
No Ruby 1.9, a classe símbolo define um número de métodos String, como length, o size, os operadores de comparação, e mesmo os operadores [] e =~. Isto faz com que os símbolos sejam um pouco permutável com string e permite a sua utilização como uma espécie de imutável (E não garbage-collected) string.
É isso ai amigos até a proxima.. :D