minicurso de rails - wtisc 2014
DESCRIPTION
Minicurso desenvolvido para o WTISC 2014, na Universidade Federal do Ceará Realizado na cidade de Quixadá/CeTRANSCRIPT
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 por Yukihiro 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', "a\nb\nc"
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 = 1var = ‘foo’var = new Classvar = 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.14a.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 endend 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 itemend# => 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 itemend # => 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)" endend
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últiplaend
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ção Web?
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 reateR eadU pdateD 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