"Ruby Mola (y por que)" por The Cocktail

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    "Ruby Mola (y por que)" por The Cocktail - Presentation Transcript

    1. Ruby Mola (y por qué) Sergio Gil Conferencia Rails noviembre de 2006 1
    2. Ruby • Simple • Orientado a objetos • Completo • Dinamico Ā“ Ruby y Ruby on Rails • Rails aprovecha al maximo la potencia y el Ā“ dinamismo de Ruby • DHH opina que no hubiera podido crear Rails con otro lenguaje. • Y sin embargo, esta infrautilizado Ā“
    3. 1 Un lenguaje muy dulce
    4. 1 Un lenguaje muy dulce 2 ā€˜De serie’
    5. 1 Un lenguaje muy dulce 2 ā€˜De serie’ Ā“ 3 Orientacion a objetos
    6. 1 Un lenguaje muy dulce 2 ā€˜De serie’ Ā“ 3 Orientacion a objetos Ā“ 4 Un lenguaje dinamico
    7. Un lenguaje muy dulce 1 Un lenguaje muy dulce 2 ā€˜De serie’ Ā“ 3 Orientacion a objetos Ā“ 4 Un lenguaje dinamico
    8. Un lenguaje muy dulce ā€œQuien no ha probado lo amargo, no sabe lo que es dulceā€ Ā“ PROVERBIO ALEM A N
    9. Un lenguaje muy dulce • Los idiomas influyen (Āædeterminan?) la manera de pensar de las personas • Los lenguajes, la de los programadores Ruby • Cercano a nuestra forma de pensar • Lo cual da una experiencia mejor • Ā”Es divertido! • Te hace sentir inteligente • ā€˜Ruby stays out of your way’
    10. Un lenguaje muy dulce Algunos ejemplos
    11. Un lenguaje muy dulce Ā“ Las estructuras devuelven el valor de la ultima expresion Ā“ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end
    12. Un lenguaje muy dulce Ā“ Las estructuras devuelven el valor de la ultima expresion Ā“ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end
    13. Un lenguaje muy dulce Ā“ Las estructuras devuelven el valor de la ultima expresion Ā“ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end
    14. Un lenguaje muy dulce Ā“ Las estructuras devuelven el valor de la ultima expresion Ā“ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end Ā“ Menos codigo 1
    15. Un lenguaje muy dulce Ā“ Las estructuras devuelven el valor de la ultima expresion Ā“ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end Ā“ Menos codigo 1 Menos errores 2
    16. Un lenguaje muy dulce “ Las estructuras devuelven el valor de la ultima expresion “ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end “ Menos codigo 1 Menos errores 2 “ ”Mas bonito! 3
    17. Un lenguaje muy dulce Ā“ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end
    18. Un lenguaje muy dulce Ā“ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end Mejor: if @post = Post.find(params[:id]) @post.destroy end
    19. Un lenguaje muy dulce Ā“ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end Mejor: if @post = Post.find(params[:id]) @post.destroy end
    20. Un lenguaje muy dulce Ā“ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end Mejor: if @post = Post.find(params[:id]) @post.destroy end • Y ademas nos repetimos menos Ā“
    21. Un lenguaje muy dulce Asignaciones condicionales
    22. Un lenguaje muy dulce Asignaciones condicionales @title = "T“tulo gen“rico" unless defined?(@title) ı e
    23. Un lenguaje muy dulce Asignaciones condicionales @title = "T“tulo gen“rico" unless defined?(@title) ı e @title ||= "T“tulo gen“rico" ı e
    24. Un lenguaje muy dulce Asignaciones condicionales @title = "T“tulo gen“rico" unless defined?(@title) ı e @title ||= "T“tulo gen“rico" ı e @heading = if defined?(@subsection) @subsection.title else @section.title end
    25. Un lenguaje muy dulce Asignaciones condicionales @title = "T“tulo gen“rico" unless defined?(@title) ı e @title ||= "T“tulo gen“rico" ı e @heading = if defined?(@subsection) @subsection.title else @section.title end @heading = ( @subsection || @section ).title
    26. Un lenguaje muy dulce Asignaciones condicionales @title = "T“tulo gen“rico" unless defined?(@title) ı e @title ||= "T“tulo gen“rico" ı e @heading = if defined?(@subsection) @subsection.title else @section.title end @heading = ( @subsection || @section ).title
    27. ā€˜De serie’ 1 Un lenguaje muy dulce 2 ā€˜De serie’ Ā“ 3 Orientacion a objetos Ā“ 4 Un lenguaje dinamico
    28. ā€˜De serie’ ā€œCualquier tecnologĀ“a ı distinguible de la magia es insuficientemente avanzadaā€ Ā“ CLE ON I
    29. ā€˜De serie’ • La clase Array1 es una de las joyas de las clases incluĀ“das ı • Le daremos un repaso para ejemplificar: • La potencia de las clases incluĀ“das ı • La potencia y el uso de los bloques • El ā€˜estilo Ruby’ 1 Ā“ Sin olvidar el modulo Enumerable
    30. ā€˜De serie’ @arr = [ 1, 2, 3, 4, 5 ]
    31. ā€˜De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: @arr.each do |item| puts item end
    32. ā€˜De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: @arr.each do |item| puts item end
    33. ā€˜De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: @arr.each do |item| puts item end
    34. ā€˜De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: Que es el for de toda la vida: @arr.each do |item| for item in @arr puts item puts item end end
    35. ā€˜De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: Que es el for de toda la vida: @arr.each do |item| for item in @arr puts item puts item end end
    36. ā€˜De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: Que es el for de toda la vida: @arr.each do |item| for item in @arr puts item puts item end end
    37. ā€˜De serie’ Lo bueno empieza ahora:
    38. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq [ 1, 1, 2, 3, 3 ].uniq >> [ 1, 2, 3 ]
    39. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ [ 1, 1 ], 2, [ 3, 3 ] ].flatten >> [ 1, 1, 2, 3, 3 ]
    40. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ 1, nil, 2, nil, 3 ].compact • .compact >> [ 1, 2, 3 ]
    41. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ 1, 1, 2, 3, 3 ].reverse • .compact >> [ 3, 3, 2, 1, 1 ] • .reverse
    42. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ 1, 3, 2, 1, 3 ].sort • .compact >> [ 1, 1, 2, 3, 3 ] • .reverse • .sort
    43. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten • .compact • .reverse • .sort Busqueda Ā“ [ 1, 2, 3 ].find {|n| n % 3 == 0 } >> 3 • .find [ 1, 2, 3 ].find {|n| n % 5 == 0 } >> nil
    44. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten • .compact • .reverse • .sort Busqueda Ā“ [ 1, 3, 5, 6 ].find all {|n| n % 3 == 0 } >> [ 3, 6 ] • .find [ 1, 2, 3 ].find all {|n| n % 5 == 0 } • .find all >> []
    45. ā€˜De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten • .compact • .reverse • .sort Busqueda Ā“ [ 1, 3, 5, 6 ].reject {|n| n % 3 == 0 } >> [ 1, 5] • .find [ 1, 2, 3 ].reject {|n| n % 5 == 0 } • .find all >> [ 1, 2, 3 ]
    46. ā€˜De serie’ Operaciones • ā€˜Suma’: + [ 1, 2 ] + [ 3, 4 ] >> [ 1, 2, 3, 4 ]
    47. ā€˜De serie’ Operaciones • ā€˜Suma’: + • ā€˜Resta’: - [ 1, 2, 3, 4 ] - [ 2, 3 ] >> [ 1, 4 ]
    48. ā€˜De serie’ Operaciones • ā€˜Suma’: + • ā€˜Resta’: - [ 1, 2 ] * 3 • ā€˜Repeticion’: * Ā“ >> [ 1, 2, 1, 2, 1, 2 ]
    49. ā€˜De serie’ Operaciones • ā€˜Suma’: + • ā€˜Resta’: - [ 0, 1, 2, 3, 4 ] & [ 0, 3, 6 ] • ā€˜Repeticion’: * Ā“ >> [ 0, 3 ] • Interseccion (∩): & Ā“
    50. ā€˜De serie’ Operaciones • ā€˜Suma’: + • ā€˜Resta’: - [ 1, 2, 3] | [ 3, 4, 5 ] • ā€˜Repeticion’: * Ā“ >> [ 1, 2, 3, 4, 5 ] • Interseccion (∩): & Ā“ • Union (∪): | Ā“
    51. ā€˜De serie’ Ā“ Nunca mas esto: @precios = ... @ivas = [] @precios.each do |precio| @ivas << precio * 0.16 end
    52. ā€˜De serie’ Ā“ Nunca mas esto: @precios = ... @ivas = [] @precios.each do |precio| @ivas << precio * 0.16 end ĀæNo es mejor esto? @ivas = @precios.map {|precio| precio * 0.16 }
    53. ā€˜De serie’ Por si hace falta otro ejemplo: @precios = ... @total = 0 @precios.each do |precio| @total += precio end
    54. ā€˜De serie’ Por si hace falta otro ejemplo: @precios = ... @total = 0 @precios.each do |precio| @total += precio end Ā“ ĀæNo es mas bonito asĀ“? ı @total = @precios.inject {|t, precio| t + precio }
    55. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos:
    56. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort
    57. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort
    58. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort
    59. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq
    60. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq
    61. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>
    62. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>
    63. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>
    64. ā€˜De serie’ ĀæY en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>
    65. ā€˜De serie’ Merece la pena conocer bien las clases incluĀ“das ı Ā“ Algunas clases y modulos que no perder de vista • Array • Range • Enumerable • Regexp • Hash • String • Numeric • Time
    66. Ā“ Orientacion a objetos 1 Un lenguaje muy dulce 2 ā€˜De serie’ Ā“ 3 Orientacion a objetos Ā“ 4 Un lenguaje dinamico
    67. Ā“ Orientacion a objetos ā€œLos prisioneros de la Ā“ caverna solo ven las sombras de los objetos.ā€ Ā“ PLAT ON
    68. Ā“ Orientacion a objetos En Ruby: • Todo es un objeto • Todo • De verdad, todo
    69. Ā“ Orientacion a objetos En serio, todo: • No hay ā€˜tipos primitivos’ • Los numeros son objetos Fixnum (o Float, o...) Ā“ • Las cadenas son objetos String • Incluso las clases son objetos Class2 2 Ā“ Lo cual permite tecnicas avanzadas que no veremos hoy =;-)
    70. Ā“ Orientacion a objetos De toda la vida: def sanitize title(title) sanitized title = ... return sanitized title end ... post.title = params[:title] post.sanitized title = sanitize title(post.title)
    71. Ā“ Orientacion a objetos Ā“ Ā“ Mas bonito y mas DRY : class Post < ActiveRecord::Base def sanitized title ... end end ... post.title = params[:title] post.sanitized title
    72. Ā“ Orientacion a objetos Mejor aun: Ā“ class String def sanitize ... end end ... post.title = params[:title] post.title.sanitize
    73. Ā“ Un lenguaje dinamico 1 Un lenguaje muy dulce 2 ā€˜De serie’ Ā“ 3 Orientacion a objetos Ā“ 4 Un lenguaje dinamico
    74. Ā“ Un lenguaje dinamico ā€œUn hombre no puede ˜ banarse dos veces en el mismo rĀ“o; ni el rĀ“o ni el ı ı hombre son los mismos, puesto que todo fluye.ā€ Ā“ HER A CLITO
    75. Ā“ Un lenguaje dinamico En Ruby: • No hay diferencia entre ā€˜tiempo de compilacion’ y ā€˜tiempo Ā“ Ā“ de ejecucion’ • Se pueden crear y modificar clases, redefinir o anadir ˜ Ā“ metodos, en cualquier momento • Hasta los tipos basicos, como Class u Object Ā“
    76. Ā“ Un lenguaje dinamico Ā“ ĀæComo creen si no que Rails... • ...anade metodos a clases ActiveRecord tras leer la base ˜ Ā“ de datos? (como name o incluso find by name()) • ...anade unos metodos tras ejecutar otros? ˜ Ā“ ˜ Ā“ (has many :posts anade el metodo posts, etc...) • ...modifica nuestros metodos para que ejecuten los filtros? Ā“ (before filter y after filter)
    77. “ Un lenguaje dinamico “ Nosotros tambien podemos redefinir
    78. “ Un lenguaje dinamico “ Nosotros tambien podemos redefinir class Fixnum def +(other) self - other end end
    79. “ Un lenguaje dinamico “ Nosotros tambien podemos redefinir class Fixnum def +(other) self - other end end >> 5 + 4
    80. “ Un lenguaje dinamico “ Nosotros tambien podemos redefinir class Fixnum def +(other) self - other end end >> 5 + 4 => 1
    81. Ā“ Un lenguaje dinamico Ā“ Un ejemplo mas cabal
    82. Ā“ Un lenguaje dinamico Ā“ Un ejemplo mas cabal class Post < ActiveRecord::Base end
    83. Ā“ Un lenguaje dinamico Ā“ Un ejemplo mas cabal class Post < ActiveRecord::Base def title=(title) write attribute(’title’, title) end end
    84. Ā“ Un lenguaje dinamico Ā“ Un ejemplo mas cabal class Post < ActiveRecord::Base def title=(title) write attribute(’title’, title) if self.new? write attribute(’sanitized title’, title.sanitize) end end end
    85. Preguntas Āæ ... ?
    86. Moraleja: Aprendan Ruby Merece la pena ”Y gracias por venir!
    87. SalamancaĀ 17 Madrid – 28020 EspaƱa tel.Ā +34Ā 91Ā 567Ā 0605 www.theĀ­cocktail.com 2
    88. Referencias • ā€œProgramming Rubyā€, Dave Thomas • ā€œThe Pragmatic Programmerā€, Adrew Hunt & Dave Thomas • http://www.ruby-lang.org/ • http://www.rubyonrails.org/ • http://www.cs.byu.edu/colloquia/2006Fall/presentations/Matz slides/ • http://es.wikipedia.org/wiki/Plat%C3%B3n • http://es.wikipedia.org/wiki/Her%C3%A1clito FotografĀ“as: ı • http://flickr.com/photos/rtv/290062998/in/pool-sweetcandy/ • http://microwave.gotovim.ru/ • http://www.xtec.es/lvallmaj/passeig/plato2.htm • http://www.flickr.com/photos/mtnpix/294515665/

    + enriqueplaceenriqueplace, 3 years ago

    custom

    2814 views, 0 favs, 3 embeds more stats

    "Ponencias de la Conferencia Rails Hispana

    El 24 more

    More info about this document

    CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

    Go to text version

    • Total Views 2814
      • 2652 on SlideShare
      • 162 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds
    • 152 views on http://rubisobrerieles.blogspot.com
    • 7 views on http://rubyonrails-cusco.blogspot.com
    • 3 views on http://www.planetacodigo.com

    more

    All embeds
    • 152 views on http://rubisobrerieles.blogspot.com
    • 7 views on http://rubyonrails-cusco.blogspot.com
    • 3 views on http://www.planetacodigo.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories