Minicurso de
Ruby on Rails
Quem sou eu?
empreendedor
desenvolvedor web
desenvolvedor mobile
aspirante a desenvolvedor de games
designer
funcionário público
@zarathon | fb.com/zarathon
Agenda
O que é Ruby
Como funciona uma aplicação web
O que é Rails
Aprofundando no Rails
O poder do Scaffold
*Surpresa (Se der tempo)
O que é Ruby
Criada porYukihiro Matsumoto
Ideia concebida em 24 de fevereiro de 1993
Versão 1.0 lançada em 25 de dezembro de 1996
Última versão estável (até 29/11/2013) é a 2.0.0-p353
Orientada a objeto
Inspirada no Perl e Python
Open-Source
Porque programar em Ruby
 A simplicidade da linguagem afeta diretamente a
produtividade diária do desenvolvedor
 Linguagem de fácil leitura
 Tudo é um objeto
 Interactive Shell. Os comandos podem ser testados direto em
terminal, sem necessidade de escrever e “compilar" código
para ver se deu certo
 Comunidade tem o instinto de ajuda, e é fácil conseguir
soluções bem elaboradas
 Na versão 1.9+ o Ruby ganhou uma máquina virtual chamada
YARV (Yet Another Ruby Virtual Machine) que proporcionou
grande aumento de performance
Afinal, o que fazer com Ruby?
 Cálculos complexos
 Scripts de teste
 Importação de dados para Bancos de Dados
 Automatização de tarefas
 Outras linguagens (Frameworks, assim como o Rails)
 APIs
 Parser de logs
 Trabalhar com protocolos diversos
 Ler e escrever arquivos em diversos formatos
 Uma infinidade de coisas bem complexas
Um resumo da linguagem Ruby!
Tipos de Dados
‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’
Object é a classe mãe de todas as outras classes em Ruby
Um resumo da linguagem Ruby!
Tipos de Dados
‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’
 Numeric é uma classe abstrata que representa números
 Integer é uma classe que representa números inteiros
 Fixnum representa números inteiros de precisão fixa
 Bignum representa números inteiros de precisão
infinita, dependente apenas da memória disponível
 Float é uma classe que representa números de ponto
