40
INTRODUÇÃO A RUBY E RUBY ON RAILS Ruby.new FREVO ON RAILS GRUPO DE USUÁRIOS RUBY/RAILS DE PERNAMBUCO Friday, December 18, 2009

Introdução a Ruby

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Introdução a Ruby

INTRODUÇÃO A RUBY ERUBY ON RAILS

Ruby.new

FREVO ON RAILSGRUPO DE USUÁRIOS RUBY/RAILS DE PERNAMBUCO

Friday, December 18, 2009

Page 2: Introdução a Ruby

FREVO ON RAILS

Por que Rails mesmo?

• Framework da web 2.0

• Uso crescente desde 2006

• Usado em websites importantes

• Twitter Stay Connected OR What are you doing?

• Yellow Pages Find it locally.

• Scribd Books, presentations and more.

• Usado em website desimportantes

Friday, December 18, 2009

Page 3: Introdução a Ruby

FREVO ON RAILS

Por que Rails mesmo?

ou simplesmente

por que é divertido!

• Desenvolver aplicações web é muito trabalhoso

• HTML, CSS, Javascript, AJAX, XML…

• Rails ajuda a tornar o processo menos penoso

Friday, December 18, 2009

Page 4: Introdução a Ruby

FREVO ON RAILS

RUBY ON RAILS

Friday, December 18, 2009

Page 5: Introdução a Ruby

FREVO ON RAILS

Mais uma linguagem?

Ruby is a dynamic programming language with a complex but expressive grammar and a core class library with a rich and powerful API. Ruby draws inspiration from Lisp, Smalltalk, and Perl, but uses a grammar that is easy for C and JavaTM programmers to learn. Ruby is a pure object-oriented language, but it is also suitable for procedural and functional programming styles. It includes powerful metaprogramming capabilities and can be used to create domain-specific languages or DSLs.

”— The Ruby Programming Language, David Flanagan

Friday, December 18, 2009

Page 6: Introdução a Ruby

FREVO ON RAILS

Mais uma linguagem?

Ruby is designed to make programmers happy.

• Yukihiro Matsumoto (1995)

• Versão atual 1.9.1-p376

• Linguagem Interpretada = Lenta

• Duck typing

“If it walks like a duck and quacks like a duck, it must be a duck”

Friday, December 18, 2009

Page 7: Introdução a Ruby

FREVO ON RAILS

Básico

• Declaração de variável local

nome_grupo = “Frevo on Rails”

• Chamada de método

“Frevo on Rails”.upcasenome_grupo.sub(“Frevo”, “Ruby”)

• Impressão

puts “Frevo on Rails”puts nome_grupo

Friday, December 18, 2009

Page 8: Introdução a Ruby

FREVO ON RAILS

Básico

• Declaração e uso de “funções”

def repetir(str)puts str * 3

endrepetir(“Frevo”)# Retornando valoresdef repetir(str)

return str * 3endrep = repetir(“Frevo”)puts rep

Friday, December 18, 2009

Page 9: Introdução a Ruby

FREVO ON RAILS

Expressões e Operadores

• Tudo é uma expressão

• E portanto retorna um resultado

nome_grupo = if cidade == “Recife”“Frevo on Rails”

else“Não importa” # =D

end

• if/unless/case

• while/until

Friday, December 18, 2009

Page 10: Introdução a Ruby

FREVO ON RAILS

Expressões e Operadores

• for

• Não existe o “for tradicional”

• Mas lembra que tudo é objeto?

3.times do |i|puts “Iterando pela #{i+1} vez.”

end

• Interpolação de Strings

nome = “Frevo”nome + “ on Rails” = “#{nome} on Rails”

Friday, December 18, 2009

Page 11: Introdução a Ruby

FREVO ON RAILS

Arrays

• Inicialização

numeros = [1, 2, 3]elementos = [1, “a”, true]

• Indexação

elementos[0]elementos[1]

• Crescem automaticamente

elementos[10] = “frevo”

• size/length, first, last, shuffle, uniq, sort…

Friday, December 18, 2009

Page 12: Introdução a Ruby

FREVO ON RAILS

Hashes

• Inicialização

• area = {“brasil” => 8514877, “argentina” => 2766890}• capitais = {:pernambuco => “recife”, :piaui => “teresina”}

• Indexação

• area[“brasil”]• capitais[:pernambuco]• capitais[:paraiba]

• Símbolos

• Comparação rápida

Friday, December 18, 2009

Page 13: Introdução a Ruby

FREVO ON RAILS

Blocos

• Cada chamada pode ter um bloco associado

• Como no 3.times…

• Característica mais versátil da linguagem IMHO

• animais = [“camelo”, “mosca”, “tubarão”]• animais.each do |animal|

• puts “#{animal.capitalize} é um animal!”• end

Friday, December 18, 2009

Page 14: Introdução a Ruby

FREVO ON RAILS

Blocos

• map

• quadrados = [1,2,3,4,5].map do |numero|• numero*numero

• end

• select

• verbos = [“comer”, “caçar”, “estudar”, “limpar”, “coçar”]• verbos_c = verbos.select do |verbo|

• verbo.start_with? “c”• end

Friday, December 18, 2009

Page 15: Introdução a Ruby

FREVO ON RAILS

Blocos

• each

• capitais = {:pernambuco => “recife”, :piaui => “teresina”}• capitais.each do |estado, capital|

• puts “A capital de #{estado.to_s.capitalize} é #{capital}”• end

• Arquivos

• File.open(“arquivo.txt”) do |file|• puts file.read

• end

Friday, December 18, 2009

Page 16: Introdução a Ruby

FREVO ON RAILS

Pontuação

• Ruby possui convenções de pontuação

• Métodos que retornam booleanos terminam com ?

• lista.empty?

• Métodos que alteram o objeto terminam com !

• lista.sort• lista.sort!

• Variáveis globais começam com $

• $parametro = “evil” # não façam isso em casa!

Friday, December 18, 2009

Page 17: Introdução a Ruby

FREVO ON RAILS

Classes

• Definição

• class Ponto• # Construtor• def initialize(x,y)

• @x, @y = x,y• end

• end

• Instância

• p = Ponto.new(10,20)

Friday, December 18, 2009

Page 18: Introdução a Ruby

FREVO ON RAILS

Classes

• Variáveis de instância (aka atributos) começam com @

• Variáveis de classe (aka estáticas) começam com @@

• Todas são privadas

• Só podem ser acessadas fora da classe por meio de acessores

• self se refere ao objeto atual

Friday, December 18, 2009

Page 19: Introdução a Ruby

FREVO ON RAILS

Classes

• Em Ruby, as classes são abertas

• É possível adicionar métodos a classes já existentes

• class Array• def frevo_on_rails

• “Frevo on Rails”• end

• end

• É possível adicionar métodos até a objetos únicos

Friday, December 18, 2009

Page 20: Introdução a Ruby

FREVO ON RAILS

Ainda tem muito mais…

• Expressões Regulares

• Intervalos

• Lançamento/tratamento de exceções

• Procs, Lambdas, Fibers, Closures

• Reflexão e Metaprogramação

• API Rica

• Theading, Sistema de Arquivos, Networking, Strings, Datas…

Friday, December 18, 2009

Page 21: Introdução a Ruby

FREVO ON RAILS

Referências

The Hummingbird Book The Pickaxe Book

Friday, December 18, 2009

Page 22: Introdução a Ruby

FREVO ON RAILS

Demonstração

• Finding mean and median

• Doing date arithmetic

• Getting the N Smallest Items of an Array

• Picking a Random Line from a File

• Grabbing the Contents of a Web Page

Friday, December 18, 2009

Page 23: Introdução a Ruby

FREVO ON RAILS

RUBY ON RAILS

Friday, December 18, 2009

Page 24: Introdução a Ruby

FREVO ON RAILS

Mais um framework?

• David Heinemeier Hansson (2005), 37signals

• Hoje mais de sete mantenedores no core team

• Opinionated Software

• CoC: Convention over Configuration

• DRY: Don’t repeat yourself

