Ruby é uma linguagem de programação bem conhecida. Ela visa melhorar a simplicidade e a produtividade. Também é uma linguagem de programação totalmente orientada a objetos. Além disso, o Ruby vem com uma sintaxe elegante que é natural de ler e fácil de escrever.
Qualquer programação requer o gerenciamento de vários tipos de dados. Um tipo de dados descreve uma classe específica de dados. Ele diz à máquina como ela deve lidar com os dados no programa. Os tipos de dados são cruciais para determinar o que pode ser feito com os dados (incluindo as operações que podem ser realizadas). Neste tutorial, nós iremos mergulhar mais fundo nos tipos de dados disponíveis no Ruby. Também exploraremos a tipagem dinâmica. Usando esse recurso, o Ruby pode determinar automaticamente o tipo de dados de uma variável sem declará-la explicitamente. Vamos começar!
Pré-requisitos
Para praticar e implementar as etapas demonstradas neste guia, você precisará dos seguintes componentes:
- Um sistema Linux configurado corretamente. Saiba mais sobre configurar um servidor Ubuntu pessoal na CloudSigma.
- Um ambiente de desenvolvimento Ruby configurado corretamente. Confira a documentação oficial de instalação do Ruby no Ubuntu (usando APT).
Tipos de dados no Ruby
O Ruby apresenta todos os tipos de dados comuns que você encontrará em qualquer linguagem de programação: inteiros, floats, strings, arrays, símbolos, hashes, etc. A seguir, forneceremos uma visão geral de como trabalhar com os vários tipos de dados do Ruby.
Step 1 – Integers
Semelhante à matemática, inteiros na programação de computadores são números inteiros. O valor pode ser positivo, negativo ou 0. O intervalo de valores é o seguinte:
|
1 |
{-∞, …, -1, 0, 1, …, ∞} |
Hora de testar inteiros no Ruby. O primeiro exemplo é imprimir um inteiro simples na tela:
|
1 2 |
print 99 print "\n" |
A seguir, trabalharemos com uma variável inteira. Aqui, a variável sample_int contém um valor inteiro (99) e a print função imprime o valor da variável na tela:
|
1 2 3 |
sample_int = 99 print sample_int print "\n" |
Também podemos fazer contas com inteiros. O exemplo a seguir demonstra uma soma simples de dois números inteiros:
|
1 2 3 |
sample_int = 99 + 100 print sample_int print "\n" |
Quando estamos trabalhando com números grandes, frequentemente usamos vírgulas (,) para facilitar a leitura. Por exemplo, um milhão (1000000) é escrito como 1,000,000 para melhor legibilidade. Embora o uso de vírgulas seja proibido, o Ruby permite o uso de underscores ( _) como delimitador. Dê uma olhada no seguinte exemplo:
|
1 2 3 |
sample_int = 1_000_999 print sample_int print "\n" |
O uso de underscores melhora a legibilidade do código, especialmente ao lidar com grandes valores inteiros.
Step 2 – Floating-Point Numbers
Um número de ponto flutuante (ou float, para abreviar) representa um número real. Semelhante à definição matemática, os números reais podem ser racionais ou irracionais. No Ruby, um float é basicamente um número que contém um ponto decimal.
Vamos tentar imprimir um valor float na tela:
|
1 2 |
print 55.66 print "\n" |
O próximo exemplo demonstra a declaração de uma variável float:
|
1 2 3 |
sample_float = 55.66 print sample_float print "\n" |
Também podemos realizar várias operações matemáticas nos valores e variáveis float. O exemplo a seguir demonstra uma soma simples de dois números float:
|
1 2 3 |
sample_float = 55.66 + 99.222 print sample_float print "\n" |
E se adicionássemos um float e um inteiro? O valor resultante será float. No exemplo a seguir, apesar de 55.0 ser um número inteiro, ele é tratado como um float:
|
1 2 3 |
sample_float = 55.0 + 10 print sample_float print "\n" |
Step 3 – Boolean
Booleanos representam os valores de verdade do ramo lógico da matemática. No Ruby, os tipos de dados booleanos são representados por dois valores: true e false:
-
Maior que
-
100 > 99: true
-
99 > 100: false
-
-
Menor que
-
500 < 999: true
-
999 < 500: false
-
-
Igual
-
10 == 10: true
-
9 == 99: false
-
Semelhante aos números, também podemos armazenar um true ou false valor em uma variável. O exemplo a seguir demonstra esse recurso:
|
1 2 3 |
result = 9 == 99 print result print "\n" |
Passo 4 – Strings
In programming, a string é representada como uma sequência de caracteres (letras, números e símbolos). Em Ruby, as strings existem dentro de aspas simples ( ') ou aspas duplas ( "). Nós já cobrimos o uso de strings em Ruby em detalhes, então esta será uma seção curta.
O exemplo a seguir é um programa básico hello world em Ruby:
|
1 |
print "hello world!\n" |
Também podemos armazenar strings em variáveis. O exemplo a seguir também incorpora concatenação de strings:
|
1 2 |
username = "Cloudsigma" print "hello, " + username + "!\n" |
Passo 5 – Arrays
Um array é uma estrutura de dados que pode armazenar uma coleção de tamanho fixo de elementos do mesmo tipo de dados. Também pode ser conceituado como uma coleção de variáveis do mesmo tipo de dados. É uma das estruturas de dados mais fundamentais na maioria das linguagens de programação modernas.
Em Ruby, um array é definido da seguinte forma:
|
1 |
[value_1, value_2, …, value_N] |
É possível criar um array de qualquer outro tipo de dados que discutimos até agora (inteiro, float e strings). Aqui estão alguns exemplos:
-
Inteiro: [-5, 0, 5]
-
Float: [-9.99, -6.99, -3.99, 0, 3.99]
-
String: [“the”, “quick”, “brown”, “fox”]
O exemplo a seguir implementa todos esses tipos de arrays:
|
1 2 3 4 5 6 |
print [-5, 0, 5] print "\n" print [-9.99, -6.99, -3.99, 0, 3.99] print "\n" print ["the", "quick", "brown", "fox"] print "\n" |
Observe que quando a função print encontra um array, ela imprime o array inteiro na tela. Para maior conveniência, você frequentemente encontrará arrays como variáveis. Vamos atualizar o código:
|
1 2 3 4 5 6 7 8 9 10 |
array_int = [-5, 0, 5] print array_int print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string print "\n" |
Agora, podemos trabalhar com elementos individuais dos arrays:
|
1 2 3 4 5 6 7 8 9 |
array_int = [-5, 0, 5] print array_int[2] print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float[1] print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string[3] print "\n" |
Observe que em Ruby, o valor do índice dos arrays começa com 0.
Para conveniência, os arrays em Ruby vêm com os métodos .first e .last que imprimem o primeiro e o último elemento:
|
1 2 3 4 |
array_float = [-9.99, -6.99, -3.99, 0, 3.99] puts array_float.first puts array_float.last print "\n" |
Em Ruby, os arrays têm outro recurso interessante. Eles podem conter diferentes tipos de dados ao mesmo tempo. Por exemplo, você pode armazenar strings, símbolos e até mesmo outros arrays:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mixed_array = [ "hello", 99.99, "world", [ "the", "quick", "brown", "fox" ] ] print mixed_array print "\n" print mixed_array[3] print "\n" |
Passo 6 – Símbolos
No Ruby, um symbolé um tipo de dados especial que funciona como uma etiqueta ou um identificador. Os símbolos são imutáveis, o que significa que não podem ser alterados. Os símbolos aparecem como se estivessem declarando variáveis sem nenhum valor.
Aqui está um exemplo de um símbolo:
|
1 |
:time_zone |
Geralmente, os símbolos são usados para identificar algo importante. Para outras situações, no entanto, as strings são mais do que suficientes.
O Ruby, sendo uma linguagem orientada a objetos, trata tudo como um objeto (incluindo strings) com seu local de memória exclusivo, mesmo que as strings sejam idênticas. No entanto, quando você está referenciando um símbolo, é o mesmo objeto em qualquer lugar do programa, o mesmo local de memória.
Passo 7 – Hashes
Um hash é uma coleção de chaves e valores semelhante a um dicionário. Muitas vezes, os hashes são usados para armazenar dados relacionados, por exemplo, informações sobre um usuário.
Aqui está um exemplo rápido de um hash. Nós criamos um hash user_info contendo o nome de usuário e a senha de um usuário:
|
1 2 3 4 5 6 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info print "\n" |
Para recuperar os valores de um par chave-valor, temos que usar a chave. O exemplo a seguir demonstra esse processo:
|
1 2 3 4 5 6 7 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info["username"] print "\n" |
O Ruby também permite definir um hash usando sintaxes ligeiramente diferentes ( : em vez de =>):
|
1 2 3 4 5 6 |
user_info = { username: "HelloWorld999", password: "password123" } print user_info[:password] print "\n" |
Essa estrutura de sintaxe é semelhante à sintaxe usada em outras linguagens, por exemplo, JavaScript. Nessa estrutura de sintaxe, as chaves são definidas como símbolos. É por isso que, em vez de usar "username", estamos usando: username para acessar o valor.
Tipagem Dinâmica
Você já deve ter notado que, ao declarar uma variável, não precisamos atribuir explicitamente um tipo de dados. Em vez disso, o valor da variável determina o tipo de dados. O Ruby usa tipagem dinâmica onde a verificação de tipo é realizada em tempo de execução. Em contraste, os tipos de dados são determinados durante a compilação em tipagem estática linguagens de programação (C/C++, por exemplo).
No exemplo a seguir, todos os valores atribuídos à variável dyn_var são válidos:
|
1 2 3 4 5 |
dyn_var = 123 dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" dyn_var |
Em linguagens de tipagem dinâmica, somos livres para reutilizar uma variável existente para armazenar diferentes tipos de dados. Aqui, o exemplo anterior é atualizado para demonstrar esse fenômeno:
|
1 2 3 4 5 6 7 |
dyn_var = 123 puts dyn_var dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" puts dyn_var dyn_var |
Como este exemplo demonstra, toda vez que um novo valor é atribuído, ele altera o tipo de dados de dyn_var na hora. É útil ao converter um tipo de dados em outro. O exemplo a seguir demonstra isso:
|
1 2 3 4 |
print "enter length: " length = gets.chop length = length.to_f puts length |
Aqui,
-
Como as entradas do teclado são strings, length é uma string a princípio.
-
Como o nosso valor desejado é um float, estamos convertendo o valor da string para float usando o to_f método.
-
Devido à alteração do valor, length recebe o tipo de dados float. É isso que vemos ao imprimir seu valor na tela.
O que aconteceria se tentássemos misturar dois tipos de dados diferentes? O Ruby gerará um erro. Dê uma olhada:
|
1 |
print 9 + "77" |
Identificação do Tipo de Dados
No Ruby, tudo é tratado como um objeto. Todo objeto no Ruby vem com o método class. Quando chamado, este método informa qual é o tipo de dados da origem. Aqui estão alguns exemplos de uso do método class:
|
1 2 3 4 |
puts 55.class puts (55.55).class puts true.class puts nil.class |
Outra maneira de identificar o tipo de dados é usando o método kind_of?. Ele verifica o tipo de dados do objeto em relação ao tipo de dados solicitado e retorna um valor booleano. Confira no exemplo a seguir:
|
1 2 |
puts 55.kind_of?(Float) puts 55.kind_of?(Integer) |
Da mesma forma, existe outro método is_a? que compara o tipo de dados e retorna um valor booleano. A única diferença é o nome do método. No entanto, pode ser preferível porque é um pouco mais fácil para os desenvolvedores lerem e compreenderem. Atualize o exemplo anterior com is_a?:
|
1 2 |
puts 55.is_a?(Float) puts 55.is_a?(Integer) |
Considerações Finais
Trabalhar com qualquer linguagem de programação exige uma boa compreensão dos tipos de dados que ela suporta. Neste guia, exploramos os tipos de dados mais comuns usados na programação Ruby. Discutimos e demonstramos inteiros, floats, strings, símbolos, booleanos e hashes (com exemplos).
Confira mais tutoriais do nosso blog que ajudarão você a explorar o Ruby:
- Instalando o Ruby on Rails com RVM no Ubuntu 20.04
- Configurando o Ruby on Rails com PostgreSQL
- Usando o MySQL com um aplicativo Ruby on Rails no Ubuntu 21.04
- Explorando o CloudSigma PaaS: Como utilizar serviços de hospedagem PaaS para Ruby?
Boa computação!




































Comentários
Nenhum comentário ainda. Seja o primeiro.