Comandos e snippets de Ruby

Comandos e snippets essenciais de Ruby

Um guia de consulta com sintaxe, comandos e trechos de código Ruby para meus estudos e para o uso no dia a dia.

Fundamentos de Ruby

Executar scripts Ruby

Terminal
1ruby script.rb

Console interativo do Ruby (IRB)

bash snippet
1irb
Use puts para depurar código no IRB:
ruby snippet
1irb(main):001:0> puts "Olá, Ruby!"
2Olá, Ruby!
3=> nil

Sintaxe básica

ruby snippet
1# Variáveis
2nome = "Ruby"
3idade = 30
4incrivel = true
5
6# Interpolação de strings
7puts "Olá, #{nome}!"
8
9# Estruturas condicionais
10if idade > 20
11 puts "Você tem mais de 20 anos"
12elsif idade == 20
13 puts "Você tem exatamente 20 anos"
14else
15 puts "Você tem menos de 20 anos"
16end
17
18# Operador ternário
19status = incrivel ? "Incrível" : "Não é incrível"

Estruturas de dados

Arrays

ruby snippet
1# Criação de arrays
2frutas = ["maçã", "banana", "laranja"]
3numeros = [1, 2, 3, 4, 5]
4misto = [1, "dois", :tres, 4.0]
5
6# Operações com arrays
7frutas << "manga" # Adiciona ao final
8frutas.push("morango") # Também adiciona ao final
9frutas.unshift("kiwi") # Adiciona no início
10frutas.pop # Remove do final
11frutas.shift # Remove do início
12frutas[2] # Acessa pelo índice
13frutas[-1] # Acessa o último item
14frutas[1..3] # Seleciona um intervalo
Arrays em Ruby são dinâmicos e podem armazenar objetos de tipos diferentes.

Hashes

ruby snippet
1# Criação de hashes
2pessoa = { "nome" => "João", "idade" => 30 }
3usuario = { nome: "Jane", idade: 25 } # Sintaxe com símbolos
4
5# Operações com hashes
6pessoa["profissao"] = "Desenvolvedor" # Adiciona um par de chave e valor
7usuario[:email] = "jane@example.com" # Adiciona usando uma chave do tipo símbolo
8pessoa["idade"] # Acessa um valor
9usuario.keys # Obtém todas as chaves
10usuario.values # Obtém todos os valores
11usuario.each { |chave, valor| puts "#{chave}: #{valor}" } # Iteração

Fluxo de controle

Laços de repetição

ruby snippet
1# Laço while
2i = 0
3while i < 5
4 puts i
5 i += 1
6end
7
8# Laço for com intervalo
9for i in 0..4
10 puts i
11end
12
13# Iterador each
14[1, 2, 3].each do |numero|
15 puts numero
16end
17
18# Iterador times
195.times { |i| puts i }
20
21# Laço until
22j = 0
23until j >= 5
24 puts j
25 j += 1
26end

Iteradores e blocos

ruby snippet
1# Bloco em uma linha
2[1, 2, 3].map { |n| n * 2 } # Retorna [2, 4, 6]
3
4# Bloco em várias linhas
5[1, 2, 3].each do |numero|
6 quadrado = numero * numero
7 puts "O quadrado de #{numero} é #{quadrado}"
8end
9
10# Iteradores comuns
11[1, 2, 3, 4].select { |n| n.even? } # Retorna [2, 4]
12[1, 2, 3, 4].reject { |n| n.even? } # Retorna [1, 3]
13[1, 2, 3].reduce(0) { |soma, n| soma + n } # Retorna 6
Ruby inclui muitos iteradores que tornam o trabalho com coleções simples e expressivo.

Métodos e funções

Definir métodos

ruby snippet
1# Método básico
2def saudar(nome)
3 "Olá, #{nome}!"
4end
5
6# Método com parâmetro padrão
7def saudar_com_padrao(nome = "Mundo")
8 "Olá, #{nome}!"
9end
10
11# Método com argumentos nomeados
12def apresentar(nome:, idade:, profissao: "Desenvolvedor")
13 "Conheça #{nome}, #{idade} anos, #{profissao}."
14end
15
16# Chamadas dos métodos
17saudar("Ruby") # "Olá, Ruby!"
18saudar_com_padrao # "Olá, Mundo!"
19apresentar(nome: "João", idade: 30) # "Conheça João, 30 anos, Desenvolvedor."

Lambda e Proc

ruby snippet
1# Lambda
2quadrado = ->(x) { x * x }
3quadrado.call(5) # Retorna 25
4
5# Proc
6saudacao = Proc.new { |nome| puts "Olá, #{nome}!" }
7saudacao.call("Ruby") # Exibe "Olá, Ruby!"
8
9# Passagem para métodos
10def operacao_matematica(numeros, operacao)
11 numeros.map(&operacao)
12end
13
14operacao_matematica([1, 2, 3], quadrado) # Retorna [1, 4, 9]

