Aprendendo o Básico de Ruby

Aprendendo o Basico de Ruby

Introdução

O Ruby é uma linguagem dinâmica, orientada a objeto e de código aberto. Criada no Japão em 1993.

Executando códigos com o interpretador Ruby e com o IRB

Caso já tenha instalado o Ruby na máquina apenas execute o comando a seguir:

>ruby --version
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x64-mingw32]

Para fazer um teste com o IRB:

>irb
irb(main):001:0> 1+6                                                                                                    => 7
irb(main):002:0> puts "Olá Mundo"                                                                                       Olá Mundo
=> nil
irb(main):003:0> 

Executando em um arquivo .rb

Crie um arquivo introducao.rb e coloque no arquivo a seguinte informação:

puts 1 + 5
puts "Olá mundo!"
puts "Testando o ruby"

Para executar no terminal só digitar o comando ruby e o nome do arquivo, nesse caso seria ruby introducao.rb a saida do arquivo será:

$ ruby introducao.rb 
6
Olá mundo!     
Testando o ruby

Tipos de dados em Ruby

  1. Boolean
  2. String - Representação de texto
  3. Symbol - São objetos mais leves dentro do ruby
  4. Number
  5. Array
  6. Hashes
# BOOLEAN

puts true.class
puts false.class
puts nil.class


if nil
  puts "nil é verdadeiro"
else
  puts "nil é falso"
end

if true
  puts "true é verdadeiro"
else
  puts "true é falso"
end

if false
  puts "false é verdadeiro"
else
  puts "false é falso"
end

if "teste"
  puts "a string 'teste' é verdadeira"
else
  puts "a string 'teste' é falsa"
end 

Saída ao executar o comando ruby booleans.rb

$ ruby 313booleans.rb 
313booleans.rb:30: warning: string literal in condition
TrueClass
FalseClass
NilClass
nil é falso
true é verdadeiro
false é falso
a string 'teste' é verdadeira

String

# STRING
puts "qualquer texto".class
puts 'qualquer texto'.class

Symbol

São mais leves e vai ser um substituto das strings, sendo que a String é muito mais pesada em comparação a Symbol. Se quiser representar um valor dentro de um hash. Mas ao por que da troca de uma String por um Symbol? Quando o Symbol é criado o Ruby se encarrega de verificar se já foi utilizado aquele Symbol antes e não cria uma nova instancia da class Symbol, utiliza o mesmo Symbol na memoria. Verifique o exemplo abaixo usando Symbol e String:

# SYMBOL
puts :eu_sou_um_simbol.class

## String
puts "eu_sou_um_simbol".object_id
puts "eu_sou_um_simbol".object_id
puts "eu_sou_um_simbol".object_id
puts "eu_sou_um_simbol".object_id

## Symbol
puts :eu_sou_um_simbol.object_id
puts :eu_sou_um_simbol.object_id
puts :eu_sou_um_simbol.object_id
puts :eu_sou_um_simbol.object_id

## comparacao
puts :eu_sou_um_simbol.methods.size
puts "eu_sou_um_simbol".methods.size

Saída

$ ruby symbol.rb
Symbol
60
80
100
120
1064028
1064028
1064028
1064028
86
183

Number

# NUMBER
# Integer
# Float

puts 25.class
puts 80.90.class

puts 1_000_000.class
puts 1000000.class

Array

# ARRAY
names = ["Gabriel", "Pedro", "Paula"]
puts names.class
puts names


any_type = ["Gabriel", 15, false]
puts any_type.class
puts any_type

puts any_type[2]

Hashes

# HASHES
colors = { green: "Verde", black: "Preto", yellow: "Amarelo" }
puts colors.class
puts colors[:green]
puts colors[:black]
puts colors[:yellow]

Variáveis e Constantes em Ruby

  1. Local Variables
  2. Instance Variables
  3. Class Variables
  4. Global Variables
  5. Constants

Local Variables

# LOCAL VARIABLES
user_fullname = "Gabriel Jony"
puts "Valor da variavel 'user_fullname' no escopo principal: #{user_fullname}"

# declarando o método 1
def method_1
  user_fullname = "Paula Santos"
  puts "Valor da variavel 'user_fullname' no escopo method_1: #{user_fullname}"
end
# chamando o método 1
method_1

def method_2
  user_fullname = "Laura Silva"
  puts "Valor da variavel 'user_fullname' no escopo method_2: #{user_fullname}"
end
method_2

Instance Variables

# INSTANCE VARIABLES
class User

  def initialize(name, age)
    @name = name
    @age = age
  end

  def info
    puts "Nome: #{@name} - Idade: #{@age} anos"
  end

end


user = User.new("Gabriel Jony", 25)
user.info

Class Variables

# CLASS VARIABLES
class User

  def initialize(name, age)
    @name = name
    @age = age
    @@last_user = "Nome: #{@name} - Idade: #{@age}"
  end

  def info
    puts "Nome: #{@name} - Idade: #{@age}"
  end

  def last_user_info
    puts @@last_user
  end

end


user1 = User.new("Gabriel Jony", 25)
user1.last_user_info

user2 = User.new("Laura Silva", 89)
user2.last_user_info

user3 = User.new("Maria Santos", 30)
user3.last_user_info

user4 = User.new("Pedro Silva", 16)
user4.last_user_info

user1.last_user_info
user2.last_user_info
user3.last_user_info
user4.last_user_info

Global Variables

# GLOBAL VARIABLES
$color = "VERMELHO"
puts "valor da variavel global $color no escopo principal: #{$color}"

def method_1
  puts "valor da variavel global $color no escopo method_1: #{$color}"
end 
method_1

class User
  def initialize(name, age)
    @name = name
    @age = age
    $color = "AZUL"
  end

  def print_global_color
    puts "valor da variavel global $color dentro do metodo da classe User: #{$color}"
  end
end

user1 = User.new("Paulo Miranda", 30)
user1.print_global_color

puts "valor da variavel global $color no escopo principal: #{$color}"
method_1

# Algumas variaveis globais já definidas no ruby
puts $LOAD_PATH

Constants

# CONSTANTS

COLOR = "LARANJA"
COLOR_2 = "PRETO"
# puts "valor da CONSTANTE COLOR no escopo principal: #{COLOR}"

# def method_1
#   puts "valor da CONSTANTE COLOR no escopo method_1: #{COLOR}"
# end 
# method_1


class User
  COLOR = "Amarelo"

  def initialize(name, age)
    @name = name
    @age = age
  end

  def print_constant
    puts "valor da CONSTANTE COLOR_2 dentro da classe User caso não encontra Vai verificar fora: #{COLOR_2}"
    puts "valor da CONSTANTE COLOR dentro da classe User: #{COLOR}"
    puts "valor da CONSTANTE COLOR dentro da classe User: #{User::COLOR}"
    puts "valor da CONSTANTE COLOR fora da classe User modo 2: #{::COLOR}"
  end
end

# user1 = User.new("Paulo Miranda", 30)
# user1.print_constant

# puts "valor da CONSTANTE COLOR no escopo principal: #{COLOR}"
# puts "valor da CONSTANTE COLOR no escopo principal modo 2: #{::COLOR}"
# puts "valor da CONSTANTE COLOR dentro da classe User: #{User::COLOR}"

puts "Alterando cor da constante"
COLOR = "VERDE"
puts "valor da CONSTANTE COLOR no escopo principal: #{COLOR}"

Classes e Módulos

# #====================================
# # Class
# #====================================

# class User

#   # initialize é o construtor da class
#   def initialize(name, age)
#     @name = name
#     @age = age
#   end

#   def info
#     puts "Name: #{@name} - Age: #{@age}"
#   end

# end

# user = User.new("Ana Maria", 55)
# user.info


# #====================================
# # Modulos
# #====================================


# module MyMethods
#   def say_hello
#     puts "HELLO!!"
#   end

#   def say_goodbye
#     puts "GOODBYE!!"
#   end
# end

# class User2
#   include MyMethods
# end

# class Admin
#   include MyMethods
# end



# user_2 = User2.new
# user_2.say_hello
# user_2.say_goodbye


# admin = Admin.new
# admin.say_goodbye
# admin.say_hello


# #====================================
# # Modulos para definir Constantes em comum
# #====================================

# module MyConstants
#   COLOR = "Red"
#   MUSIC = "Rock"
# end

# puts "Valor da contante COLOR do módulo MyConstants: #{MyConstants::COLOR}"
# puts "Valor da contante MUSIC do módulo MyConstants: #{MyConstants::MUSIC}"

# #====================================
# # Agrupar dentro de uma Class diversas Class
# #====================================

module Animals
  class Cat
    def info
      puts "Instanciou um GATO"
    end
  end

  class Dog
    def info
      puts "Instanciou um CACHORRO"
    end
  end
end

animal_1 = Animals::Cat.new
animal_2 = Animals::Dog.new

animal_1.info
animal_2.info

Comentários