esta começando a programar para a web? então começe com rails

55
Começando a programar na Web? Então começe com Ruby on Rails. Ismael Stahelin

Upload: ismaelstahelin

Post on 12-Nov-2014

6.145 views

Category:

Technology


1 download

DESCRIPTION

Apresentação realzada na semana acadêmica da Unisul em 2010, apresentando a linguagem Ruby e o framework de desenvolvimento Web Ruby on Rails.

TRANSCRIPT

Page 1: Esta começando a programar para a web? Então começe com Rails

Começando a programar na Web?Então começe com Ruby on Rails.

Ismael Stahelin

Page 2: Esta começando a programar para a web? Então começe com Rails

Precisa de um motivo?Que tal esse?

Page 3: Esta começando a programar para a web? Então começe com Rails
Page 4: Esta começando a programar para a web? Então começe com Rails
Page 5: Esta começando a programar para a web? Então começe com Rails

✔ Japão

✔ Yukihiro Matsumoto “Matz”

✔ 2000

Programming Ruby (Dave Thomas)

✔ 2005

Ruby on Rails (DHH)

Origem

Page 6: Esta começando a programar para a web? Então começe com Rails

Matz

Page 7: Esta começando a programar para a web? Então começe com Rails

“Linguagem de programação dinâmica, interpretada, com uma complexa, mas expressiva grammática e uma biblioteca de classe com um rico e poderoso API”

(The Ruby Programming language)

Ruby

Page 8: Esta começando a programar para a web? Então começe com Rails

✔ Lisp✔ Smalltalk✔ Perl

Influências

Page 9: Esta começando a programar para a web? Então começe com Rails

Tipos básicos

Page 10: Esta começando a programar para a web? Então começe com Rails

✔ local = 1✔ @instancia = “meu nome”✔ @@classe = /.*/✔ $global = “alguém me vê?”

Variáveis

Page 11: Esta começando a programar para a web? Então começe com Rails

✔ public✔ Initialize é sempre private✔ Todos

✔ protected✔ Instâncias da classe e subclasses

✔ private✔ Instâncias da classe e subclasses*

Visibilidade

Page 12: Esta começando a programar para a web? Então começe com Rails

“Private é para o Ruby o que Protected é para o Java”

def <=>(other) self.age <=> other.age end

Visibilidade para programadores Java

Page 13: Esta começando a programar para a web? Então começe com Rails

class Carro public ou protected ou private def ano @ano end def ano=(ano) @ano = ano endend

public, protected, private

Page 14: Esta começando a programar para a web? Então começe com Rails

class Carro def ano @ano end def ano=(ano) @ano = ano End public :ano, :ano= protected :ano, :ano= private :ano, :ano=end

public, protected, private

Page 15: Esta começando a programar para a web? Então começe com Rails

#executando métodos que aceitam blocos

metodo do |var| #corpo do blocoend

ou

