14 de maio de 2020 • 5 min de leitura
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
- Boolean
- String - Representação de texto
- Symbol - São objetos mais leves dentro do ruby
- Number
- Array
- 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
- Local Variables
- Instance Variables
- Class Variables
- Global Variables
- 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