SlideShare uma empresa Scribd logo
1 de 35
ÁGIL na  PRÁTICA
Ruby ,[object Object]
Comunidade muito ativa
Baseada em Smalltalk, Lisp, Phyton, Perl, Eiffel, Ada
Genérica, interpretada, reflexiva , com  garbage collection
Optimizada para os programadores e não para os compiladores.
Tudo são objectos. Não existem tipos primitivos
Tipagem Dinamica Forte
Muito produtiva: Menos linhas de código   Igo Coelho  www.igocoelho.com.br
Instalação ,[object Object]
Em Windows instalador next, next, next
apt-get install ruby Igo Coelho  www.igocoelho.com.br
IRB ,[object Object]
Basta digitar “irb” no console   Igo Coelho  www.igocoelho.com.br
Tudo é um objeto ,[object Object]
2.class # => Fixnum
2.class.methods - Object.methods
“ ágil na prática”.capitalize   Igo Coelho  www.igocoelho.com.br
Aritmética e Conversões ,[object Object]
Fixnum.superclass == Integer
Integer.superclass == Numeric
3.0.class == Float
Float.superclass == Numeric
2/3 == 0 ; 2/3.0 # => 0.6666667 ; 2 + 3.0 == 5.0 ;
“ 2”.to_i + “3.0”.to_f == 5.0
10000000000.class == Bignum ;  Bignum.superclass
== Integer
2 + “3” # => TypeError: String can’t be coerced into  Igo Coelho  www.igocoelho.com.br
Atribuições >> valor = 1 => 1 >> valor += 1 => 2 >> valor -= 1 => 1 Igo Coelho  www.igocoelho.com.br
Atribuições >> a = 2 => 2 >> b = 3 => 3 >> a, b = b, a => [3, 2] >> puts a 3 => nil >> puts b 2 => nil Igo Coelho  www.igocoelho.com.br
Strings ,[object Object],Igo Coelho  www.igocoelho.com.br
Cadeias ,[object Object],Igo Coelho  www.igocoelho.com.br
Symbols ,[object Object],:action.class == Symbol   :action.to_s == “action”   :action == “action”.to_sym   ,[object Object],:action.equal?(:action) # => true   ‘ action’.equal?(‘action’) # => false   ,[object Object],link_to “Home”, :controller => “home” Igo Coelho  www.igocoelho.com.br
Expressões Booleanas ,[object Object]
false e true são as únicas instancias da FalseClass and TrueClass Igo Coelho  www.igocoelho.com.br

Mais conteúdo relacionado

Destaque

Kinder Morgan Texas Pipeline
Kinder Morgan Texas PipelineKinder Morgan Texas Pipeline
Kinder Morgan Texas Pipelineguest3fe7e1
 
如何接入微游戏
如何接入微游戏如何接入微游戏
如何接入微游戏seasonxu
 
Design Learnings From Viral Applications Presentation
Design Learnings From Viral Applications PresentationDesign Learnings From Viral Applications Presentation
Design Learnings From Viral Applications Presentationseasonxu
 
Laryngectomy Rehabiliation1
Laryngectomy Rehabiliation1Laryngectomy Rehabiliation1
Laryngectomy Rehabiliation1sms
 

Destaque (6)

A Flor Rosalina
A Flor RosalinaA Flor Rosalina
A Flor Rosalina
 
Kinder Morgan Texas Pipeline
Kinder Morgan Texas PipelineKinder Morgan Texas Pipeline
Kinder Morgan Texas Pipeline
 
如何接入微游戏
如何接入微游戏如何接入微游戏
如何接入微游戏
 
Design Learnings From Viral Applications Presentation
Design Learnings From Viral Applications PresentationDesign Learnings From Viral Applications Presentation
Design Learnings From Viral Applications Presentation
 
puppy ads
puppy adspuppy ads
puppy ads
 
Laryngectomy Rehabiliation1
Laryngectomy Rehabiliation1Laryngectomy Rehabiliation1
Laryngectomy Rehabiliation1
 

Semelhante a Ágil na Prática - Ruby

Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Marco Mendes
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoFabricio NErdmann
 
MongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesMongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesPedro Menezes
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaMilfont Consulting
 
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Jackson Meires
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 

Semelhante a Ágil na Prática - Ruby (20)

Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 
Workshop Python.1
Workshop Python.1Workshop Python.1
Workshop Python.1
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Mini Curso de Python para Coding Dojo
Mini Curso de Python para Coding DojoMini Curso de Python para Coding Dojo
Mini Curso de Python para Coding Dojo
 