flutuante (números reais)
Um resumo da linguagem Ruby!
Tipos de Dados
‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’
String uma cadeia de caracteres. Pode ser
delimitado por apóstrofes (') ou aspas (").Tudo o
que há entre apóstrofes é interpretado literalmente,
entre aspas o programador deve se utilizar de
símbolos para representar caracteres específicos,
como em C. Exemplos: 'azul', "anbnc"
Um resumo da linguagem Ruby!
Tipos de Dados
‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’
Symbol é semelhante a uma string, mas dois símbolos iguais
possuem o mesmo endereço de memória, sendo assim é
ótimo para se utilizar como índice numa Hash. Porém,
devido à sua natureza, o coletor de lixo do Ruby não os
elimina. É definido com um sinal de dois pontos (:), por
exemplo, :nome
Um resumo da linguagem Ruby!
Tipos de Dados
‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’
Array são arrays dinâmicos, que podem ser usados
para representar matrizes e vetores. É delimitado
por colchetes ([]) e cada valor é separado por
vírgula. Exemplo: [4, 'azul', :termometro]
Um resumo da linguagem Ruby!
Tipos de Dados
‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’
Hash representa um vetor associativo, e, assim como as
Arrays, é dinâmica. É delimitada por chaves ({}), e o índice
precede o valor com um sinal '=>'. Exemplo: {:controller =>
'user', :action => 'index'}. Qualquer objeto pode ser um
índice, mas os mais usados são as Strings e os Symbols
Um resumo da linguagem Ruby!
Tipos de Dados
‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’
Regexp representa expressões regulares,
delimitadas por //. Funciona de forma
semelhante a Perl. Exemplo: /a|ae/
Um resumo da linguagem Ruby!
Declaração de variáveis
Um objeto em Ruby é declarado com uma atribuição comum:
var = 1
var = ‘foo’
var = new Class
var = new Class(parâmetros)
Um resumo da linguagem Ruby!
Declaração de variáveis
Uma variável local é declarada normalmente.Uma variável de
instância é declarada com um "@" no nome.Uma variável de
classe é declarada com "@@",e uma variável global é declarada
com "$".Variáveis que iniciam com uma letra maiúscula são
consideradas constantes.
local = "local»
@instancia = 42
@@classe = /f+/
$Pi = 3.1415926
Um resumo da linguagem Ruby!
Arrays
a = [1, 'oi', 3.14, 1, 2, [4, 5]]
a[2] # => 3.14
a.reverse # => [[4, 5], 2, 1, 3.14, 'oi', 1]
a.flatten.uniq # => [1, 'oi', 3.14, 2, 4, 5]
a.push(23) # a = [1, 'oi', 3.14, 1, 2, [4, 5], 23]
a << 22 # a = [1, 'oi', 3.14, 1, 2, [4, 5], 23, 22]
Um resumo da linguagem Ruby!
Hash
hash = {'água' => 'molhada', 'fogo' => 'quente'}
puts hash['fogo'] # "quente"
hash.each_pair do |chave, valor|
puts «#{chave} é #{valor}"
end
# Imprime:
# água é molhada
# fogo é quente
hash.delete_if {|chave, valor| chave == 'água'} # Apaga 'água' => 'molhada'
Um resumo da linguagem Ruby!
Blocos e Iteradores
Blocos de código (ou code blocks) são trechos de código que são
passados como parâmetros para métodos.Blocos são
extremamente usados em Ruby.
class Paises
@paises = ["Argentina", "Brasil", "Paraguai", "Uruguai"]
def self.each
for pais in @paises
yield pais
end
end
end
Paises.each do |pais|
puts "Olá, #{pais}!"
end
Um resumo da linguagem Ruby!
Blocos e Iteradores
Iterando em arrays usando blocos:
array = [1, 'oi', 3.14]
array.each do |item|
puts item
end
# => 1
# => 'oi’
# => 3.14
# Equivalente, usando chaves:
array.each { |item|
puts item
}
# => 1
# => 'oi’
# => 3.14
Um resumo da linguagem Ruby!
Blocos e Iteradores
Em Ruby,a estrutura de repetição for é apenas sugar syntax para
acessar o método each,existente em iteratores.
array = [1, 'oi', 3.14]
for item in array
puts item
end
# => 1
# => 'oi’
# => 3.14
Um resumo da linguagem Ruby!
Classes
O código a seguir define uma classe chamada Pessoa.Além de initialize,o
construtor para criar novos objetos,essa classe tem dois métodos: um que
sobre-escreve o operador de comparação > (maior),e sobre-escreve o método
to_s (assim o comando puts pode formatar a saída).Aqui attr_reader é um
exemplo de metaprogramação em Ruby: attr_reader define o método getter,
attr_writer define o método setter,e attr_accessor define ambos.Em Ruby,
todos os atributos são privados e todos os métodos públicos,por padrão.Ruby
permite definir opcionalmente o tipo de acesso usando três palavras-chave:
public (público),private (privado) e protected (protegido).Ruby não suporta
sobrecarga de métodos,mas suporta argumentos padrão,que podem ser
utilizados para o mesmo fim.Também,o último comando em um método é
considerado o seu valor de retorno,permitindo a omissão de um explícito
return.
Um resumo da linguagem Ruby!
Classes
class Pessoa
attr_reader :nome, :idade
def initialize(nome = "Desconhecido", idade)
@nome, @idade = nome, idade
end
def >(pessoa)
if self.idade > pessoa.idade
return true
else
return false
end
end
# Método usado pelo método puts() para formatar a saída
def to_s
«#@nome (#@idade anos)"
end
end
Um resumo da linguagem Ruby!
Herança
Ruby não suporta herança múltipla.Ao invés disso,Ruby usa Mixins para
emular herança múltipla:
class Pessoa < Mamifero # Herança de Mamifero
include Humano # Emulando herança múltipla
end
Fatos interessantes sobre Ruby
 Em Ruby você não precisa declarar o tipo de variável
explicitamente
 O uso de Meta-programação é fácil e faz parte da proposta da
linguagem
 Sobre-escrever métodos é fácil
 Sem getter e setters escritos manualmente
 Parêntese é opcional
 Monkey Patch é de fácil implementação
Gems em Ruby
 Abstraem funcionalidades básicas da aplicação para pedaços
separados, podendo assim serem usados em qualquer novo
projeto sem ter que duplicar código manualmente
 Ajudam a comunidade proporcionando funcionalidades que
são úteis a mais de uma pessoa
 Criar GEMs ajudam no entendimento de como Ruby funciona e
como implementar meta-programação
 São em geral GRATUITAS, apenas sendo pagas em casos muito
específicos relacionadas a regras de negócio de um cliente, por
exemplo
Como funciona uma aplicaçãoWeb?
O que é o Rails?
 Framework de código aberto desenvolvido em Ruby
 Tem por objetivo o desenvolvimento rápido e fácil de
aplicações web
 Convenção em vez de configuração
 Don’t Repeat Yourself (DRY)
 Criado em 2004 por David Heinemeier Hansson (DHH)
O que é o Rails?
Arquitetura do Rails - MVC
O que é o Rails?
Arquitetura do Rails - MVC
 A parte responsável por apresentar os resultados na página
web é chamado de Apresentação (View).
 A camada que faz o trabalho de tratar os parâmetros da
requisição e direcionar para as demais camadas é chamada de
Controladora (Controller).
 As classes que representam suas entidades e as que te ajudam
a armazenar e buscar os dados são chamadas de Modelo
(Model).
Porque usar Rails?
 Alta velocidade de desenvolvimento
 Flexibilidade
 Código legível e com qualidade
 Integração fácil entre times
 Deploy facilitado
 Boa documentação, vasto material na internet
 Apostila da Caelum gratuita sobre Rails
Onde estudar Rails?
 http://blog.caelum.com.br/ - Blog da Caelum
 http://andersonleite.com.br/ - Anderson Leite
 http://yehudakatz.com/ - Yehuda Katz
 http://fabiokung.com/ - Fabio Kung
 http://akitaonrails.com/ - Fábio Akita
 http://blog.plataformatec.com.br/ - José Valim
 http://nomedojogo.com/ - Carlos Brando
 http://devblog.avdi.org/ - Avdi Grimm
 http://blog.hasmanythrough.com/ - Josh Susser
 http://rubyflow.com/ - Agrega conteúdo de vários sites
Mãos no Rails
Instalar o rails
#gem install rails
Ajuda do rails
#rails --help
Criar uma aplicação
#rails new [caminho-da-app]
Rodar o servidor
#rails server
Estrutura do Rails App
 app - A maioria dos arquivos especícos da nossa aplicação ficam aqui (inclusive
todo o MVC, dividido em diretórios);
 bin - Executáveis do Rails e das gems instaladas;
 config - Configurações da aplicação;
 db - Migrações, esquema e outros arquivos relacionados ao banco de dados;
 doc - Documentação do sistema;
 lib - Bibliotecas auxiliares;
 log - Informações de log;
 public - Arquivos estáticos que serão servidos pela WEB;
 test - Testes da nossa aplicação;
 tmp - Arquivos temporários como cache e informações de sessões;
 vendor - Dependências e bibliotecas de terceiros.
Comandos do Rails
Criar um modelo
#rails generate model [nome do modelo]
Criar uma migração
#rails generate migration [nome da migração]
Criar um controller
#rails generate controller [nome do controller]
Desenvolvendo com Rails
Vamos criar uma aplicação CRUD agora
C reate
R ead
U pdate
D elete
Desenvolvendo com Rails
O poderoso SCAFFOLD
rails generate scaffold cliente nome:string idade:integer
Desenvolvendo com Rails
E agora?! O que fazer!?
 Estudar como Rails faz o relacionamento entre os
modelos
 Procurar pro grupos, recomendo o GURU-SP
 Ler um pouco mais a documentação do Rails
 Fazer um grupo de estudo
 Procurar a apostila da Caelum, é grátis!

Chegou o fim...
Dúvidas?
@zarathon | fb.com/zarathon

Minicurso de Rails - WTISC 2014

  • 1.
  • 2.
    Quem sou eu? empreendedor desenvolvedorweb desenvolvedor mobile aspirante a desenvolvedor de games designer funcionário público @zarathon | fb.com/zarathon
  • 3.
    Agenda O que éRuby Como funciona uma aplicação web O que é Rails Aprofundando no Rails O poder do Scaffold *Surpresa (Se der tempo)
  • 4.
    O que éRuby Criada porYukihiro Matsumoto Ideia concebida em 24 de fevereiro de 1993 Versão 1.0 lançada em 25 de dezembro de 1996 Última versão estável (até 29/11/2013) é a 2.0.0-p353 Orientada a objeto Inspirada no Perl e Python Open-Source
  • 5.
    Porque programar emRuby  A simplicidade da linguagem afeta diretamente a produtividade diária do desenvolvedor  Linguagem de fácil leitura  Tudo é um objeto  Interactive Shell. Os comandos podem ser testados direto em terminal, sem necessidade de escrever e “compilar" código para ver se deu certo  Comunidade tem o instinto de ajuda, e é fácil conseguir soluções bem elaboradas  Na versão 1.9+ o Ruby ganhou uma máquina virtual chamada YARV (Yet Another Ruby Virtual Machine) que proporcionou grande aumento de performance
  • 6.
    Afinal, o quefazer com Ruby?  Cálculos complexos  Scripts de teste  Importação de dados para Bancos de Dados  Automatização de tarefas  Outras linguagens (Frameworks, assim como o Rails)  APIs  Parser de logs  Trabalhar com protocolos diversos  Ler e escrever arquivos em diversos formatos  Uma infinidade de coisas bem complexas
  • 7.
    Um resumo dalinguagem Ruby! Tipos de Dados ‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’ Object é a classe mãe de todas as outras classes em Ruby
  • 8.
    Um resumo dalinguagem Ruby! Tipos de Dados ‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’  Numeric é uma classe abstrata que representa números  Integer é uma classe que representa números inteiros  Fixnum representa números inteiros de precisão fixa  Bignum representa números inteiros de precisão infinita, dependente apenas da memória disponível  Float é uma classe que representa números de ponto flutuante (números reais)
  • 9.
    Um resumo dalinguagem Ruby! Tipos de Dados ‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’ String uma cadeia de caracteres. Pode ser delimitado por apóstrofes (') ou aspas (").Tudo o que há entre apóstrofes é interpretado literalmente, entre aspas o programador deve se utilizar de símbolos para representar caracteres específicos, como em C. Exemplos: 'azul', "anbnc"
  • 10.
    Um resumo dalinguagem Ruby! Tipos de Dados ‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’ Symbol é semelhante a uma string, mas dois símbolos iguais possuem o mesmo endereço de memória, sendo assim é ótimo para se utilizar como índice numa Hash. Porém, devido à sua natureza, o coletor de lixo do Ruby não os elimina. É definido com um sinal de dois pontos (:), por exemplo, :nome
  • 11.
    Um resumo dalinguagem Ruby! Tipos de Dados ‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’ Array são arrays dinâmicos, que podem ser usados para representar matrizes e vetores. É delimitado por colchetes ([]) e cada valor é separado por vírgula. Exemplo: [4, 'azul', :termometro]
  • 12.
    Um resumo dalinguagem Ruby! Tipos de Dados ‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’ Hash representa um vetor associativo, e, assim como as Arrays, é dinâmica. É delimitada por chaves ({}), e o índice precede o valor com um sinal '=>'. Exemplo: {:controller => 'user', :action => 'index'}. Qualquer objeto pode ser um índice, mas os mais usados são as Strings e os Symbols
  • 13.
    Um resumo dalinguagem Ruby! Tipos de Dados ‘‘Não existem "tipos primitivos" em Ruby; todos os tipos são classes’’ Regexp representa expressões regulares, delimitadas por //. Funciona de forma semelhante a Perl. Exemplo: /a|ae/
  • 14.
    Um resumo dalinguagem Ruby! Declaração de variáveis Um objeto em Ruby é declarado com uma atribuição comum: var = 1 var = ‘foo’ var = new Class var = new Class(parâmetros)
  • 15.
    Um resumo dalinguagem Ruby! Declaração de variáveis Uma variável local é declarada normalmente.Uma variável de instância é declarada com um "@" no nome.Uma variável de classe é declarada com "@@",e uma variável global é declarada com "$".Variáveis que iniciam com uma letra maiúscula são consideradas constantes. local = "local» @instancia = 42 @@classe = /f+/ $Pi = 3.1415926
  • 16.
    Um resumo dalinguagem Ruby! Arrays a = [1, 'oi', 3.14, 1, 2, [4, 5]] a[2] # => 3.14 a.reverse # => [[4, 5], 2, 1, 3.14, 'oi', 1] a.flatten.uniq # => [1, 'oi', 3.14, 2, 4, 5] a.push(23) # a = [1, 'oi', 3.14, 1, 2, [4, 5], 23] a << 22 # a = [1, 'oi', 3.14, 1, 2, [4, 5], 23, 22]
  • 17.
    Um resumo dalinguagem Ruby! Hash hash = {'água' => 'molhada', 'fogo' => 'quente'} puts hash['fogo'] # "quente" hash.each_pair do |chave, valor| puts «#{chave} é #{valor}" end # Imprime: # água é molhada # fogo é quente hash.delete_if {|chave, valor| chave == 'água'} # Apaga 'água' => 'molhada'
  • 18.
    Um resumo dalinguagem Ruby! Blocos e Iteradores Blocos de código (ou code blocks) são trechos de código que são passados como parâmetros para métodos.Blocos são extremamente usados em Ruby. class Paises @paises = ["Argentina", "Brasil", "Paraguai", "Uruguai"] def self.each for pais in @paises yield pais end end end Paises.each do |pais| puts "Olá, #{pais}!" end
  • 19.
    Um resumo dalinguagem Ruby! Blocos e Iteradores Iterando em arrays usando blocos: array = [1, 'oi', 3.14] array.each do |item| puts item end # => 1 # => 'oi’ # => 3.14 # Equivalente, usando chaves: array.each { |item| puts item } # => 1 # => 'oi’ # => 3.14
  • 20.
    Um resumo dalinguagem Ruby! Blocos e Iteradores Em Ruby,a estrutura de repetição for é apenas sugar syntax para acessar o método each,existente em iteratores. array = [1, 'oi', 3.14] for item in array puts item end # => 1 # => 'oi’ # => 3.14
  • 21.
    Um resumo dalinguagem Ruby! Classes O código a seguir define uma classe chamada Pessoa.Além de initialize,o construtor para criar novos objetos,essa classe tem dois métodos: um que sobre-escreve o operador de comparação > (maior),e sobre-escreve o método to_s (assim o comando puts pode formatar a saída).Aqui attr_reader é um exemplo de metaprogramação em Ruby: attr_reader define o método getter, attr_writer define o método setter,e attr_accessor define ambos.Em Ruby, todos os atributos são privados e todos os métodos públicos,por padrão.Ruby permite definir opcionalmente o tipo de acesso usando três palavras-chave: public (público),private (privado) e protected (protegido).Ruby não suporta sobrecarga de métodos,mas suporta argumentos padrão,que podem ser utilizados para o mesmo fim.Também,o último comando em um método é considerado o seu valor de retorno,permitindo a omissão de um explícito return.
  • 22.
    Um resumo dalinguagem Ruby! Classes class Pessoa attr_reader :nome, :idade def initialize(nome = "Desconhecido", idade) @nome, @idade = nome, idade end def >(pessoa) if self.idade > pessoa.idade return true else return false end end # Método usado pelo método puts() para formatar a saída def to_s «#@nome (#@idade anos)" end end
  • 23.
    Um resumo dalinguagem Ruby! Herança Ruby não suporta herança múltipla.Ao invés disso,Ruby usa Mixins para emular herança múltipla: class Pessoa < Mamifero # Herança de Mamifero include Humano # Emulando herança múltipla end
  • 24.
    Fatos interessantes sobreRuby  Em Ruby você não precisa declarar o tipo de variável explicitamente  O uso de Meta-programação é fácil e faz parte da proposta da linguagem  Sobre-escrever métodos é fácil  Sem getter e setters escritos manualmente  Parêntese é opcional  Monkey Patch é de fácil implementação
  • 25.
    Gems em Ruby Abstraem funcionalidades básicas da aplicação para pedaços separados, podendo assim serem usados em qualquer novo projeto sem ter que duplicar código manualmente  Ajudam a comunidade proporcionando funcionalidades que são úteis a mais de uma pessoa  Criar GEMs ajudam no entendimento de como Ruby funciona e como implementar meta-programação  São em geral GRATUITAS, apenas sendo pagas em casos muito específicos relacionadas a regras de negócio de um cliente, por exemplo
  • 26.
    Como funciona umaaplicaçãoWeb?
  • 27.
    O que éo Rails?  Framework de código aberto desenvolvido em Ruby  Tem por objetivo o desenvolvimento rápido e fácil de aplicações web  Convenção em vez de configuração  Don’t Repeat Yourself (DRY)  Criado em 2004 por David Heinemeier Hansson (DHH)
  • 28.
    O que éo Rails? Arquitetura do Rails - MVC
  • 29.
    O que éo Rails? Arquitetura do Rails - MVC  A parte responsável por apresentar os resultados na página web é chamado de Apresentação (View).  A camada que faz o trabalho de tratar os parâmetros da requisição e direcionar para as demais camadas é chamada de Controladora (Controller).  As classes que representam suas entidades e as que te ajudam a armazenar e buscar os dados são chamadas de Modelo (Model).
  • 30.
    Porque usar Rails? Alta velocidade de desenvolvimento  Flexibilidade  Código legível e com qualidade  Integração fácil entre times  Deploy facilitado  Boa documentação, vasto material na internet  Apostila da Caelum gratuita sobre Rails
  • 31.
    Onde estudar Rails? http://blog.caelum.com.br/ - Blog da Caelum  http://andersonleite.com.br/ - Anderson Leite  http://yehudakatz.com/ - Yehuda Katz  http://fabiokung.com/ - Fabio Kung  http://akitaonrails.com/ - Fábio Akita  http://blog.plataformatec.com.br/ - José Valim  http://nomedojogo.com/ - Carlos Brando  http://devblog.avdi.org/ - Avdi Grimm  http://blog.hasmanythrough.com/ - Josh Susser  http://rubyflow.com/ - Agrega conteúdo de vários sites
  • 32.
    Mãos no Rails Instalaro rails #gem install rails Ajuda do rails #rails --help Criar uma aplicação #rails new [caminho-da-app] Rodar o servidor #rails server
  • 33.
    Estrutura do RailsApp  app - A maioria dos arquivos especícos da nossa aplicação ficam aqui (inclusive todo o MVC, dividido em diretórios);  bin - Executáveis do Rails e das gems instaladas;  config - Configurações da aplicação;  db - Migrações, esquema e outros arquivos relacionados ao banco de dados;  doc - Documentação do sistema;  lib - Bibliotecas auxiliares;  log - Informações de log;  public - Arquivos estáticos que serão servidos pela WEB;  test - Testes da nossa aplicação;  tmp - Arquivos temporários como cache e informações de sessões;  vendor - Dependências e bibliotecas de terceiros.
  • 34.
    Comandos do Rails Criarum modelo #rails generate model [nome do modelo] Criar uma migração #rails generate migration [nome da migração] Criar um controller #rails generate controller [nome do controller]
  • 35.
    Desenvolvendo com Rails Vamoscriar uma aplicação CRUD agora C reate R ead U pdate D elete
  • 36.
    Desenvolvendo com Rails Opoderoso SCAFFOLD rails generate scaffold cliente nome:string idade:integer
  • 37.
    Desenvolvendo com Rails Eagora?! O que fazer!?  Estudar como Rails faz o relacionamento entre os modelos  Procurar pro grupos, recomendo o GURU-SP  Ler um pouco mais a documentação do Rails  Fazer um grupo de estudo  Procurar a apostila da Caelum, é grátis! 
  • 38.