Aprenda / Ruby on Rails

FundamentosAula 1 de 2018 min0% da trilha

Ruby essencial

Só o suficiente de sintaxe Ruby pra ler Rails com confiança — não é um curso de Ruby inteiro.

Esta lição não ensina Ruby do zero absoluto — ensina o vocabulário mínimo pra você ler código Rails sem travar em cada linha. O resto você aprende vendo Rails de verdade, nas próximas lições.

Tudo é objeto, até número

3.times { puts "oi" }   # números têm métodos
"oi".upcase             # "OI" — string tem método, sem função solta upcase("oi")
5.even?                 # false — "?" no final é convenção pra método que retorna booleano

Blocos — a coisa mais "Ruby" da linguagem

Um bloco é uma função anônima passada pra outro método, com duas sintaxes equivalentes: { } pra uma linha, do...end pra várias.

[1, 2, 3].map { |n| n * 2 }   # => [2, 4, 6]

[1, 2, 3].map do |n|
  n * 2
end                            # => [2, 4, 6] — mesmo resultado, sintaxe diferente

Hash e símbolo

Um Hash é um objeto chave-valor (como um dicionário). Um símbolo (:nome) é um texto imutável usado como identificador — Rails usa símbolo pra chave de hash o tempo todo.

usuario = { nome: "Ana", ativo: true }
usuario[:nome]        # "Ana"
usuario[:ativo]        # true

Classe — o parecido com o que você já sabe

class Usuario
  attr_reader :nome        # gera um "getter" automático — sem escrever o método na mão

  def initialize(nome)     # o "construtor"
    @nome = nome            # @ = atributo de instância (equivalente a this.nome)
  end
end

Usuario.new("Ana").nome

? e ! — convenções, não sintaxe especial

Um método terminado em ? retorna booleano por convenção (ativo?). Um método terminado em ! é a versão "perigosa" — muda o objeto no lugar em vez de retornar uma cópia (sort retorna nova lista; sort! reordena a lista original).

Exercício

Escreva uma classe Produto com attr_reader :nome, :preco e um método caro? que retorna true se preco for maior que 100.

Quiz rápido

O que o @ antes de um nome de variável significa em Ruby?
Qual a diferença entre sort e sort! numa lista?