• KISS: Keep it stupidly simple

Friday, December 18, 2009

Page 25: Introdução a Ruby

FREVO ON RAILS

Demonstração

Creating a weblog in 15 minuteshttp://rubyonrails.org/screencasts

Friday, December 18, 2009

Page 26: Introdução a Ruby

FREVO ON RAILS

Achou difícil?

Aldo não…http://www.youtube.com/watch?v=9ertJw5C2H8

Friday, December 18, 2009

Page 27: Introdução a Ruby

FREVO ON RAILS

Organização

ModelViewController

Friday, December 18, 2009

Page 28: Introdução a Ruby

FREVO ON RAILS

• Representa a informação da aplicação

• Modela o domínio do negócio

• Contém todas as regras de negócio

• Normalmente corresponde a uma tabela no BD

• Dados sempre armazenados em um banco de dados

• Cada objeto é identificado por um id único

• Mapeamento Objeto-Relacional (ORM)

Models

Friday, December 18, 2009

Page 29: Introdução a Ruby

FREVO ON RAILS

Models

• Criação

• script/generate model usuario

• Corresponde automaticamente à tabela usuários

• Migrações

• Executa operações no banco de dados

• Criação/alteração/remoção de tabelas, índices…

• Importação de dados

• Permite reproduzir as mesmas operações em produção

Friday, December 18, 2009

Page 30: Introdução a Ruby

FREVO ON RAILS

Models

• Operações

• new/create

• find

• find_all

• find_by dinâmicos

• destroy

Friday, December 18, 2009

Page 31: Introdução a Ruby

FREVO ON RAILS

Models

• Validações

• validates_presence_of

• validates_uniqueness_of

• validates_numericality_of

• Relacionamentos

• belongs_to

• has_many

Friday, December 18, 2009

Page 32: Introdução a Ruby

FREVO ON RAILS

Controllers

• Controlam o fluxo da aplicação

• Recebem a requisição e dados do cliente

• Determina que action corresponde a cada URL

• Manipula o model e prepara-o para view

• “Cola” entre model e view

Friday, December 18, 2009

Page 33: Introdução a Ruby

FREVO ON RAILS

Controllers

• Criação

• script/generate controller usuarios

• Actions REST

• index

• show

• new/create

• edit/update

• destroy

Friday, December 18, 2009

Page 34: Introdução a Ruby

FREVO ON RAILS

Controllers

• Recebendo parâmetros POST e GET

• Hash params

• Rotas

• Que URLs correspondem a cada ação?

• connect

• resource

Friday, December 18, 2009

Page 35: Introdução a Ruby

FREVO ON RAILS

Views

• Formatam os dados para o usuário

• Vários formatos suportados

• HTML, Javascript/JSON, XML, RSS…

• Arquivos de view gerados juntamente com controllers

• Embedded Ruby (ERb)

• <h1>Olá <%= @usuario.nome %></h1>

Friday, December 18, 2009

Page 36: Introdução a Ruby

FREVO ON RAILS

Views

• Pode-se usar estruturas de controle

• <ul>• <% @posts.each do |post| %>

• <li><%= post.titulo %></li>• <% end %>

• </ul>• #• <% if usuario %>

• <p>Olá usuário <%= usuario.nome %></p>• <% end %>

Friday, December 18, 2009

Page 37: Introdução a Ruby

FREVO ON RAILS

Views

• Helpers

• link_to

• form_for

• Partials

• Usados para evitar duplicação de código

• Extrair o que for diferente e centralizar o que for igual

• render :partial

Friday, December 18, 2009

Page 38: Introdução a Ruby

FREVO ON RAILS

Referências

Agile Web Development with Rails The Rails Way

Friday, December 18, 2009

Page 39: Introdução a Ruby

FREVO ON RAILS

Referências

Rails Guideshttp://guides.rubyonrails.org/

Friday, December 18, 2009

Page 40: Introdução a Ruby

FREVO ON RAILSGRUPO DE USUÁRIOS RUBY/RAILS DE PERNAMBUCO

Friday, December 18, 2009