Upgrade to Pro — share decks privately, control downloads, hide ads and more …

¿Por qué Ruby? Descubre su expresividad

¿Por qué Ruby? Descubre su expresividad

"Aprender Ruby es como cualquier otro lenguaje de programación, es cuestión de cogerlo con ganas y ponerse a ello. Cuando empiezas a usarlo y lees código de otros programadores ves que usan expresiones que hacen que el código sea fácil de leer y expresivo, más natural que otros lenguajes.

En esta charla no pretendo enseñar a programar Ruby desde cero pero sí mostrar estas expresiones peculiares (idioms) del lenguaje para que el que no lo conozca le pique la curiosidad y para el que ya lo conozca tome ventaja del lenguaje."

¿Quieres saber algo acerca de nuestro ponente? ¿Quién eres Rafa?

Me llamo Rafa García, trabajo como desarrollador web en ideas4all. Me considero un entusiasta del software libre y cuando el tiempo lo permite intento colaborar en proyectos open source.

Zaragoza Ruby Jam Sessions

December 20, 2013
Tweet

More Decks by Zaragoza Ruby Jam Sessions

Other Decks in Programming

Transcript

  1. Ruby • Orientado a objetos • Interpretado • (Muy) Dinámico

    • Alto nivel • Basado en Perl, Smalltalk, Lisp, C, ... • Metaprogramación • ….
  2. Ruby • Orientado a objetos • Interpretado • (Muy) Dinámico

    • Alto nivel • Basado en Perl, Smalltalk, Lisp, C, ... • Metaprogramación • ….
  3. Ruby • Cercano al lenguaje natural • Fácil de leer

    y escribir • Eficiente • ¡DIVERTIDO! :-)))
  4. Orientado a objetos "D-Labs mola mucho".class # => String 42.class

    # => Fixnum nil.class # => NilClass [1, 2, 3].class # => Array (1..9).class # => Range
  5. Orientado a objetos "zARAGOZA-rb".swapcase # => "Zaragoza-RB" -12345.abs # =>

    12345 5 * 10 # => 50 5.*(10) # => Syntactic sugar
  6. Orientado a objetos Time.now # => 2013-06-27... Time.now.thursday? # =>

    true 2013.even? # => false 5.times{ puts "DRY" } # => 5
  7. True / nil / false if 0 "0 es verdadero"

    else "0 es falso" end # => "0 es verdadero" Todo es true excepto nil y false
  8. Convenio Exclamación acción destructiva array = [1, 2, 3] #

    => [1, 2, 3] array.reverse # => [3, 2, 1] array # => [1, 2, 3] array = [1, 2, 3] # => [1, 2, 3] array.reverse! # => [3, 2, 1] array # => [3, 2, 1]
  9. Return o no return • Cualquier expresión retorna un valor

    • Rara vez usas return* * Es una opinión personal
  10. Estructuras condicionales @user = nil if params[:id] @user = User.find(params[:id])

    else @user = User.new end De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
  11. Estructuras condicionales @user = if params[:id] User.find(params[:id]) else User.new end

    De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
  12. Estructuras condicionales Operador ternario: @user = params[:id] ? User.find(params[:id]) :

    User.new De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
  13. Estructuras condicionales if my_var return my_var else return another_value end

    if my_var my_var else another_value end http://www.zepho.com/download/ruby-idioms.pdf
  14. Estructuras condicionales if my_var return my_var else return another_value end

    if my_var my_var else another_value end my_var || another_value http://www.zepho.com/download/ruby-idioms.pdf
  15. Asignaciones @post = Post.find(params[:id]) if @post @post.destroy end De “Ruby

    mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
  16. Asignaciones @post = Post.find(params[:id]) if @post @post.destroy end if @post

    = Post.find(params[:id]) @post.destroy end De “Ruby mola y por qué” de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
  17. Asignaciones En paralelo: first, last, street = "Pi", "Filemon", "13

    rue del percebe" # => ["Pi", "Filemon", "13 rue del percebe"] first, last = last, first # => ["Filemon", "Pi"]
  18. Asignaciones @name = "Default name" unless @name @name ||= "Default

    name" http://www.zepho.com/download/ruby-idioms.pdf
  19. Asignaciones Variaciones: a = 1 # => 1 a +=

    1 # => 2 a *= 5 # => 10 http://www.zepho.com/download/ruby-idioms.pdf
  20. Clase Array (módulo enumerable) De “Ruby mola y por qué”

    de Sergio Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
  21. Operaciones foo = [1, 2, 3] bar = [3, 4,

    5] foo + bar # => [1, 2, 3, 3, 4, 5] foo * 2 # => [1, 2, 3, 1, 2, 3] foo & bar # => [3] foo | bar # => [1, 2, 3, 4, 5]
  22. Iteradores - inject foo.inject do |sum, n| sum + n

    end foo.inject{|sum, n| sum + n } # => 6
  23. Otros métodos [1, 1, 1, 2].uniq # => [1, 2]

    [1, [2, 3, [4]], 5].flatten # => [1, 2, 3, 4, 5] [nil, 1, nil, 2, 3].compact # => [1, 2, 3] [1, 2, 3].reverse # => [3, 2, 1] [2, 10, 1].sort # => [1, 2, 10]
  24. Otros métodos [1, 2, 3, 4].find {|n| n % 3

    == 0} # => 3 [1, 2, 3, 4].find_all {|n| n % 2 == 0} # => [2, 4]
  25. Ejemplos prácticos De “Ruby mola y por qué” de Sergio

    Gil - http://www.slideshare.net/sergio.gil/ruby-mola-y-por-qu
  26. Ejemplo 1 • Calcular el precio con IVA de la

    lista de precios: precios = [10, 12, 20, 50] pvp = [] precios.each do |precio| pvp << precio * 0.21 end pvp # => [2.1, 2.52, 4.2, 10.5]
  27. Ejemplo 1 • Calcular el precio con IVA de la

    lista de precios: precios = [10, 12, 20, 50] pvp = precios.map {|precio| precio * 0.21 }
  28. Ejemplo 2 • Calcula la suma total de una lista

    de precios: precios = [2.1, 2.52, 4.2, 10.5] total = 0 precios.each do |precio| total += precio end total # => 19.32
  29. Ejemplo 2 • Calcula la suma total de una lista

    de precios: precios = [2.1, 2.52, 4.2, 10.5] total = precios.inject{|sum, precio| sum + precio}
  30. Clases y métodos class Car def initialize(brand=nil, model=nil) @brand =

    brand @model = model end def brand @brand end def model @model end def color @color end def color=(new_color) @color = new_color end def brand=(new_brand) @brand = new_brand end def model=(new_model) @model= new_model end end
  31. Clases y métodos class Car attr_accessor :brand, :model, :color def

    initialize(brand=nil, model=nil) @brand = brand @model = model end end
  32. Clases y métodos Los métodos sus parámetros: • Obligatorios •

    Con valor por defecto • Aceptar hashes, arrays y bloques
  33. Clases y métodos Ejemplo: def foo(mandatory, value_not_needed=42, options={}) puts "#{mandatory}

    - #{value_not_needed}" puts "Options value: #{options}" unless options.empty? end