Folha de Consulta Ruby
Última atualização
Hello World e executar código
Ruby não precisa de código repetitivo - uma única linha já roda.
| Operação | Sintaxe |
|---|---|
| Exibir com quebra de linha | puts "Hello, World!" |
| Exibir sem quebra de linha | print "Hello" |
| Inspecionar um valor | p [1, 2, 3] |
| Interpolação de string | puts "Hi #{name}" |
| Comentário | # this is a comment |
| Comentário de várias linhas | =begin ... =end |
| Executar um arquivo | ruby app.rb |
| Shell interativo | irb |
Variáveis e tipos
Ruby é tipado dinamicamente; tudo é um objeto.
| Operação | Sintaxe |
|---|---|
| Variável local | age = 30 |
| Constante | PI = 3.14 |
| Variável de instância | @name = "Ada" |
| Variável global | $count = 0 |
| Símbolo | :status |
| Nil / booleano | nil, true, false |
| Verificar tipo | 42.class retorna Integer |
| Converter tipo | "42".to_i, 42.to_s, "3.5".to_f |
Strings
Strings são objetos mutáveis com um rico conjunto de métodos.
| Operação | Sintaxe |
|---|---|
| Comprimento | "hello".length |
| Maiúsculas / minúsculas | s.upcase, s.downcase |
| Remover espaços em branco | s.strip |
| Substituir | s.gsub("a", "b") |
| Dividir em array | "a,b,c".split(",") |
| Inclui substring | s.include?("ell") |
| Fatiar caracteres | s[0..2] |
| Concatenar | "foo" + "bar", s << "!" |
| Repetir | "ab" * 3 |
| Formatar | format("%05d", 42) |
Arrays
Coleções ordenadas e indexadas por inteiros.
| Operação | Sintaxe |
|---|---|
| Criar | nums = [1, 2, 3] |
| Acessar por índice | nums[0], nums[-1] |
| Adicionar ao final | nums.push(4), nums << 4 |
| Remover do final | nums.pop |
| Comprimento | nums.length |
| Map | nums.map { |n| n * 2 } |
| Filtrar | nums.select { |n| n.even? } |
| Reduzir | nums.reduce(0) { |sum, n| sum + n } |
| Ordenar | nums.sort |
| Juntar em string | nums.join(", ") |
Hashes
Coleções chave-valor, geralmente com chaves de símbolos.
| Operação | Sintaxe |
|---|---|
| Criar | user = { name: "Ada", age: 30 } |
| Acessar valor | user[:name] |
| Definir valor | user[:email] = "a@x.com" |
| Verificar chave | user.key?(:name) |
| Excluir chave | user.delete(:age) |
| Chaves / valores | user.keys, user.values |
| Iterar | user.each { |k, v| puts "#{k}: #{v}" } |
| Valor padrão | Hash.new(0) |
| Mesclar | h1.merge(h2) |
Controle de fluxo
Condicionais e laços; note os modificadores no final da linha em Ruby.
| Operação | Sintaxe |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| If em linha (modificador) | puts "hi" if ready |
| Unless | unless done ... end |
| Ternário | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| Laço while | while i < 10 ... end |
| Laço until | until done ... end |
| Times | 5.times { |i| puts i } |
| Iteração de range | (1..5).each { |i| puts i } |
| Break / next | break, next |
Métodos
A última expressão é retornada implicitamente.
| Operação | Sintaxe |
|---|---|
| Definir um método | def add(a, b) ... end |
| Retorno implícito | def square(x) x * x end |
| Argumento padrão | def greet(name = "World") ... end |
| Argumentos nomeados | def box(w:, h:) ... end |
| Splat (variádico) | def sum(*nums) ... end |
| Método terminando em ? | def valid? ... end |
| Método terminando em ! | def normalize! ... end |
| Chamar sem parênteses | greet "Ada" |
Blocos, procs e lambdas
Blocos são trechos de código passados a métodos; procs e lambdas os armazenam.
| Operação | Sintaxe |
|---|---|
| Bloco (chaves) | [1, 2].each { |n| puts n } |
| Bloco (do/end) | [1, 2].each do |n| puts n end |
| Yield para um bloco | def run; yield; end |
| Verificar se há bloco | block_given? |
| Capturar bloco como parâmetro | def run(&blk); blk.call; end |
| Criar um proc | square = proc { |x| x * x } |
| Criar uma lambda | square = ->(x) { x * x } |
| Chamar um proc / lambda | square.call(3), square.(3) |
Classes e módulos
Classes guardam estado e comportamento; módulos incorporam métodos compartilhados.
| Operação | Sintaxe |
|---|---|
| Definir uma classe | class Point ... end |
| Construtor | def initialize(x, y) @x = x; @y = y; end |
| Método de instância | def dist ... end |
| Atalhos de acesso | attr_accessor :x, :y |
| Criar instância | p = Point.new(1, 2) |
| Herdar | class Circle < Shape ... end |
| Método de classe | def self.origin ... end |
| Definir um módulo | module Drawable ... end |
| Incorporar um módulo | include Drawable |
| Chamar super | super(args) |
A sintaxe de Ruby que você mais usa, em uma única página. Esta folha de consulta Ruby é uma referência rápida para o núcleo da linguagem - variáveis e tipos, strings, arrays e hashes, controle de fluxo, métodos, e os blocos, procs e lambdas que tornam Ruby tão expressivo.
Tudo aqui é Ruby puro e roda em qualquer interpretador padrão. Copie o que precisar ou teste cada trecho ao vivo no playground de Ruby - sem necessidade de instalação.
Perguntas frequentes sobre a folha de consulta Ruby
Esta folha de consulta Ruby é gratuita?
Qual é a diferença entre um bloco, um proc e uma lambda?
{ ... } ou do ... end - ele não é um objeto por conta própria. Um proc envolve um bloco em um objeto chamável que você pode armazenar e passar adiante. Uma lambda é um proc especial que verifica a contagem de argumentos de forma estrita e trata o return como um retorno da própria lambda, enquanto um proc comum retorna do método que o contém.O que são símbolos em Ruby?
:name é um identificador imutável e reutilizável. Como o mesmo símbolo sempre aponta para o mesmo objeto na memória, os símbolos são mais rápidos e mais eficientes em memória que as strings para coisas como chaves de hash e nomes de métodos - por isso você costuma ver hashes escritos como { name: "Ada" }.