Ruby Data Types (parte 1)

Vamos aprender um pouco dos tipos de dados do Ruby

Em Ruby, temos seis principais tipos de dados: number, string, symbol, array, hash e boolean (numérico, cadeia de caracteres, símbolos, matriz, chave e valor e booleano). Nesse Magic Resource veremos Number, String e Symbol e vamos apresentar cada um deles a seguir:

Number

Numéricos em Ruby são, basicamente, como você aprendeu na escola e se fizer algumas operações básicas no IRB você poderá comprovar isso:

2.1.6 :001 > 1 + 1
 => 2

Aqui, o Ruby avaliou a expressão 1 + 1 e retornou 2 como esperado. Se tentar outras operações básicas tudo funcionará como previsto, a não ser que você faça isso:

2.1.6 :001 > 5 / 2
 => 2

O Ruby executou uma divisão entre inteiros (comportamento padrão). Nesse caso, ele faz a divisão de 5 por 2 que resulta em 2 e sobra 1 e este valor é descartado (assim como você deve ter aprendido no primário). Se quiser ver o resto da divisão você pode usar o operador %:

2.1.6 :001 > 5 % 2
 => 1

Quando precisar de um resultado com decimais, você precisa explicitar que o numero é um float (ponto flutuante), como a seguir:

2.1.6 :001 > 5.0 / 2
 => 2.5

Como dito em um Magic Resource anterior, números são Objetos em Ruby, sendo assim, apesar de serem operações simples, tudo que fizemos foram chamadas de métodos:

2.1.6 :001 > 0.zero?
 => true
2.1.6 :002 > 1.zero?
 => false
2.1.6 :003 > 5.+(2)
 => 7

Perguntamos se 0 é zero e recebemos true. Depois, se 1 é zero e recebemos false. E, por último, chamamos o método :+ de 5 passando como parâmetro 2 isso poderia ter sido feito com 5 + 2.

String

Uma String pode ser criada por uma sequência de caracteres com aspas simples '' ou duplas "":

2.1.6 :001 > 'Um texto qualquer'
 => "Um texto qualquer"
2.1.6 :002 > "teste"
 => "teste"

Uma String também é um objeto – como no caso dos números que vimos anteriormente – e responde a alguns métodos de forma interessante:

2.1.6 :001 > "concatenar 2" + " textos"
 => "concatenar 2 textos"
2.1.6 :002 > "-" * 30
 => "-----------------------------"
2.1.6 :003 > "Eô" * 3
 => "EôEôEô"

Nós concatenamos (juntamos) textos com +, multiplicamos textos com * e agora temos algo a falar sobre as aspas simples '' e as aspas duplas "". A primeira cria uma string literal (não encane com isso agora) e a segunda nos permite criar string mais complexas, veja:

2.1.6 :001 > x = 4 + 5
 => 9
2.1.6 :002 > "4 + 5 resulta em #{x}"
 => "4 + 5 resulta em 9"
2.1.6 :003 > "4 + 5 resulta em #{4 + 5}"
 => "4 + 5 resulta em 9"

Com aspas duplas podemos fazer interpolação de Strings. Com o identificador #{} podemos interpolar variáveis, executar código, invocar métodos, entre outros e ao final converter o resultado em uma String.

Podemos também, com aspas duplas, adicionar o caracter de nova linha, tab e retorno de carro:

2.1.6 :001 > puts "def teste\n\tputs teste\nend"
def teste
        puts teste
end
 => nil

Se fizermos o mesmo com aspas simples, o resultado será o seguinte:

2.1.6 :001 > puts 'def teste\n\tputs teste\nend'
def teste\n\tputs teste\nend
 => nil

Existem vários métodos de String, você pode executar "".methods para ver o nome deles. Veja alguns exemplos:

2.1.6 :001 > "A".succ
 => "B"
2.1.6 :002 > "A".empty?
 => false
2.1.6 :003 > "The programmer's best friend".split(" ")
 => ["The", "programmer's", "best", "friend"]

Symbol

Symbols são muito semelhantes às Strings, mas ao invés de usar aspas colocamos : .

2.1.6 :001 > :teste
 => :teste
2.1.6 :002 > :teste.class
 => Symbol

A grande diferença entre String e Symbol é que os Symbols são únicos e criados somente um vez. Na prática, isso significa que eles alocam memória somente no momento que são definidos pela primeira vez. Vamos ver isso na prática:

2.1.6 :001 > :teste.object_id
 => 544328
2.1.6 :002 > :teste.object_id
 => 544328
2.1.6 :003 > "teste".object_id
 => 70155833875660
2.1.6 :004 > "teste".object_id
 => 70155833852380

Veja que mesmo chamando duas vezes :teste.object_id temos o mesmo identificador, diferente das Strings que, para cada linha, recebemos um identificador, mostrando que são objetos diferentes, mas com o mesmo valor.

Os Symbols são normalmente usados quando precisamos de identificadores, como as chaves dos Hash e quando o Ruby faz uma comparação entre Strings – ele precisa verificar cada caracter para definir a igualdade, já no caso dos Symbols basta fazer uma comparação entre inteiros (object_id), o que é muito mais rápido e eficiente.

No próximo Magic Resource veremos Array, Hash e Boolean.

Até lá!

Faça login para comentar.

Entrar

6 Comentários

RodrigoPatrao

RodrigoPatrao há aproximadamente 3 anos

Retorno de Carro seria o CR (Carriage Return), ou caractere de nova linha. Isso vem da época da máquina de escrever, onde se retornava o "carro" da máquina para escrever uma nova linha no papel (mode velho ON). Abraço!


Alan Rafael R. Batista

Alan Rafael R. Batista há aproximadamente 3 anos

0.zero? false # ERRADO!

Somente se a gente sobrescrever o método :zero? de Fixnum.

class Fixnum def zero? false end end

Mas isso seria uma completa viagem!

Muito obrigado pelo comentário!


Guilherme Danno

Guilherme Danno há aproximadamente 3 anos

2.1.6 :002 > 0.zero? => false


Felipe Simoes

Felipe Simoes há aproximadamente 3 anos

No quarto exemplo de String tem-se a linha "Podemos também, com aspas duplas, adicionar o caracter de nova linha, tab e retorno de carro:". Não entendi a que se refere o texto.


andremakiyama

andremakiyama há aproximadamente 2 anos

quando vc utiliza aspas duplas, é possível colocar "/n" no texto, que serve para pular linha


Stefanie Melo

Stefanie Melo há aproximadamente 3 anos

Errro: "DL is deprecated, please use Fiddle Switch to inspect mode.... Como "acabar" com essa mensagem de erro? =(


PeeweeEbony

PeeweeEbony há aproximadamente 3 anos

a parte 2 bem que poderia estar na direita da tela, assim ficava mais organizado.