Ruby on rails gds 2011

609 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
609
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Ruby on rails gds 2011

  1. 1. Desenvolvendo Web-Games com Ruby on Rails Game Development School 2011
  2. 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. 3. Ruby• Japão, 1993• Perl / Smalltalk / Lisp• Interpretada• Tipagem dinâmica e forte puts "Hello world!"• Expressiva
  4. 4. bléh!
  5. 5. =)
  6. 6. Operadores aritméticos• Soma: +• Subtração: -• Multiplicação: *• Divisão: /• Módulo: %• Expoente: **
  7. 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. 8. Operadores lógicos• Comparativo <=> (retorna 0, -1 ou 1) 7 <=> 5 => 1• Ternário ? : (5 == 5) ? “Ok” : “Errado” => “Ok”
  9. 9. Core classesInteger, String, Symbol, Array, Hash, etc.
  10. 10. Core classes: Integernumero = 5numero.is_a? Integer# => truenumero += 1.2# => 6.2numero.is_a? Integer# => falsenumero.is_a? Float# => true
  11. 11. Core classes: Integer• 83.odd? # => true• 83.even? # => false• 83.chr # => "S"
  12. 12. Core classes: Stringnome = "Joselito""Oi, meu nome é #{nome}"  # => "Oi, meu nome é Joselito"Oi, meu nome é #{nome}# => "Oi, meu nome é #{nome}"
  13. 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. 14. Core classes: String• “Hello”.upcase # => “HELLO”• “Hello”.reverse # => “olleH”• “Hello” * 5 # => “HelloHelloHelloHelloHello”•“ Hello “.strip # => “Hello”
  15. 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. 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. 17. Core classes: Arrayarray = [1, 2, 3, 2]array << 4 # => [1, 2, 3, 2, 4]array.pop # => 4array.shift # => 1array.uniq # => [2,3]
  18. 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. 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. 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. 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. 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. 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. 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. 25. Fluxo: Loops • begin...end while • enquanto (...) faça (...)begin  alguma_coisaend while (condicao == true)
  26. 26. Fluxo: Loops • begin...end until • faça (...) até (...)begin  alguma_coisaend until (condicao == true)
  27. 27. Fluxo: Loops• Array#each[1,2,3,4].each do |item| puts itemend
  28. 28. Fluxo: Loops • Hash#each_pair{:first => 1, :second => 2}.each_pair do |key, value| puts "#{key} => #{value}"end
  29. 29. Fluxo: Loops • Integer#times • Integer#upto • Integer#downto5.times do |i| 0.upto(10) do |i| puts i puts iend end
  30. 30. Fluxo: Loops • String#each_line • String#each_char • String#each_byte"Hello world".each_line do |line| puts lineend
  31. 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. 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. 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. 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. 35. Funções• Argumentos defaultdef cumprimentar(nome = "anônimo")    "Olá, #{nome}!"end cumprimentar            # => "Olá, anônimo!"cumprimentar("pessoal") # => "Olá, pessoal!"
  36. 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. 37. Arrays e hashes implícitosarray = 1, 2, 3# => [1, 2, 3]hash = :um => 1, :dois => 2# => {:um => 1, :dois => 2}
  38. 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. 39. Rails“Web development that doesn’t hurt”
  40. 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. 41. Quem está usando?
  42. 42. Setup• $ gem install rails• $ rails new nome_do_projeto
  43. 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. 44. MVC
  45. 45. MVC
  46. 46. Models• Objetos que representam uma entidade no banco de dados$ rails generate model personagem nome:string level:integer exp:integer hp:integer
  47. 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. 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. 49. Models$ rails generate model {identificador} {atributo}:[ integer, boolean, string, text, float, decimal, datetime, timestamp, time, date, binary]
  50. 50. Models• Extendem ActiveRecord::Base class Personagem < ActiveRecord::Base end
  51. 51. Models• Extendem ActiveRecord::Base• Devem gerenciar o comportamento do objeto class Personagem < ActiveRecord::Base   def level_up!     level += 1     save   end end
  52. 52. Models• Criando registrosPersonagem.create(:nome => "Joselito", :level => 1, :exp => 0, :hp => 100)
  53. 53. Models• Encontrando registrosPersonagem.where(:level => 10).firstPersonagem.where(:level => 10).all
  54. 54. MVC
  55. 55. Controllers• Recebem a entrada do usuário• Fazem chamadas aos models• Renderizam uma view$ rails generate controller personagens
  56. 56. Controllers • Recebem a entrada do usuário • Fazem chamadas aos models • Renderizam uma viewclass PersonagensController < ApplicationControllerend
  57. 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. 58. MVC
  59. 59. Views• HTML / ERB• Interface de usuário
  60. 60. Bora codar?
  61. 61. Material para estudos• http://guides.rubyonrails.org/• http://railscasts.com/

×