Ruby - Variáveis, Constantes e Literais

As variáveis ​​são os locais da memória, que contêm todos os dados a serem usados ​​por qualquer programa.

Existem cinco tipos de variáveis ​​suportadas por Ruby. Você também já fez uma pequena descrição dessas variáveis ​​no capítulo anterior. Esses cinco tipos de variáveis ​​são explicados neste capítulo.

Variáveis ​​Globais Ruby

Variáveis ​​globais começam com $. Variáveis ​​globais não inicializadas têm o valor nil e produzem avisos com a opção -w.

A atribuição a variáveis ​​globais altera o status global. Não é recomendado usar variáveis ​​globais. Eles tornam os programas enigmáticos.

Aqui está um exemplo que mostra o uso da variável global.

#!/usr/bin/ruby

$global_variable = 10
class Class1
   def print_global
      puts "Global variable in Class1 is #$global_variable"
   end
end
class Class2
   def print_global
      puts "Global variable in Class2 is #$global_variable"
   end
end

class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global

Aqui $ global_variable é uma variável global. Isso produzirá o seguinte resultado -

NOTE - Em Ruby, você PODE acessar o valor de qualquer variável ou constante colocando um caractere hash (#) antes dessa variável ou constante.

Global variable in Class1 is 10
Global variable in Class2 is 10

Variáveis ​​de instância Ruby

Variáveis ​​de instância começam com @. Variáveis ​​de instância não inicializadas têm o valor nil e produzem avisos com a opção -w.

Aqui está um exemplo que mostra o uso de Variáveis ​​de instância.

#!/usr/bin/ruby

class Customer
   def initialize(id, name, addr)
      @cust_id = id
      @cust_name = name
      @cust_addr = addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
   end
end

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.display_details()
cust2.display_details()

Aqui, @cust_id, @cust_name e @cust_addr são variáveis ​​de instância. Isso produzirá o seguinte resultado -

Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala

Variáveis ​​de classe Ruby

Variáveis ​​de classe começam com @@ e devem ser inicializadas antes que possam ser usadas nas definições de método.

Fazer referência a uma variável de classe não inicializada produz um erro. Variáveis ​​de classe são compartilhadas entre descendentes da classe ou módulo em que as variáveis ​​de classe são definidas.

Substituir variáveis ​​de classe produz avisos com a opção -w.

Aqui está um exemplo que mostra o uso da variável de classe -

#!/usr/bin/ruby

class Customer
   @@no_of_customers = 0
   def initialize(id, name, addr)
      @cust_id = id
      @cust_name = name
      @cust_addr = addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
   end
   def total_no_of_customers()
      @@no_of_customers += 1
      puts "Total number of customers: #@@no_of_customers"
   end
end

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()

Aqui @@ no_of_customers é uma variável de classe. Isso produzirá o seguinte resultado -

Total number of customers: 1
Total number of customers: 2

Variáveis ​​locais Ruby

Variáveis ​​locais começam com uma letra minúscula ou _. O escopo de uma variável local varia de class, module, def ou do até o final correspondente ou da chave de abertura de um bloco até sua chave de fechamento {}.

Quando uma variável local não inicializada é referenciada, ela é interpretada como uma chamada a um método sem argumentos.

A atribuição a variáveis ​​locais não inicializadas também serve como declaração de variável. As variáveis ​​passam a existir até que o final do escopo atual seja alcançado. O tempo de vida das variáveis ​​locais é determinado quando Ruby analisa o programa.

No exemplo acima, as variáveis ​​locais são id, name e addr.

Ruby Constants

As constantes começam com uma letra maiúscula. As constantes definidas em uma classe ou módulo podem ser acessadas de dentro dessa classe ou módulo, e aquelas definidas fora de uma classe ou módulo podem ser acessadas globalmente.

As constantes não podem ser definidas nos métodos. Fazer referência a uma constante não inicializada produz um erro. Fazer uma atribuição a uma constante que já foi inicializada produz um aviso.

#!/usr/bin/ruby

class Example
   VAR1 = 100
   VAR2 = 200
   def show
      puts "Value of first Constant is #{VAR1}"
      puts "Value of second Constant is #{VAR2}"
   end
end

# Create Objects
object = Example.new()
object.show

Aqui VAR1 e VAR2 são constantes. Isso produzirá o seguinte resultado -

Value of first Constant is 100
Value of second Constant is 200

Pseudo-variáveis ​​Ruby

São variáveis ​​especiais que têm a aparência de variáveis ​​locais, mas se comportam como constantes. Você não pode atribuir nenhum valor a essas variáveis.

  • self - O objeto receptor do método atual.

  • true - Valor que representa verdadeiro.

  • false - Valor que representa falso.

  • nil - Valor que representa indefinido.

  • __FILE__ - O nome do arquivo de origem atual.

  • __LINE__ - O número da linha atual no arquivo de origem.

Literais básicos de Ruby

As regras que Ruby usa para literais são simples e intuitivas. Esta seção explica todos os literais básicos do Ruby.

Números inteiros

Ruby suporta números inteiros. Um número inteiro pode variar de -2 30 a 2 30-1 ou -2 62 a 2 62-1 . Os inteiros dentro deste intervalo são objetos da classe Fixnum e os inteiros fora deste intervalo são armazenados em objetos da classe Bignum .

Você escreve números inteiros usando um sinal opcional, um indicador de base opcional (0 para octal, 0x para hex ou 0b para binário), seguido por uma sequência de dígitos na base apropriada. Os caracteres sublinhados são ignorados na sequência de dígitos.

Você também pode obter o valor inteiro, correspondendo a um caractere ASCII ou escapar da sequência precedendo-o com um ponto de interrogação.

Exemplo

123                  # Fixnum decimal
1_234                # Fixnum decimal with underline
-500                 # Negative Fixnum
0377                 # octal
0xff                 # hexadecimal
0b1011               # binary
?a                   # character code for 'a'
?\n                  # code for a newline (0x0a)
12345678901234567890 # Bignum

NOTE - Classe e objetos são explicados em um capítulo separado deste tutorial.

Números Flutuantes

Ruby suporta números flutuantes. Eles também são números, mas com decimais. Os números de ponto flutuante são objetos da classe Float e podem ser qualquer um dos seguintes -

Exemplo

123.4                # floating point value
1.0e6                # scientific notation
4E20                 # dot not required
4e+20                # sign before exponential

Literais de string

As strings Ruby são simplesmente sequências de bytes de 8 bits e são objetos da classe String. Strings entre aspas duplas permitem substituição e notação de barra invertida, mas strings entre aspas simples não permitem substituição e permitem notação de barra invertida apenas para \\ e \ '

Exemplo

#!/usr/bin/ruby -w

puts 'escape using "\\"';
puts 'That\'s right';

Isso produzirá o seguinte resultado -

escape using "\"
That's right

Você pode substituir o valor de qualquer expressão Ruby em uma string usando a sequência #{ expr }. Aqui, expr pode ser qualquer expressão rubi.

#!/usr/bin/ruby -w

puts "Multiplication Value : #{24*60*60}";

Isso produzirá o seguinte resultado -

Multiplication Value : 86400

Notações de barra invertida

A seguir está a lista de notações de barra invertida suportadas por Ruby -

Notação Personagem representado
\ n Nova linha (0x0a)
\ r Retorno de carro (0x0d)
\ f Formfeed (0x0c)
\ b Backspace (0x08)
\uma Bell (0x07)
\ e Escape (0x1b)
\ s Espaço (0x20)
\ nnn Notação octal (n sendo 0-7)
\ xnn Notação hexadecimal (n sendo 0-9, af ou AF)
\ cx, \ Cx Control-x
\ Mx Meta-x (c | 0x80)
\ M- \ Cx Meta-Control-x
\ x Personagem x

Para obter mais detalhes sobre Ruby Strings, leia Ruby Strings .

Ruby Arrays

Literais de Ruby Array são criados colocando uma série separada por vírgulas de referências de objetos entre os colchetes. Uma vírgula final é ignorada.

Exemplo

#!/usr/bin/ruby

ary = [  "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|
   puts i
end

Isso produzirá o seguinte resultado -

fred
10
3.14
This is a string
last element

Para obter mais detalhes sobre Ruby Arrays, consulte Ruby Arrays .

Ruby Hashes

Um Ruby Hash literal é criado colocando uma lista de pares de chave / valor entre colchetes, com uma vírgula ou a sequência => entre a chave e o valor. Uma vírgula final é ignorada.

Exemplo

#!/usr/bin/ruby

hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
   print key, " is ", value, "\n"
end

Isso produzirá o seguinte resultado -

red is 3840
green is 240
blue is 15

Para obter mais detalhes sobre Ruby Hashes, vá até Ruby Hashes .

Ruby Ranges

Um intervalo representa um intervalo que é um conjunto de valores com um início e um fim. Os intervalos podem ser construídos usando os literais s..e e s ... e, ou com Range.new.

Faixas construídas usando .. vão do início ao fim inclusive. Aqueles criados usando ... excluem o valor final. Quando usado como um iterador, os intervalos retornam cada valor na sequência.

Um intervalo (1..5) significa que inclui 1, 2, 3, 4, 5 valores e um intervalo (1 ... 5) significa que inclui 1, 2, 3, 4 valores.

Exemplo

#!/usr/bin/ruby

(10..15).each do |n| 
   print n, ' ' 
end

Isso produzirá o seguinte resultado -

10 11 12 13 14 15

Para obter mais detalhes sobre Ruby Ranges, vá até Ruby Ranges .