Ruby
●
Orientado a objetos
●
Lenguaje dinámico
●
Partes funcionales (Bloques)
Slide 3
Slide 3 text
Ruby es simple en apariencia, pero
complejo por dentro, como el
cuerpo humano.
tratando de hacer que Ruby sea
natural, no simple.
Yukihiro Matsumoto 'matz'
Slide 4
Slide 4 text
¿Pero qué es eso del “metaprogramming”?
Slide 5
Slide 5 text
¿Pero qué es eso del metaprogramming?
Metaprogramming is the writing of computer
programs that write or manipulate other programs
(or themselves) as their data.
Wikipedia
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
¿Pero qué es eso del metaprogramming?
●
Manejo de mensajes cuyo destino no es conocido
●
Capacidad de creación y modificación de clases en
runtime
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
Debemos conocer el modelo de objetos de Ruby
Slide 10
Slide 10 text
Debemos conocer el modelo de objetos de Ruby
Slide 11
Slide 11 text
en ruby todo es un objeto
2.0.0-rc2 :001 > 1.class
=> Fixnum
Slide 12
Slide 12 text
en ruby todo se ejecuta dentro de un objeto
2.0.0-rc2 :002 > self
=> main
2.0.0-rc2 :003 > class MyClass
2.0.0-rc2 :004?> self
2.0.0-rc2 :005?> end
=> MyClass
2.0.0-rc2 :006 > self
=> main
2.0.0-rc2 :007 > class MyClass
2.0.0-rc2 :008?> def test
2.0.0-rc2 :009?> self
2.0.0-rc2 :010?> end
2.0.0-rc2 :011?> def self.class_method
2.0.0-rc2 :012?> self
2.0.0-rc2 :013?> end
2.0.0-rc2 :014?> end
=> nil
2.0.0-rc2 :015 > MyClass.new.test
=> #
2.0.0-rc2 :016 > MyClass.class_method
=> MyClass
Slide 13
Slide 13 text
MonkeyPatches
2.0.0-rc2 :017 > class String
2.0.0-rc2 :018?> def replace
2.0.0-rc2 :019?> "dont replace"
2.0.0-rc2 :020?> end
2.0.0-rc2 :021?> end
=> nil
2.0.0-rc2 :022 > "stast".replace
=> "dont replace"
Slide 14
Slide 14 text
Modelo de objetos de Ruby
●
La keyword class solo cambia de
contexto
●
Las clases también son objetos de la
clase Class
Slide 15
Slide 15 text
Modelo de objetos de Ruby
class MyClass
def my_method()
@var = 1
end
end
Obj1 = MyClass.new
Obj1.my_method
Slide 16
Slide 16 text
Modelo de objetos de Ruby
Slide 17
Slide 17 text
Jerarquía de Clases
class Book
include Printable
include Document
Ancestors # => [Book, Document, Printable, Object,
Kernel, BasicObject]
end