ÁGIL na  PRÁTICA
Ruby <ul><li>Criado em 1993 por Yukihiro Matsumoto, aka (Matz)
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   </li></ul>Igo Coelho  www.igocoelho.com.br
Instalação <ul><li>Pré-instalado no MAC
Em Windows instalador next, next, next
apt-get install ruby </li></ul>Igo Coelho  www.igocoelho.com.br
IRB <ul><li>Console interativo do Ruby
Basta digitar “irb” no console   </li></ul>Igo Coelho  www.igocoelho.com.br
Tudo é um objeto <ul><li>2 + 2 é equivalente a 2+(2) e 2.send(:+, 2)
2.class # => Fixnum
2.class.methods - Object.methods
“ ágil na prática”.capitalize   </li></ul>Igo Coelho  www.igocoelho.com.br
Aritmética e Conversões <ul><li>2.class == Fixnum
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  </li></ul>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.igo...
Strings <ul>São mutáveis, diferente do Java... >> texto = “valor inicial” => “valor inicial” >> texto << “ alterado” => “v...
Cadeias <ul>>> nome = “Igo Coelho” => “Igo Coelho” >> “Olá, #{nome}” => “Olá, Igo Coelho” >> “Olá, #{nome.upcase}” </ul>Ig...
Symbols <ul><li>Os Symbols començam com :   </li></ul>:action.class == Symbol   :action.to_s == “action”   :action == “act...
Expressões Booleanas <ul><li>Todos os objectos devolvem verdade excepto false e nil
false e true são as únicas instancias da FalseClass and TrueClass </li></ul>Igo Coelho  www.igocoelho.com.br
Upcoming SlideShare
Loading in …5
×

Ágil na Prática - Ruby

771 views
703 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
771
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ágil na Prática - Ruby

  1. 1. ÁGIL na PRÁTICA
  2. 2. Ruby <ul><li>Criado em 1993 por Yukihiro Matsumoto, aka (Matz)
  3. 3. Comunidade muito ativa
  4. 4. Baseada em Smalltalk, Lisp, Phyton, Perl, Eiffel, Ada
  5. 5. Genérica, interpretada, reflexiva , com garbage collection
  6. 6. Optimizada para os programadores e não para os compiladores.
  7. 7. Tudo são objectos. Não existem tipos primitivos
  8. 8. Tipagem Dinamica Forte
  9. 9. Muito produtiva: Menos linhas de código </li></ul>Igo Coelho www.igocoelho.com.br
  10. 10. Instalação <ul><li>Pré-instalado no MAC
  11. 11. Em Windows instalador next, next, next
  12. 12. apt-get install ruby </li></ul>Igo Coelho www.igocoelho.com.br
  13. 13. IRB <ul><li>Console interativo do Ruby
  14. 14. Basta digitar “irb” no console </li></ul>Igo Coelho www.igocoelho.com.br
  15. 15. Tudo é um objeto <ul><li>2 + 2 é equivalente a 2+(2) e 2.send(:+, 2)
  16. 16. 2.class # => Fixnum
  17. 17. 2.class.methods - Object.methods
  18. 18. “ ágil na prática”.capitalize </li></ul>Igo Coelho www.igocoelho.com.br
  19. 19. Aritmética e Conversões <ul><li>2.class == Fixnum
  20. 20. Fixnum.superclass == Integer
  21. 21. Integer.superclass == Numeric
  22. 22. 3.0.class == Float
  23. 23. Float.superclass == Numeric
  24. 24. 2/3 == 0 ; 2/3.0 # => 0.6666667 ; 2 + 3.0 == 5.0 ;
  25. 25. “ 2”.to_i + “3.0”.to_f == 5.0
  26. 26. 10000000000.class == Bignum ; Bignum.superclass
  27. 27. == Integer
  28. 28. 2 + “3” # => TypeError: String can’t be coerced into </li></ul>Igo Coelho www.igocoelho.com.br
  29. 29. Atribuições >> valor = 1 => 1 >> valor += 1 => 2 >> valor -= 1 => 1 Igo Coelho www.igocoelho.com.br
  30. 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. 31. Strings <ul>São mutáveis, diferente do Java... >> texto = “valor inicial” => “valor inicial” >> texto << “ alterado” => “valor inicial alterado” >> puts(texto) valor inicial alterado => nil </ul>Igo Coelho www.igocoelho.com.br
  32. 32. Cadeias <ul>>> nome = “Igo Coelho” => “Igo Coelho” >> “Olá, #{nome}” => “Olá, Igo Coelho” >> “Olá, #{nome.upcase}” </ul>Igo Coelho www.igocoelho.com.br
  33. 33. Symbols <ul><li>Os Symbols començam com : </li></ul>:action.class == Symbol :action.to_s == “action” :action == “action”.to_sym <ul><li>Existe apenas uma instancia de cada simbolo </li></ul>:action.equal?(:action) # => true ‘ action’.equal?(‘action’) # => false <ul><li>tipicamente são utilizados como chaves nas tabelas de Hash </li></ul>link_to “Home”, :controller => “home” Igo Coelho www.igocoelho.com.br
  34. 34. Expressões Booleanas <ul><li>Todos os objectos devolvem verdade excepto false e nil
  35. 35. false e true são as únicas instancias da FalseClass and TrueClass </li></ul>Igo Coelho www.igocoelho.com.br
  36. 36. Expressões Booleanas <ul>>> abc = nil => nil >> if (abc) >> puts (“Não imprime”) >> end => nil </ul>Igo Coelho www.igocoelho.com.br
  37. 37. Expressões Booleanas <ul>>> if (3 == 3) >> puts (“Agora imprime”) >> end Agora imprime => nil </ul>Igo Coelho www.igocoelho.com.br
  38. 38. Expressões Booleanas <ul>>> if (3) >> puts (“Imprime novamente”) >> end Imprime novamente => nil </ul>Igo Coelho www.igocoelho.com.br
  39. 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 &quot;#{@nome} diz olá” end end igo = Consultor.new(“Igo”) igo.diz_ola Igo Coelho www.igocoelho.com.br
  40. 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. 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. 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. 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. 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. 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. 46. Métodos <ul><li>Quando se invoca um método os parêntesis nos argumentos são opcionais
  47. 47. Os métodos são identificados pelos seus nomes apenas, não existe overloading com assinaturas de argumentos
  48. 48. Existem métodos de classe e métodos de instância
  49. 49. Os métodos podem ser públicos, protegidos ou privados.
  50. 50. A última expressão que é avaliada num método é o valor de retorno.
  51. 51. Os argumentos podem ter valores por defeito ex: def meu_metodo(a, b = ’senior’) </li></ul>Igo Coelho www.igocoelho.com.br
  52. 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. 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. 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. 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. 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. 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. 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. 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. 60. Testes <ul><li>A classe deve herdar de Test::Unit::TestCase
  61. 61. É necessario um require em 'test/unit'
  62. 62. O método setup prepara os testes
  63. 63. Os asserts são utilizados para as verificaões </li></ul>Igo Coelho www.igocoelho.com.br
  64. 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. 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. 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

×