metodo { |var| #corpo do bloco }

Blocos de código

Page 16: Esta começando a programar para a web? Então começe com Rails

✔ Tudo é um objeto✔ Operações são métodos✔ Métodos sempre retornam valor

Orientação a objetos

Page 17: Esta começando a programar para a web? Então começe com Rails

irb(main):001:0> 1.class #=> Fixnumirb(main):002:0> 1.0.class #=> Floatirb(main):003:0> true.class #=> TrueClassirb(main):004:0> false.class #=> FalseClassirb(main):005:0> nil.class #=> NilClassirb(main):006:0> /.*/.class #=> Regexpirb(main):007:0> "Hello".class #=> Stringirb(main):008:0> :nome.class #=> Symbol

Tudo é um objeto

Page 18: Esta começando a programar para a web? Então começe com Rails

irb(main):002:0> 1.public_methods.sort=> ["%", "&", "*", "**", "+", "+@", "-", "-@", "/", "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>", "[]", "^", "__id__", "__send__", "abs", "between?", "ceil", "chr", "class", "clone", "coerce", "display", "div", "divmod", "downto", "dup", "enum_for", "eql?", "equal?", "even?", "extend", "fdiv", "floor", "freeze", "frozen?", "hash", "id", "id2name", "inspect", "instance_eval", "instance_exec" ... ]

Operações são métodos

Page 19: Esta começando a programar para a web? Então começe com Rails

irb(main):001:0> puts "Hello World"Hello World=> nil

Métodos sempre retornam valor

Page 20: Esta começando a programar para a web? Então começe com Rails

✔ Herança simples✔ Mixins✔ Módulos✔ Duck typing✔ Tratamento de exceções✔ Closures✔ Open classes

Mais OO em Ruby

Page 21: Esta começando a programar para a web? Então começe com Rails

class Fixnum def +(outro) self - outro endend

Open classes

Page 22: Esta começando a programar para a web? Então começe com Rails

Mas isso não é perigoso?

Page 23: Esta começando a programar para a web? Então começe com Rails

“Em toda profssão existem os bons e os maus profssionais”

Page 24: Esta começando a programar para a web? Então começe com Rails

✔ Orientada a objetos✔ Procedural✔ Funcional✔ Metaprogramação

Ruby é multi-paradigma

Page 25: Esta começando a programar para a web? Então começe com Rails

class Aluno #não sabe nadaEnd

class Professor def ensina(aluno) def aluno.escreve “sei escrever!” end endend

juca = Aluno.newjuca.respond_to? :escreve # => false

professor = Professor.newprofessor.ensina jucajuca.escreve # => “sei escrever!”

Metaprogramação em Ruby

Exemplo retirado da apostila R71 da Caelum.

O melhor exemplo de metaprogramação que eu já vi!

Page 26: Esta começando a programar para a web? Então começe com Rails

✔ attr_accessor✔ Uso de parêntese opcional✔ “return” é opcional✔ API expressiva

✔ 3.times {print “Oi”}✔ 1.upto(4) {|i| puts i}✔ 10 + 3 # => 10.+(3)

Açucar sintático

Page 27: Esta começando a programar para a web? Então começe com Rails

Ok, e porque eu deveria usar Ruby?Fale das vantagens...

Page 28: Esta começando a programar para a web? Então começe com Rails

✔ Garbage collector✔ Extensível via C✔ Multi-plataforma✔ DSL

File.foreach("arq.txt") { |line| puts line }

Pontos positivos

Page 29: Esta começando a programar para a web? Então começe com Rails

✔ Matemática científca✔ Manipulação de imagens✔ Threads✔ I/O para grandes arquivos✔ Performance

Pontos negativos

Page 30: Esta começando a programar para a web? Então começe com Rails

✔ Linux ✔ Mac OS✔ Windows

Plataformas

Page 31: Esta começando a programar para a web? Então começe com Rails

✔ MRI (original) ✔ JRuby✔ IronRuby✔ Rubinius✔ Cardinal✔ MagLev

Implementações

Page 32: Esta começando a programar para a web? Então começe com Rails

Já cansou?

Page 33: Esta começando a programar para a web? Então começe com Rails

http://www.ruby-lang.org/en/downloads/

Instalando o Ruby

Next > Next > Finish

port install ruby

sudo apt-get install ruby-full

Page 34: Esta começando a programar para a web? Então começe com Rails
Page 35: Esta começando a programar para a web? Então começe com Rails

✔ David Heinemeier Hansson (23) Experiências com Java e PHP

✔ 2005

✔ Extraído de projeto real

✔ Metaframework Composto por outros frameworks

Origem

Page 36: Esta começando a programar para a web? Então começe com Rails

DHH

Page 37: Esta começando a programar para a web? Então começe com Rails

✔ Convention over Confguration

✔ Don't Repeat Yourself

✔ MVC

✔ Modelo de dados avançado

✔ Software com opinião

✔ Scaffold (CRUD)

Ruby on Rails

Page 38: Esta começando a programar para a web? Então começe com Rails

Tirando você e o Zézinho da padaria, quem mais usa Rails?

Page 39: Esta começando a programar para a web? Então começe com Rails

Amazon.com BBC

CapGemini BPN

Cisco C|Net

EA (Electronic Arts) IBM

JP Morgan NASA

Oakley Oracle

Siemens ThoughtWorks

Yahoo!

Big players

Fonte: http://blog.obiefernandez.com/content/2008/03/big-name-compan.html

Page 40: Esta começando a programar para a web? Então começe com Rails

Estrutura do projeto

Page 41: Esta começando a programar para a web? Então começe com Rails

app : onde fca o código da aplicação

controllers : tratam os requests

helpers : métodos utilitários, visíveis en controllers e views

models : persistência e lógica de negócios

views : layouts e páginas dinâmicas

confg : arquivos de confguração

environments : production, development e test

initializers : executados na inicialização da aplicação

Estrutura do projeto.

Page 42: Esta começando a programar para a web? Então começe com Rails

db : arquivos referentes ao banco de dados

migrations : migrações da base de dados

doc : documentação do código

lib : código ruby que não é: controller, model ou helper

tasks : tarefas do rake personalizadas

log : todos os arquivos de log da aplicação

Estrutura do projeto..

Page 43: Esta começando a programar para a web? Então começe com Rails

public : arquivos estáticos

images : diretório de imagens

javascripts : diretório de javascripts

stylesheets : diretório de css

script : scripts do Rails como generate e console

test : todos os testes da aplicação, de todos os tipos

tmp : arquivos temporários de uso do rails

vendor : plugins, rubygems e até mesmo o rails

Estrutura do projeto...

Page 44: Esta começando a programar para a web? Então começe com Rails

Composição

✔ ActiveSupport (infra)

✔ ActiveRecord (persistência)

✔ ActionPack (visualização)

✔ ActionMailer (e-mail)

✔ ActiveResources (RESTfull)

Page 45: Esta começando a programar para a web? Então começe com Rails

Pilhas incluídas

✔ Servidores (WEBrick, Mogrel)

✔ BD (Sqlite3, Mysql, Postgres, Oracle)

Page 46: Esta começando a programar para a web? Então começe com Rails

Boas práticas

✔ Siga as convênções

✔ Modelos gordos

✔ Controllers magros

✔ Nomes de entidades em inglês

✔ Tabelas são entidades no plural

✔ FK = <nome_entidade>_id

Page 47: Esta começando a programar para a web? Então começe com Rails

Scripts

✔ about (informações de versões dos componentes)

✔ console (console com o ambiente da aplicação)

✔ dbconsole (console padrão do banco de dados)

✔ destroy (remover código gerado)

✔ generate (gera código da aplicação automático)

✔ plugin (instala/desinstala plugins)

✔ runner (automatizar tarefas)

✔ server (inicia o servidor da aplicação)

Page 48: Esta começando a programar para a web? Então começe com Rails

Rake para automatizar

✔ Ferramenta de build (make, ant)

✔ Instalação✔ gem install rake

✔ Tarefas disponíveis✔ rake -T

rake db:create

rake db:migrate

Page 49: Esta começando a programar para a web? Então começe com Rails

Migrações

✔ Versionamento do Banco de dados

✔ Executadas 1x (sequencial)

✔ Desenvolvedor é responsável

✔ 2 passos sempre:✔ Realiza alteração

✔ Desfaz alteração

Page 50: Esta começando a programar para a web? Então começe com Rails

class CriarContatos < ActiveRecord::Migrations def self.up create_table :contatos do |t| t.string :nome t.string :email t.string :telefone t.string :endereco end end

def self.down drop_table :contatos endend

ActiveRecord::Migration

Page 51: Esta começando a programar para a web? Então começe com Rails

Perguntas?

Page 52: Esta começando a programar para a web? Então começe com Rails

Hands On!

Agora vamos ver na prática.

Page 53: Esta começando a programar para a web? Então começe com Rails

http://www.ruby-lang.org

http://tryruby.org

http://guides.rubyonrails.org

http://railsapi.com

http://railstips.org

http://gemcutter.org

http://rubyforge.org

http://railscasts.com

Sites

Page 54: Esta começando a programar para a web? Então começe com Rails

✔ Ruby on Rails [Rodrigo Urubatan – Novatec]

✔ Caelum – Apostila RR71

✔ A linguagem de Programação Ruby [Matz]

Livros e apostilas

Page 55: Esta começando a programar para a web? Então começe com Rails

Obrigado :-)

[email protected]

✔ @ismaels

✔ http://ismaels.net