Ruby orientado a objetos

Classes e objetos

ruby snippet
1class Pessoa
2 attr_accessor :nome, :idade
3
4 def initialize(nome, idade)
5 @nome = nome
6 @idade = idade
7 end
8
9 def apresentar
10 "Olá, sou #{@nome} e tenho #{@idade} anos."
11 end
12
13 def aniversario
14 @idade += 1
15 "Feliz aniversário! Agora tenho #{@idade} anos."
16 end
17end
18
19# Cria e utiliza objetos
20joao = Pessoa.new("João", 30)
21puts joao.apresentar
22puts joao.aniversario
23joao.nome = "João Silva"
attr_accessor cria métodos de leitura e escrita. Use attr_reader para atributos somente de leitura e attr_writer para atributos somente de escrita.

Herança

ruby snippet
1class Animal
2 def falar
3 "Um som genérico de animal"
4 end
5end
6
7class Cachorro < Animal
8 def falar
9 "Au!"
10 end
11end
12
13class Gato < Animal
14 def falar
15 "Miau!"
16 end
17end
18
19fido = Cachorro.new
20mingau = Gato.new
21puts fido.falar # "Au!"
22puts mingau.falar # "Miau!"

Módulos e mixins

ruby snippet
1module Voador
2 def voar
3 "Estou voando!"
4 end
5end
6
7module Nadador
8 def nadar
9 "Estou nadando!"
10 end
11end
12
13class Passaro
14 include Voador
15end
16
17class Pato
18 include Voador
19 include Nadador
20end
21
22pardal = Passaro.new
23pato = Pato.new
24puts pardal.voar # "Estou voando!"
25puts pato.voar # "Estou voando!"
26puts pato.nadar # "Estou nadando!"
Módulos são úteis para compartilhar funcionalidades entre classes que não possuem relação direta. Eles ajudam a evitar os problemas da herança múltipla.

Operações com arquivos

ruby snippet
1# Lê um arquivo linha por linha
2File.open("dados.txt", "r") do |arquivo|
3 arquivo.each_line do |linha|
4 puts linha
5 end
6end
7
8# Escreve em um arquivo
9File.open("saida.txt", "w") do |arquivo|
10 arquivo.puts "Olá, Ruby!"
11 arquivo.puts "Esta é uma nova linha."
12end
13
14# Lê todo o conteúdo do arquivo
15conteudo = File.read("dados.txt")
16
17# Verifica se o arquivo existe
18File.exist?("dados.txt")
Sempre feche os arquivos depois de usá-los. Ao usar blocos com File.open, o Ruby fecha o arquivo automaticamente quando o bloco termina.

Tratamento de exceções

ruby snippet
1begin
2 # Código que pode gerar uma exceção
3 resultado = 10 / 0
4rescue ZeroDivisionError => erro
5 puts "Erro: #{erro.message}"
6rescue => erro
7 puts "Ocorreu outro erro: #{erro.message}"
8else
9 puts "Nenhum erro ocorreu"
10ensure
11 puts "Este código sempre é executado"
12end
13
14# Exceções personalizadas
15class ErroPersonalizado < StandardError
16 def initialize(mensagem = "Ocorreu um erro personalizado")
17 super
18 end
19end
20
21begin
22 raise ErroPersonalizado.new("Algo deu errado")
23rescue ErroPersonalizado => erro
24 puts erro.message
25end

Ferramentas úteis do Ruby

RubyGems

bash snippet
1# Instala uma gem
2gem install nokogiri
3
4# Lista as gems instaladas
5gem list
6
7# Atualiza uma gem
8gem update rails
9
10# Remove uma gem
11gem uninstall nokogiri

Bundler

bash snippet
1# Instala o Bundler
2gem install bundler
3
4# Instala as gems definidas no Gemfile
5bundle install
6
7# Atualiza as gems
8bundle update
9
10# Executa um comando no contexto do bundle
11bundle exec rspec
O Bundler ajuda a gerenciar as dependências de gems das aplicações Ruby.

Expressões regulares

ruby snippet
1# Correspondência básica de padrão
2"olá" =~ /lá/ # Retorna 1, o índice da correspondência
3
4# Padrão com modificador
5"Olá, mundo" =~ /olá/i # Ignora diferenças entre maiúsculas e minúsculas
6
7# Métodos de string com expressão regular
8"hello".gsub(/[aeiou]/, '*') # "h*ll*"
9"olá mundo".scan(/\w+/) # ["olá", "mundo"]
10
11# Grupos de correspondência
12dados = "João Silva".match(/(\w+) (\w+)/)
13primeiro_nome = dados[1] # "João"
14sobrenome = dados[2] # "Silva"
Bom código com Ruby!