Mais sobre Strings

Existem muitos métodos na classe String (você não precisa memorizar todos; pode olhar na documentação) como o reverse que dá uma versão ao contrário de uma string (o reverse não altera a string original). length (tamanho) dá o número de caracteres (incluindo espaços) na string.
upcase altera cada letra em mínusculo (caixa baixa) para maiúsculo (caixa alta), e downcase faz o oposto. swapcase altera a caixa de cada letra na string e, por fim, capitalize é como downcase, exceto por trocar a primeira letra para maiúscula (se for uma letra), slice dá uma substring de um string maior.

Os métodos upcase, downcase, swapcase e capitalize tem métodos correspondentes que alteram a string em questão ao invés de criar uma nova: upcase!, downcase!, swapcase! e capitalize!. Assumindo que você não precisa da string original, estes métodos irão economizar memória, especialmente se a string for grande.

Sabemos que Strings literais são sequências de caracteres entre aspas simples ou duplas. A diferença entre as duas formas está na quantidade de processamento que o Ruby faz na string enquanto constrói a literal. No caso da aspas simples, o Ruby faz muito pouco. A barra invertida serve para escapar outra barra invertida, para que a segunda barra não seja interpretada como um caractere de escape. Em strings com aspas simples, uma barra invertida não é especial se o caractere que se segue é qualquer coisa que não uma barra invertida. Por exemplo, ‘a\b’ e a\\b são iguais. No caso das aspas duplas, o Ruby tem mais trabalho. Primeiro, ele procura por substituições – sequências que começam com uma barra invertida – e as substitui com algum valor binário. A segunda coisa que o Ruby faz com strings com aspas duplas é a interpolação de expressões. Dentro da string, a sequência #{expressao} é substituída pelo valor de expressão (veja o exemplo p013expint.rb). Nesse programa, o valor retornado por um método Ruby é o valor da última expressão avaliada, então podemos nos livrar do valor da variável (resultado) e a declaração return juntos.

 1 # p013expint.rb
 2 def diz_boanoite(nome)
 3   result = "Boa noite, #{nome}"
 4   return resultado
 5 end
 6 puts diz_boanoite('Satish')
 7 
 8 # programa modificado
 9 def diz_boanoite2(nome)
10   "Boa noite, #{nome}"
11 end
12 
13 puts diz_boanoite2('Talim')

É importante notar que cada vez que uma literal string é usada em uma atribuição ou como um parâmetro, um novo objeto String é criado.

Como a memória é gerenciada pada Strings no Ruby? Há um pool separado para elas? As Strings são objetos da classe String. Essa classe tem mais de 75 métodos padrões. Se você consultar o “Guia de Usuário Ruby”, verá que ele diz que “não temos que nos preocupar com o espaço ocupado por uma string. Estamos livre de todo o gerenciamento de memória”.

Listando os métodos de uma classe ou objeto

1 String.methods.sort

Apresenta uma lista de métodos que o objeto String do tipo Class responde.

1 String.instance_methods.sort

Este método lhe apresenta todos os métodos de instância possuidos por String em ordem alfabética.

1 String.instance_methods(false).sort

Com esse método, você pode ver os métodos de instância de uma classe sem os métodos das classes ancestrais.

Comparando duas strings para a igualdade

As Strings têm diversos métodos para testar a igualdade. O mais comum é o == (duplos sinais de igual). Outro método de instância para testar a igualdade, String.eql?, checa se duas strings tem o conteúdo idêntico. Ele retorna o mesmo resultado que o ==. Um terceiro método de instância, String.equal?, testa se duas strings são o mesmo objeto. O exemplo p013strcmp.rb ilustra isso:

 1 # p013strcmp.rb
 2 # String#eql?, testa se duas strings tem conteúdo idêntico.
 3 # Retorna o mesmo resultado que ==
 4 # String#equal?, teste se duas strings são o mesmo objeto
 5 s1 = 'Jonathan'
 6 s2 = 'Jonathan'
 7 s3 = s1
 8 if s1 == s2
 9   puts 'Ambas strings têm o mesmo conteúdo'
10 else
11   puts 'Ambas strings não têm o mesmo conteúdo'
12 end
13 if s1.eql?(s2)
14   puts 'Ambas strings têm o mesmo conteúdo'
15 else
16   puts 'Ambas strings não têm o mesmo conteúdo'
17 end
18 if s1.equal?(s2)
19   puts 'As duas strings são objetos idênticos'
20 else
21   puts 'As duas strings não são objetos idênticos'
22 end
23 if s1.equal?(s3)
24   puts 'As duas strings são objetos idênticos'
25 else
26   puts 'As duas strings são objetos idênticos'
27 end

Usando %w

Às vezes, criar arrays (listas) de palavras pode ser algo doloroso, por todas as aspas e vírgulas. Felizmente, o Ruby tem um atalho: o %w faz o que queremos.

 1 nomes1 = [ 'marcelo', 'hugo', 'william', 'ricardo', 'rafael' ]
 2 puts nomes1[0] # marcelo
 3 puts names1[3] # ricardo
 4 # isso é mesma coisa:
 5 nomes2 = %w{ marcelo hugo william ricardo rafael }
 6 puts nomes2[0] # marcelo
 7 puts nomes2[3] # ricardo
 8 
 9 # Um jeito rápido de converter para caixa alta
10 # O símbolo :upcase representa uma chamada ao método upcase
11 puts nomes2.map(&:upcase)

Você pode ver todos os detalhes da classe String na documentação oficial do Ruby.

Logo do Guru-SP

Este material tem como base o tutorial do RubyLearning.com de Satish Talim e foi traduzido por membros do GURU-SP com a permissão do autor.

Ajude o RubyLearning participando em algum dos cursos pagos ou fazendo uma doação para o projeto

Voltar para o índice