A linguagem Python
A linguagem Python A linguagem Python
A linguagem Python
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
MongoDB com a Turma do Chaves
MongoDB com a Turma do ChavesMongoDB com a Turma do Chaves
MongoDB com a Turma do Chaves
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
Javascript
Javascript Javascript
Javascript
 
Combinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma práticaCombinando OO e Funcional em javascript de forma prática
Combinando OO e Funcional em javascript de forma prática
 
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 

Mais de Igo Coelho

Ágil na Prática
Ágil na PráticaÁgil na Prática
Ágil na PráticaIgo Coelho
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração ContínuaIgo Coelho
 
Integração de Sistema com ESB
Integração de Sistema com ESBIntegração de Sistema com ESB
Integração de Sistema com ESBIgo Coelho
 
Web Services com Apache Axis
Web Services com Apache AxisWeb Services com Apache Axis
Web Services com Apache AxisIgo Coelho
 
Conhecendo Spring Framework
Conhecendo Spring FrameworkConhecendo Spring Framework
Conhecendo Spring FrameworkIgo Coelho
 

Mais de Igo Coelho (7)

Ágil na Prática
Ágil na PráticaÁgil na Prática
Ágil na Prática
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
TDD
TDDTDD
TDD
 
Integração de Sistema com ESB
Integração de Sistema com ESBIntegração de Sistema com ESB
Integração de Sistema com ESB
 
Web Services com Apache Axis
Web Services com Apache AxisWeb Services com Apache Axis
Web Services com Apache Axis
 
Conhecendo Spring Framework
Conhecendo Spring FrameworkConhecendo Spring Framework
Conhecendo Spring Framework
 

Ágil na Prática - Ruby

  • 1. ÁGIL na PRÁTICA
  • 2.
  • 4. Baseada em Smalltalk, Lisp, Phyton, Perl, Eiffel, Ada
  • 5. Genérica, interpretada, reflexiva , com garbage collection
  • 6. Optimizada para os programadores e não para os compiladores.
  • 7. Tudo são objectos. Não existem tipos primitivos
  • 9. Muito produtiva: Menos linhas de código Igo Coelho www.igocoelho.com.br
  • 10.
  • 11. Em Windows instalador next, next, next
  • 12. apt-get install ruby Igo Coelho www.igocoelho.com.br
  • 13.
  • 14. Basta digitar “irb” no console Igo Coelho www.igocoelho.com.br
  • 15.
  • 16. 2.class # => Fixnum
  • 18. “ ágil na prática”.capitalize Igo Coelho www.igocoelho.com.br
  • 19.
  • 24. 2/3 == 0 ; 2/3.0 # => 0.6666667 ; 2 + 3.0 == 5.0 ;
  • 25. “ 2”.to_i + “3.0”.to_f == 5.0
  • 26. 10000000000.class == Bignum ; Bignum.superclass
  • 28. 2 + “3” # => TypeError: String can’t be coerced into Igo Coelho www.igocoelho.com.br
  • 29. Atribuições >> valor = 1 => 1 >> valor += 1 => 2 >> valor -= 1 => 1 Igo Coelho www.igocoelho.com.br
  • 30. Atribuições >> a = 2 => 2 >> b = 3 => 3 >> a, b = b, a => [3, 2] >> puts a 3 => nil >> puts b 2 => nil Igo Coelho www.igocoelho.com.br
  • 31.
  • 32.
  • 33.
  • 34.
  • 35. false e true são as únicas instancias da FalseClass and TrueClass Igo Coelho www.igocoelho.com.br
  • 36.
  • 37.
  • 38.
  • 39. Definir uma classe e instanciar um objecto class Consultor def initialize(nome) # As váriaveis de instancia começam com @ @nome = nome end def diz_ola # Método de instancia puts "#{@nome} diz olá” end end igo = Consultor.new(“Igo”) igo.diz_ola Igo Coelho www.igocoelho.com.br
  • 40. Herança de Classes # Programador é um Consultor e extende com carct. adicionais class Programador < Consultor def initialize(nome, ide_favorito) super(nome) @ide_favorito = ide_favorito end # redefinimos o método diz_ola no Consultor def diz_ola super puts &quot;O IDE favorito é #{@ide_favorito}” end end hugo = Programador.new(“Hugo”, “TextMate”) hugo.diz_ola Igo Coelho www.igocoelho.com.br
  • 41. Tipagem class PatoNormal def faz_quack “ Quack!” end end class PatoEstranho def faz_quack “ Queck!” end end Igo Coelho www.igocoelho.com.br
  • 42. Tipagem class CriadorDePatos def castiga(pato) pato.faz_quack end end pato1 = PatoNormal.new pato2 = PatoEstranho.new c = CriadorDePatos.new puts c.castiga(pato1) puts c.castiga(pato2) Igo Coelho www.igocoelho.com.br
  • 43. Métodos Getter e Setter class Consultor def initialize(nome) self.nome = nome end def nome @nome end def nome=(nome) @nome = nome end end consultor = Consultor.new(&quot;Pedro&quot;) puts consultor.nome consultor.nome = &quot;David&quot; Igo Coelho www.igocoelho.com.br
  • 44. Getter e Setter... attr_accessor class Consultor attr_accessor :nome def initialize(nome) self.nome = nome end end consultor = Consultor.new(&quot;Paulo&quot;) puts consultor.nome consultor.nome = &quot;David&quot; puts consultor.nome Igo Coelho www.igocoelho.com.br
  • 45. Comparação A comparação entre objetos é feita através do método == reescreva e diga como os objetos devem ser comparados class Aluno def ==(outro) self.cpf == outro.cpf end end Igo Coelho www.igocoelho.com.br
  • 46.
  • 47. Os métodos são identificados pelos seus nomes apenas, não existe overloading com assinaturas de argumentos
  • 48. Existem métodos de classe e métodos de instância
  • 49. Os métodos podem ser públicos, protegidos ou privados.
  • 50. A última expressão que é avaliada num método é o valor de retorno.
  • 51. Os argumentos podem ter valores por defeito ex: def meu_metodo(a, b = ’senior’) Igo Coelho www.igocoelho.com.br
  • 52. Metaprogramação class Aluno # não sabe nada End class Professor def ensina(aluno) def aluno.escreve “ Sei escrever” end end end Igo Coelho www.igocoelho.com.br
  • 53. Metaprogramação juca = Aluno.new juca.respond_to? :escreve => false professor = Professor.new professor.ensina juca juca.escreve => Sei escrever Igo Coelho www.igocoelho.com.br
  • 54. Array lista = Array.new lista << “primeiro” lista << “segundo” puts lista[1] => “segundo” lista = [1, 2, “string”, :simbolo] lista[2] => “string” Igo Coelho www.igocoelho.com.br
  • 55. Hash mapa = Hash.new mapa[:item1] = “lala” mapa['item2'] = “lele” mapa[p] = “lulu” Por serem únicos e imutáveis, símbolos são as melhores opções para chaves em Hashes Igo Coelho www.igocoelho.com.br
  • 56. Hash Uma técnica de programação muito conhecida é o uso de hashes como parâmetros únicos em métodos def transfere(argumentos) destino = argumentos [:destino] valor = argumentos [:valor] end transfere({:destino => outra_conta, :valor => 100.0}) transfere :destino => outra_conta, :valor => 100.0 Igo Coelho www.igocoelho.com.br
  • 57. if, unless e o operador ? if count > 10 message = “Try again” else message = “Enter command” end raise “Unauthorized” if !current_user.admin? raise “Unauthorized” unless current_user.admin? status = input > 10 ? “Number too big” : “ok” Igo Coelho www.igocoelho.com.br
  • 58. Iterators: while, until, and for while count < 100 puts count count += 1 end for user in @users if user.pago? puts user break end end until count > 5 puts count count += 1 end puts(count += 1) until count > 5 Igo Coelho www.igocoelho.com.br
  • 59. case case x when 0 puts &quot;Zero&quot; when 1, 2..5 puts &quot;Second branch&quot; when 6..10 puts &quot;Third branch&quot; when x.downcase == “peter” puts “Seventh branch” else puts &quot;Eight branch&quot; end Igo Coelho www.igocoelho.com.br
  • 60.
  • 61. É necessario um require em 'test/unit'
  • 62. O método setup prepara os testes
  • 63. Os asserts são utilizados para as verificaões Igo Coelho www.igocoelho.com.br
  • 64. Testes require 'test/unit' class CalculadoraTest < Test::Unit::TestCase def setup @calc = Calculadora.new end def test_somar assert_equal 4, @calc.somar(2, 2) end end Igo Coelho www.igocoelho.com.br
  • 65. Stubs class Clock def time Time.now end end class Event def initialize(start_time) @start_time = start_time end def started?(clock = Clock.new) clock.time > @start_time end end Igo Coelho www.igocoelho.com.br
  • 66. Stubs class StubClock def time Time.parse('2007-07-09 19:00') end end clock = StubClock.new meeting = Event.new(Time.parse('2007-07-09 18:00')) pub = Event.new(Time.parse('2007-07-09 20:00')) assert_equal true, meeting.started?(clock) assert_equal false, pub.started?(clock) * Use require 'time' Igo Coelho www.igocoelho.com.br