Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ruby, Rails e Diversão

1,987 views

Published on

Palestra ministrada dia 25 de novembro de 2008 (2008-11-25) para a turma de Bacharel em Sistemas de Informação da Faculdade Cenecista de Joinville (FCJ), em Joinville/SC.

Published in: Technology
  • Be the first to comment

Ruby, Rails e Diversão

  1. 1. Ruby, Rails e diversão Júlio Santos Monteiro <julio@monteiro.eti.br> 25 de Novembro de 2008
  2. 2. Júlio Santos Monteiro?
  3. 3. seja.a2c.com.br
  4. 4. Ruby on Rails desde 2006
  5. 5. <ul><li>Desenvolver é Engenharia </li></ul>
  6. 6. <ul><li>Programar é Arte </li></ul>
  7. 7. <ul><li>“ Beleza leva a felicidade. </li></ul><ul><li>Felicidade leva a produtividade. </li></ul><ul><li>Logo, beleza leva a produtividade.” </li></ul>(David Heinemeier Hansson)‏
  8. 8. “ Você pode reconhecer a verdade por sua beleza e simplicidade.” (Richard Feynman)‏
  9. 9. Por que o Ruby, se já temos Java, Python, Perl, PHP, Lisp, .Net, Obj-C, ActionScript, Erlang, Lua, Smalltalk, Haskell, (digite aqui o nome de uma linguagem) , etc?
  10. 10. 1993: Yukihiro Matsumoto quer uma linguagem mais humana.
  11. 11. 1993: Yukihiro Matsumoto faz uma linguagem mais humana.
  12. 12. 1993: Yukihiro Matsumoto faz uma linguagem menos máquina, mais humana.
  13. 13. 1993: Yukihiro Matsumoto cria o Java
  14. 14. 1993: Yukihiro Matsumoto cria o Java
  15. 15. 1993: Yukihiro Matsumoto cria o Ruby
  16. 16. O que é Ruby? <ul><li>Linguagem de Script </li></ul><ul><li>Interpretada (e compilável)‏ </li></ul><ul><li>Orientada a objetos (“100%”)‏ </li></ul><ul><li>Programação: </li></ul><ul><ul><li>Direta </li></ul></ul><ul><ul><li>Simples </li></ul></ul><ul><ul><li>Extensível </li></ul></ul><ul><ul><li>Portável </li></ul></ul>
  17. 17. <ul><li>Propósito geral </li></ul><ul><li>Voltada para realização de tarefas rápidas </li></ul><ul><li>Vantagem sobre linguagens compiladas </li></ul><ul><li>Poderosa </li></ul><ul><li>Facilitadora </li></ul>O que é Ruby?
  18. 18. <ul><li>Linguagem prática (Perl)‏ </li></ul><ul><li>Orientação a objetos (Smalltalk)‏ </li></ul><ul><li>Metaprogramação (Smalltalk, Lisp)‏ </li></ul><ul><li>Sintaxe (Smalltalk, Eiffel e Ada)‏ </li></ul><ul><li>Tratamento de exceções (Java e Python)‏ </li></ul>Influências
  19. 19. Características <ul><ul><li>Não possui procedimentos nem funções </li></ul></ul><ul><ul><li>Tudo é um objeto </li></ul></ul><ul><ul><li>Objetos possuem métodos </li></ul></ul><ul><ul><li>Métodos são mensagens </li></ul></ul><ul><ul><li>Até mesmo operadores matemáticos são métodos </li></ul></ul>
  20. 20. <ul><li>1 .class </li></ul>
  21. 21. <ul><li>1 .class </li></ul><ul><li>=> “Fixnum” </li></ul>
  22. 23. 1
  23. 24. 1 Ei, 1, me responda a seguinte pergunta: class
  24. 25. 1 Fixnum
  25. 26. <ul><li>1 .send(“ class ”)‏ </li></ul>
  26. 27. <ul><li>1 .send(“ class ”)‏ </li></ul><ul><li>=> “Fixnum” </li></ul>
  27. 28. Palestra “A Beleza do Ruby”, de Glenn Vanderburg
  28. 29. Observações <ul><li>Ruby não é perfeita </li></ul><ul><li>Ruby não é a única linguagem linda </li></ul><ul><li>Gostos variam com frequência </li></ul>
  29. 30. Blocos
  30. 31. Blocos <ul><li>Closures. Funções anônimas. Lambdas. </li></ul><ul><li>Sintaxe concisa (similar a Smalltalk). </li></ul><ul><li>Duas sintaxes </li></ul><ul><li>do |a, b| </li></ul><ul><li># código com a, b </li></ul><ul><li>end </li></ul>{|a, b| # código com a, b }
  31. 32. Blocos obj.each do |e| e.save! end array.group_by {|a| a.type} (&quot;a&quot;..&quot;z&quot;).each do |char| puts char end
  32. 33. Blocos File.open(&quot;config.txt&quot;) do |in| in.each_line do |line| process_config_line(line)‏ end end (0..100).collect {|n| User.find(n).destroy }
  33. 34. Sintaxe para servir <ul><li>Código simples tende a ser mais legível sem pontuação </li></ul><ul><li>Código complexo tende a ser mais legível com pontuação </li></ul><ul><li>Tudo em Ruby, geralmente, tem duas maneiras de ser feito </li></ul>
  34. 35. Exemplos <ul><li>Parênteses é opcional </li></ul><ul><li>Ponto-e-vírgula é opcional </li></ul><ul><li>Duas formas de blocos </li></ul>
  35. 36. Classes são abertas
  36. 37. Classes são abertas <ul><li>Toda classe pode ser alterada </li></ul><ul><li>Liberdade total </li></ul><ul><li>Flexibilidade no código </li></ul><ul><li>“ Ruby Way” </li></ul>
  37. 38. Exemplos <ul><li>class NilClass </li></ul><ul><li>def blank? </li></ul><ul><li>true </li></ul><ul><li>end </li></ul><ul><li>end </li></ul>class String def blank? self == &quot;&quot; end end
  38. 39. Você, amanhã, na sua empresa: “Chefinho, vamos usar Ruby?”
  39. 40. O Chefe: “Por que nós iriamos usar Ruby?”
  40. 41. Você: “A linguagem é bonita, fácil de escrever, não é verbalmente pesada, e é extensível.”
  41. 42. O Chefe: “F*da-se. Para quê tudo isso?Vamos continuar com nosso excelente _ _ _ _.”
  42. 43. Qual a utilidade disso tudo?
  43. 44. Código simples
  44. 45. Pouco código
  45. 46. É mais fácil achar e corrigir um bug em: a) 100 LOC b) 10.000 LOC c) 10^42 LOC
  46. 47. Facilidade de correção
  47. 48. Facilidade para extensão
  48. 49. Menos tempo de desenvolvimento
  49. 50. Menos tempo para entregar um produto
  50. 52. (Obs: quando estiver preparando a apresentação, colocar aqui blá-blá-blá sobre a história do Rails e da 37signals)‏
  51. 53. Direto ao ponto:
  52. 54. No Rails, você se preocupa com a Lógica de Negócio
  53. 55. Classe Livro: Pertence a um Usuário, tem várias Tags e Tópicos, e tem um Upload. O subtítulo deve ter entre 0 e 256 caracteres A descrição deve ter entre 1 e 1024 caracteres. Tem uma máquina de estados com vários estados e eventos.
  54. 56. class Book < ActiveRecord::Base # Relacionamentos belongs_to :user has_and_belongs_to_many :tags has_and_belongs_to_many :topics has_one :upload # Validações validates_length_of :subtitle, :mininum => 0, :maximum => 256, :allow_nil => true validates_length_of :description, :mininum => 1, :maximum => 1024
  55. 57. acts_as_state_machine :initial => :registred state :passive state :registred state :waiting_processing state :in_processing state :preview state :published state :unpublished event :register do transitions :from => :passive, :to => :registred end # ... end
  56. 58. Hey, mas o framework ______ também faz isso!
  57. 59. Rails usa Ruby
  58. 60. Rails agora é (pelo jeito) mainstream
  59. 67. Observações:
  60. 68. Ruby é difícil
  61. 69. Ruby é difícil pois é diferente
  62. 70. Ruby é difícil pois é diferente e é meta-programável
  63. 71. Ruby on Rails é difícil
  64. 72. Ruby on Rails é difícil pois é um framework
  65. 73. Ruby on Rails é difícil pois é um framework e usa Ruby.
  66. 74. Mas vale apena, ao menos aprender para conhecer e aproveitar suas idéias.
  67. 75. Obrigado! Júlio Santos Monteiro <julio@monteiro.eti.br> 25 de Novembro de 2008

×