Your SlideShare is downloading. ×
Ruby on rails   gds 2011
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ruby on rails gds 2011

388
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
388
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Desenvolvendo Web-Games com Ruby on Rails Game Development School 2011
  • 2. Oi• Endel Dreyer• Aluno de Jogos Digitais• Desenvolvedor na Ocapi (ocapi.com.br)• Utiliza Ruby / Rails à 2 anoshttp://twitter.com/endel http://github.com/endel
  • 3. Ruby• Japão, 1993• Perl / Smalltalk / Lisp• Interpretada• Tipagem dinâmica e forte puts "Hello world!"• Expressiva
  • 4. bléh!
  • 5. =)
  • 6. Operadores aritméticos• Soma: +• Subtração: -• Multiplicação: *• Divisão: /• Módulo: %• Expoente: **
  • 7. Operadores lógicos• Igualdade ==, <, <=, >, >= 5 == 4 => false• And && true && false => false• Or || true || false => true• Not ! !false => true Igual: C++, PHP, Java, etc
  • 8. Operadores lógicos• Comparativo <=> (retorna 0, -1 ou 1) 7 <=> 5 => 1• Ternário ? : (5 == 5) ? “Ok” : “Errado” => “Ok”
  • 9. Core classesInteger, String, Symbol, Array, Hash, etc.
  • 10. Core classes: Integernumero = 5numero.is_a? Integer# => truenumero += 1.2# => 6.2numero.is_a? Integer# => falsenumero.is_a? Float# => true
  • 11. Core classes: Integer• 83.odd? # => true• 83.even? # => false• 83.chr # => "S"
  • 12. Core classes: Stringnome = "Joselito""Oi, meu nome é #{nome}"  # => "Oi, meu nome é Joselito"Oi, meu nome é #{nome}# => "Oi, meu nome é #{nome}"
  • 13. Core classes: Stringstring = "Sou uma string bonita"string.length# => 21string[15..-1]# => "bonita"string[15..-1] = "feiosa!"# => "Sou uma string feiosa!"string.gsub(feiosa!, bonitona)#  => "Sou uma string bonitona"
  • 14. Core classes: String• “Hello”.upcase # => “HELLO”• “Hello”.reverse # => “olleH”• “Hello” * 5 # => “HelloHelloHelloHelloHello”•“ Hello “.strip # => “Hello”
  • 15. Core classes: Symbol• Imutáveis• Únicos em toda a aplicação sym = :simbolo sym.object_id        # => 332668 sym2 = :simbolo sym2.object_id       # => 332668   str = "uma string" str.object_id        # => 2149466880 str2 = "uma string" str2.object_id       # => 2149437560
  • 16. Core classes: Array• Armazenam qualquer tipo de objeto• Índices inteirosarray1 = [1, 2, 3, 2]array2 = Array.new    # => []array3 = Array.new(5)# => [nil, nil, nil, nil, nil]
  • 17. Core classes: Arrayarray = [1, 2, 3, 2]array << 4 # => [1, 2, 3, 2, 4]array.pop # => 4array.shift # => 1array.uniq # => [2,3]
  • 18. Core classes: Arraynotas = [8, 4, 5.9, 9, 4, 10]notas.select {|nota| nota >= 6 }#  => [8, 9, 10]notas.sort# => [4, 4, 5.9, 8, 9, 10] OBS: Blocos podem ser entre {} ou do / end
  • 19. Core classes: Hash• Similar ao Array• Armazenam qualquer tipo de objeto• Índices podem ser qualquer tipo de objeto hash = Hash.new hash2 = {1 => um, 2 => dois}
  • 20. Core classes: Hashhash = {:um => 1, :dois => 2}hash[um]# => nilhash[:um]# => 1hash[:tres] = 3hash.keys# => [:um, :dois, :tres]hash.values# => [1, 2, 3]
  • 21. Notação literal• Array array = [1, 2, 3]• Símbolos symbol = :simbolo• Hash hash = {:first => “value”, :second => “Value”}• Expressões Regulares regexp = /[0-9]{8}/
  • 22. Tudo é objeto3.class                   # => Fixnum3.14.class                # => Float:simbolo.class            # => Symbol[1,2,3].class             # => Array/expressao/i.class       # => Regexp{:key => value}.class # => HashArray.class               # => Class
  • 23. Fluxo: Condicionais• if• unlessif condição bloco de códigoend unless condição bloco de códigovariavel = 5 if condição end variavel = 5 unless condição
  • 24. Fluxo: Case / Whennota = 6case notawhen 10 then puts "Excelente!"when 8..9 then puts "Muito bom"when 6..7 then puts "Regular"else puts "Noob!"end
  • 25. Fluxo: Loops • begin...end while • enquanto (...) faça (...)begin  alguma_coisaend while (condicao == true)
  • 26. Fluxo: Loops • begin...end until • faça (...) até (...)begin  alguma_coisaend until (condicao == true)
  • 27. Fluxo: Loops• Array#each[1,2,3,4].each do |item| puts itemend
  • 28. Fluxo: Loops • Hash#each_pair{:first => 1, :second => 2}.each_pair do |key, value| puts "#{key} => #{value}"end
  • 29. Fluxo: Loops • Integer#times • Integer#upto • Integer#downto5.times do |i| 0.upto(10) do |i| puts i puts iend end
  • 30. Fluxo: Loops • String#each_line • String#each_char • String#each_byte"Hello world".each_line do |line| puts lineend
  • 31. Convenções e nomenclaturas• Classes e módulos: CamelCase• Métodos e variáveis locais: com_underlines• Variáveis de instância: @com_arroba• Variáveis de classe: @@duplo_arroba• Constantes: UPPER_CASE• Variáveis globais: $COM_DOLAR
  • 32. Convenções e nomenclaturas• Métodos modificadores: finalizam em “!” • Ex: ”string”.upcase! # => ”STRING” [1,2,2,3,2].uniq! # => [1,2,3]• Métodos que retornam Boolean: finalizam em “?” • Ex: [1,2,3].include? 5 # => false 5.is_a? String # => false
  • 33. Funções• A última expressão é o retorno da funçãodef soma(n1, n2)    return n1 + n2enddef soma(n1, n2)    n1 + n2endsoma(7, 2) # => 9soma("Oi", "Tchau") # => "OiTchau"
  • 34. Funções• A última expressão é o retorno da funçãodef soma(n1, n2)    return n1 + n2enddef soma(n1, n2)    n1 + n2endsoma 7, 2 # => 9soma "Oi", "Tchau" # => "OiTchau"Parênteses são opcionais
  • 35. Funções• Argumentos defaultdef cumprimentar(nome = "anônimo")    "Olá, #{nome}!"end cumprimentar            # => "Olá, anônimo!"cumprimentar("pessoal") # => "Olá, pessoal!"
  • 36. Funções• Method missingdef method_missing(name, *args)    "Método #{name} não foi definido. Argumentos: #{args.inspect}"end alguma_coisa(1)# => "Método alguma_coisanão foi definido.Argumentos: [1]"
  • 37. Arrays e hashes implícitosarray = 1, 2, 3# => [1, 2, 3]hash = :um => 1, :dois => 2# => {:um => 1, :dois => 2}
  • 38. circle.rb Classesclass Circle # constant PI = 3.141592653589793 # getter and setter attr_accessor :id # getters attr_reader :diameter, main.rb :radius require ./circle.rb def initialize(id, radius = nil) circle = Circle.new(My beautiful circle, 7) @id = id circle.area radius = radius unless radius.nil? => 153.93804002589985 end circle.circunference def radius= radius => 43.982297150257104 @radius = radius circle.diameter @diameter = radius * 2 => 14 end Circle::PI => 3.141592653589793 def area PI * (@radius ** 2) end def circunference PI * @diameter endend
  • 39. Rails“Web development that doesn’t hurt”
  • 40. Rails• Padrão MVC (Model-View-Controller)• Convenção sobre configuração (CoC)• Não repita a si mesmo (DRY)• Objeto-relacional (ORM)
  • 41. Quem está usando?
  • 42. Setup• $ gem install rails• $ rails new nome_do_projeto
  • 43. Estrutura padrãoArquivo/Diretório Finalidade Especifica as dependências de “gems” para a Gemfile aplicação. app/ Controllers, models e views da aplicação. public/ Arquivos públicos. Javascript, CSS, Imagens, etc. Configurações da aplicação: rotas, banco de config/ dados, etc. lib/ Módulos para extensão da aplicação. db/ Migrações do banco de dados. vendor/ Códigos de terceiros. “Gems” estáticas. log/ Arquivos de log da aplicação.
  • 44. MVC
  • 45. MVC
  • 46. Models• Objetos que representam uma entidade no banco de dados$ rails generate model personagem nome:string level:integer exp:integer hp:integer
  • 47. Models • Objetos que representam uma entidade no banco de dados $ rails generate model personagem nome:string level:integer exp:integer Convenção: Singular hp:integer
  • 48. Models• Objetos que representam uma entidade no banco de dados$ rails generate model personagem nome:string level:integer exp:integer hp:integer campo : tipo
  • 49. Models$ rails generate model {identificador} {atributo}:[ integer, boolean, string, text, float, decimal, datetime, timestamp, time, date, binary]
  • 50. Models• Extendem ActiveRecord::Base class Personagem < ActiveRecord::Base end
  • 51. Models• Extendem ActiveRecord::Base• Devem gerenciar o comportamento do objeto class Personagem < ActiveRecord::Base   def level_up!     level += 1     save   end end
  • 52. Models• Criando registrosPersonagem.create(:nome => "Joselito", :level => 1, :exp => 0, :hp => 100)
  • 53. Models• Encontrando registrosPersonagem.where(:level => 10).firstPersonagem.where(:level => 10).all
  • 54. MVC
  • 55. Controllers• Recebem a entrada do usuário• Fazem chamadas aos models• Renderizam uma view$ rails generate controller personagens
  • 56. Controllers • Recebem a entrada do usuário • Fazem chamadas aos models • Renderizam uma viewclass PersonagensController < ApplicationControllerend
  • 57. Controllers • Recebem a entrada do usuário • Fazem chamadas aos models • Renderizam uma view • Cada método corresponde à uma URLclass PersonagensController < ApplicationController    def criar    endend http://localhost:3000/personagens/criar
  • 58. MVC
  • 59. Views• HTML / ERB• Interface de usuário
  • 60. Bora codar?
  • 61. Material para estudos• http://guides.rubyonrails.org/• http://railscasts.com/

×