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

Ruby

 Ruby

charla de ruby para continuum tour

Miguel Michelson Martinez

August 29, 2013
Tweet

More Decks by Miguel Michelson Martinez

Other Decks in Programming

Transcript

  1. Yukihiro "Matz" Matsumoto Ruby es creado por Yukihiro "Matz" Matsumoto,

    quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Monday, September 2, 13
  2. Lenguage enfocado en los humanos , no las máquinas Diseñado

    para la productividad y la diversión del desarrollador Monday, September 2, 13
  3. REFLEXIVO Permite examinar su estado y estructura o.class? o.superclass o.instance_of?

    o.is_a? o o.kind_of? o.respond_to? Name Monday, September 2, 13
  4. OOP Define tipos de datos Crea operaciones sobre esos tipos

    Instancia tipos de datos Monday, September 2, 13
  5. METAPROGRAMACION La metaprogramación consiste en escribir programas que escriben o

    manipulan otros programas (o a sí mismos) Ahorran la escritura de código Monday, September 2, 13
  6. Paquetes - Gems • RubyGems • 60M+ gems cut since

    July 2009. • rails, sinatra, rvm , nokogiri, etc.. etc.. Monday, September 2, 13
  7. Tipos de variables local = ... @instancia = .... @@clase

    = .... $global = ... CONSTANTE = ... Monday, September 2, 13
  8. Iteradores ary = [1,2,3,4,5] ary.each do | num | puts

    num end result: 1 2 3 4 5 Monday, September 2, 13
  9. Iteradores ary = [1,2,3,4,5] ary.each do | num | puts

    num end result: 1 2 3 4 5 Monday, September 2, 13
  10. Iteradores ary = [1,2,3,4,5] ary.each{ | num | puts num

    } result: 1 2 3 4 5 Monday, September 2, 13
  11. Iteradores ary = [1,2,3,4,5] ary.each{ | num | puts num

    } result: 1 2 3 4 5 Monday, September 2, 13
  12. Iteradores ary = [1,2,3,4,5] ary.each{ | num | puts num

    } result: 1 2 3 4 5 Monday, September 2, 13
  13. Iteradores ary = [1,2,3,4,5] ary.each{ | num | puts num

    } result: 1 2 3 4 5 Monday, September 2, 13
  14. Iteradores • each , inject , collect , select ,

    map ... Monday, September 2, 13
  15. Iteradores • each , inject , collect , select ,

    map ... • {}.each.class #=> Enumerator Monday, September 2, 13
  16. Iteradores • each , inject , collect , select ,

    map ... • {}.each.class #=> Enumerator • [].each.class #=> Enumerator Monday, September 2, 13
  17. Classes class Persona attr_accessor :nombre, :apellido end a = Persona.new

    a.nombre = “migue” #=>#<Persona:0x00718 @nombre="migue"> Monday, September 2, 13
  18. Getters / Setters • attr_accessor # getter y setter •

    attr_reader # getter • attr_writter # setter Monday, September 2, 13
  19. attr_writer If you write: attr_writer :edad That gets translated into:

    def age=(value) @age = value end def age @age end Monday, September 2, 13
  20. attr_accessor If you write: attr_writer :edad That gets translated into:

    def age=(value) @age = value end def age @age end Monday, September 2, 13
  21. Herencia class Animal def barf puts “barf barf!” end end

    class Human < Animal end Monday, September 2, 13
  22. Herencia class Animal def barf puts “barf barf!” end end

    class Human < Animal end Monday, September 2, 13
  23. Modulos / Mixins • Ruby no soporta herencia multiple •

    Pero soporta mixins Monday, September 2, 13
  24. class Person attr_accessor :actor include Validator end p = Person.new

    p.validate! #=> “no actor” Monday, September 2, 13
  25. Metaprogramacion • Permite la generación de metodos en tiempo de

    ejecución. • Sirve para escribir código que escribe codigo que escribe código. Monday, September 2, 13
  26. Metaprogramación • Con meta programación %w(user email food).each do |meth|

    define_method(meth){ @data[meth.to_sym] } end Monday, September 2, 13
  27. Metaprogramación • Con meta programación %w(user email food).each do |meth|

    define_method(meth){ @data[meth.to_sym] } end Monday, September 2, 13
  28. Method missing class ActiveRecord::Base def method_missing(meth, *args, &block) if meth.to_s

    =~ /^find_by_(.+)$/ run_find_by_method($1, *args, &block) else super end end Monday, September 2, 13
  29. Method missing class ActiveRecord::Base def method_missing(meth, *args, &block) if meth.to_s

    =~ /^find_by_(.+)$/ run_find_by_method($1, *args, &block) else super end end Monday, September 2, 13
  30. Comunidades • Ror-es google group • Irc ruby #freenode •

    http://www.ruby-forum.com/ • http://tryruby.org • railscasts.com • rubyweekly.com • rubyflow.com Monday, September 2, 13