ruby on rails (introducción a ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · ruby...
TRANSCRIPT
![Page 1: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/1.jpg)
Ruby on Rails(Introduccion a Ruby, la venganza)
Esteban Manchado [email protected]
15 de mayo de 2006
![Page 2: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/2.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 3: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/3.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 4: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/4.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:
• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 5: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/5.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:
• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 6: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/6.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:
• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 7: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/7.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:
• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 8: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/8.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:
• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 9: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/9.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:• Bucles (iteradores)
• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 10: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/10.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)
• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 11: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/11.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)
• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 12: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/12.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos
• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 13: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/13.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 14: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/14.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 15: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/15.jpg)
Bloques
• Trozo de codigo, con parametros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos metodos
• Son la base del lenguaje
• Varios usos tıpicos:• Bucles (iteradores)• Guardar funciones anonimas (para mas tarde)• Ejecutar algo con un recurso (gestion automatica)• Inicializacion de atributos• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parametros entre barras: |i|)
![Page 16: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/16.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
![Page 17: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/17.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
![Page 18: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/18.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|puts "Me han pulsado"
end
![Page 19: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/19.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|puts "Me han pulsado"
end
![Page 20: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/20.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|puts "Me han pulsado"
end
File.open("foo") do |f|# Hacemos algo con f, que se cierra solo al final
end
![Page 21: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/21.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|puts "Me han pulsado"
end
File.open("foo") do |f|# Hacemos algo con f, que se cierra solo al final
end
![Page 22: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/22.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|puts "Me han pulsado"
end
File.open("foo") do |f|# Hacemos algo con f, que se cierra solo al final
end
UnaClase.new do |o|o.attr1 = ""o.attr2 = 30
end
![Page 23: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/23.jpg)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|puts "Me han pulsado"
end
File.open("foo") do |f|# Hacemos algo con f, que se cierra solo al final
end
UnaClase.new do |o|o.attr1 = ""o.attr2 = 30
end
![Page 24: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/24.jpg)
Bucles (otra vez)
a = 0while a < 10 do a += 1 end
loop doa += 1puts "Bucle manual y aburrido"break if a > 20
end
for i in 35..40 do puts "Mejor, pero no" end
![Page 25: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/25.jpg)
Bucles estilo Ruby (otra vez)
0.upto(9) do puts "Mejor" end
loop doa += 1puts "Bucle manual y aburrido"break if a > 20
end
for i in 35..40 do puts "Mejor, pero no" end
![Page 26: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/26.jpg)
Bucles estilo Ruby (otra vez)
0.upto(9) do puts "Mejor" end
10.times do puts "Bucle rubyano" end
for i in 35..40 do puts "Mejor, pero no" end
![Page 27: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/27.jpg)
Bucles estilo Ruby (otra vez)
0.upto(9) do puts "Mejor" end
10.times do puts "Bucle rubyano" end
(35..40).each do |i| puts "Mucho mejor, #{i}" end
![Page 28: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/28.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 29: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/29.jpg)
Clases basicas de datos
• String
• Integer
• Array
• Hash
![Page 30: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/30.jpg)
Clases basicas de datos
• String
• Integer
• Array
• Hash
![Page 31: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/31.jpg)
Clases basicas de datos
• String
• Integer
• Array
• Hash
![Page 32: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/32.jpg)
Clases basicas de datos
• String
• Integer
• Array
• Hash
![Page 33: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/33.jpg)
String
irb(main):001:0> "Curso de Ruby".reverse=> "ybuR ed osruC"irb(main):002:0> "Curso de Ruby".capitalize=> "Curso de ruby"irb(main):003:0> "Curso de Ruby".upcase=> "CURSO DE RUBY"irb(main):004:0> "Curso de Ruby".downcase=> "curso de ruby"irb(main):005:0> "Curso de Ruby".size=> 13irb(main):006:0> "Curso de Ruby".split(" ")=> ["Curso", "de", "Ruby"]
![Page 34: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/34.jpg)
String
irb(main):001:0> "Curso de Ruby".reverse=> "ybuR ed osruC"irb(main):002:0> "Curso de Ruby".capitalize=> "Curso de ruby"irb(main):003:0> "Curso de Ruby".upcase=> "CURSO DE RUBY"irb(main):004:0> "Curso de Ruby".downcase=> "curso de ruby"irb(main):005:0> "Curso de Ruby".size=> 13irb(main):006:0> "Curso de Ruby".split(" ")=> ["Curso", "de", "Ruby"]
![Page 35: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/35.jpg)
String
irb(main):001:0> "Curso de Ruby".reverse=> "ybuR ed osruC"irb(main):002:0> "Curso de Ruby".capitalize=> "Curso de ruby"irb(main):003:0> "Curso de Ruby".upcase=> "CURSO DE RUBY"irb(main):004:0> "Curso de Ruby".downcase=> "curso de ruby"irb(main):005:0> "Curso de Ruby".size=> 13irb(main):006:0> "Curso de Ruby".split(" ")=> ["Curso", "de", "Ruby"]
![Page 36: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/36.jpg)
String
irb(main):001:0> "Curso de Ruby".reverse=> "ybuR ed osruC"irb(main):002:0> "Curso de Ruby".capitalize=> "Curso de ruby"irb(main):003:0> "Curso de Ruby".upcase=> "CURSO DE RUBY"irb(main):004:0> "Curso de Ruby".downcase=> "curso de ruby"irb(main):005:0> "Curso de Ruby".size=> 13irb(main):006:0> "Curso de Ruby".split(" ")=> ["Curso", "de", "Ruby"]
![Page 37: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/37.jpg)
String
irb(main):001:0> "Curso de Ruby".reverse=> "ybuR ed osruC"irb(main):002:0> "Curso de Ruby".capitalize=> "Curso de ruby"irb(main):003:0> "Curso de Ruby".upcase=> "CURSO DE RUBY"irb(main):004:0> "Curso de Ruby".downcase=> "curso de ruby"irb(main):005:0> "Curso de Ruby".size=> 13irb(main):006:0> "Curso de Ruby".split(" ")=> ["Curso", "de", "Ruby"]
![Page 38: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/38.jpg)
String
irb(main):001:0> "Curso de Ruby".reverse=> "ybuR ed osruC"irb(main):002:0> "Curso de Ruby".capitalize=> "Curso de ruby"irb(main):003:0> "Curso de Ruby".upcase=> "CURSO DE RUBY"irb(main):004:0> "Curso de Ruby".downcase=> "curso de ruby"irb(main):005:0> "Curso de Ruby".size=> 13irb(main):006:0> "Curso de Ruby".split(" ")=> ["Curso", "de", "Ruby"]
![Page 39: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/39.jpg)
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each{|linea| puts "Una lınea: #{linea}"}
Una lınea: Curso de RubyUna lınea: in tha house!=> "Curso de Ruby\nin tha house!"irb(main):011:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 4}=> trueirb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}=> falseirb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}=> true
![Page 40: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/40.jpg)
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each{|linea| puts "Una lınea: #{linea}"}
Una lınea: Curso de RubyUna lınea: in tha house!=> "Curso de Ruby\nin tha house!"irb(main):011:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 4}=> trueirb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}=> falseirb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}=> true
![Page 41: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/41.jpg)
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each{|linea| puts "Una lınea: #{linea}"}
Una lınea: Curso de RubyUna lınea: in tha house!=> "Curso de Ruby\nin tha house!"irb(main):011:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 4}=> trueirb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}=> falseirb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}=> true
![Page 42: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/42.jpg)
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each{|linea| puts "Una lınea: #{linea}"}
Una lınea: Curso de RubyUna lınea: in tha house!=> "Curso de Ruby\nin tha house!"irb(main):011:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 4}=> trueirb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}=> falseirb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}=> true
![Page 43: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/43.jpg)
Integer
irb(main):002:0> 3.times { print "Ho! " }; putsHo! Ho! Ho!=> nilirb(main):003:0> 3.upto(5) {|i| puts "Voy por el #{i}"}Voy por el 3Voy por el 4Voy por el 5=> 3irb(main):004:0> 5.nonzero?=> 5irb(main):005:0> 0.nonzero?=> nil
![Page 44: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/44.jpg)
Integer
irb(main):002:0> 3.times { print "Ho! " }; putsHo! Ho! Ho!=> nilirb(main):003:0> 3.upto(5) {|i| puts "Voy por el #{i}"}Voy por el 3Voy por el 4Voy por el 5=> 3irb(main):004:0> 5.nonzero?=> 5irb(main):005:0> 0.nonzero?=> nil
![Page 45: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/45.jpg)
Integer
irb(main):002:0> 3.times { print "Ho! " }; putsHo! Ho! Ho!=> nilirb(main):003:0> 3.upto(5) {|i| puts "Voy por el #{i}"}Voy por el 3Voy por el 4Voy por el 5=> 3irb(main):004:0> 5.nonzero?=> 5irb(main):005:0> 0.nonzero?=> nil
![Page 46: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/46.jpg)
Integer
irb(main):002:0> 3.times { print "Ho! " }; putsHo! Ho! Ho!=> nilirb(main):003:0> 3.upto(5) {|i| puts "Voy por el #{i}"}Voy por el 3Voy por el 4Voy por el 5=> 3irb(main):004:0> 5.nonzero?=> 5irb(main):005:0> 0.nonzero?=> nil
![Page 47: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/47.jpg)
Array
irb(main):001:0> lista = [2,5,3]=> [2, 5, 3]irb(main):002:0> lista << 8 # lista.push(8)=> [2, 5, 3, 8]irb(main):003:0> lista.sort=> [2, 3, 5, 8]irb(main):004:0> lista.map {|i| i*2}=> [4, 10, 6, 16]irb(main):005:0> lista.each {|i| print "#{i} "}2 5 3 8 => [2, 5, 3, 8]irb(main):006:0> lista.join(" | ")=> "2 | 5 | 3 | 8"
![Page 48: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/48.jpg)
Array
irb(main):001:0> lista = [2,5,3]=> [2, 5, 3]irb(main):002:0> lista << 8 # lista.push(8)=> [2, 5, 3, 8]irb(main):003:0> lista.sort=> [2, 3, 5, 8]irb(main):004:0> lista.map {|i| i*2}=> [4, 10, 6, 16]irb(main):005:0> lista.each {|i| print "#{i} "}2 5 3 8 => [2, 5, 3, 8]irb(main):006:0> lista.join(" | ")=> "2 | 5 | 3 | 8"
![Page 49: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/49.jpg)
Array
irb(main):001:0> lista = [2,5,3]=> [2, 5, 3]irb(main):002:0> lista << 8 # lista.push(8)=> [2, 5, 3, 8]irb(main):003:0> lista.sort=> [2, 3, 5, 8]irb(main):004:0> lista.map {|i| i*2}=> [4, 10, 6, 16]irb(main):005:0> lista.each {|i| print "#{i} "}2 5 3 8 => [2, 5, 3, 8]irb(main):006:0> lista.join(" | ")=> "2 | 5 | 3 | 8"
![Page 50: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/50.jpg)
Array
irb(main):001:0> lista = [2,5,3]=> [2, 5, 3]irb(main):002:0> lista << 8 # lista.push(8)=> [2, 5, 3, 8]irb(main):003:0> lista.sort=> [2, 3, 5, 8]irb(main):004:0> lista.map {|i| i*2}=> [4, 10, 6, 16]irb(main):005:0> lista.each {|i| print "#{i} "}2 5 3 8 => [2, 5, 3, 8]irb(main):006:0> lista.join(" | ")=> "2 | 5 | 3 | 8"
![Page 51: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/51.jpg)
Array
irb(main):001:0> lista = [2,5,3]=> [2, 5, 3]irb(main):002:0> lista << 8 # lista.push(8)=> [2, 5, 3, 8]irb(main):003:0> lista.sort=> [2, 3, 5, 8]irb(main):004:0> lista.map {|i| i*2}=> [4, 10, 6, 16]irb(main):005:0> lista.each {|i| print "#{i} "}2 5 3 8 => [2, 5, 3, 8]irb(main):006:0> lista.join(" | ")=> "2 | 5 | 3 | 8"
![Page 52: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/52.jpg)
Array
irb(main):001:0> lista = [2,5,3]=> [2, 5, 3]irb(main):002:0> lista << 8 # lista.push(8)=> [2, 5, 3, 8]irb(main):003:0> lista.sort=> [2, 3, 5, 8]irb(main):004:0> lista.map {|i| i*2}=> [4, 10, 6, 16]irb(main):005:0> lista.each {|i| print "#{i} "}2 5 3 8 => [2, 5, 3, 8]irb(main):006:0> lista.join(" | ")=> "2 | 5 | 3 | 8"
![Page 53: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/53.jpg)
Hash
irb(main):001:0> asoc = {"nombre" => "pepe","casado" => "no"}
=> {"casado"=>"no", "nombre"=>"pepe"}irb(main):002:0> asoc["nombre"]=> "pepe"irb(main):003:0> asoc.has_key? "nombre"=> trueirb(main):004:0> asoc.keys=> ["casado", "nombre"]irb(main):005:0> asoc.values=> ["no", "pepe"]irb(main):006:0> asoc.each_pair {|k,v| puts "#{k}: #{v}"}casado: nonombre: pepe=> {"casado"=>"no", "nombre"=>"pepe"}
![Page 54: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/54.jpg)
Hash
irb(main):001:0> asoc = {"nombre" => "pepe","casado" => "no"}
=> {"casado"=>"no", "nombre"=>"pepe"}irb(main):002:0> asoc["nombre"]=> "pepe"irb(main):003:0> asoc.has_key? "nombre"=> trueirb(main):004:0> asoc.keys=> ["casado", "nombre"]irb(main):005:0> asoc.values=> ["no", "pepe"]irb(main):006:0> asoc.each_pair {|k,v| puts "#{k}: #{v}"}casado: nonombre: pepe=> {"casado"=>"no", "nombre"=>"pepe"}
![Page 55: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/55.jpg)
Hash
irb(main):001:0> asoc = {"nombre" => "pepe","casado" => "no"}
=> {"casado"=>"no", "nombre"=>"pepe"}irb(main):002:0> asoc["nombre"]=> "pepe"irb(main):003:0> asoc.has_key? "nombre"=> trueirb(main):004:0> asoc.keys=> ["casado", "nombre"]irb(main):005:0> asoc.values=> ["no", "pepe"]irb(main):006:0> asoc.each_pair {|k,v| puts "#{k}: #{v}"}casado: nonombre: pepe=> {"casado"=>"no", "nombre"=>"pepe"}
![Page 56: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/56.jpg)
Hash
irb(main):001:0> asoc = {"nombre" => "pepe","casado" => "no"}
=> {"casado"=>"no", "nombre"=>"pepe"}irb(main):002:0> asoc["nombre"]=> "pepe"irb(main):003:0> asoc.has_key? "nombre"=> trueirb(main):004:0> asoc.keys=> ["casado", "nombre"]irb(main):005:0> asoc.values=> ["no", "pepe"]irb(main):006:0> asoc.each_pair {|k,v| puts "#{k}: #{v}"}casado: nonombre: pepe=> {"casado"=>"no", "nombre"=>"pepe"}
![Page 57: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/57.jpg)
Hash
irb(main):001:0> asoc = {"nombre" => "pepe","casado" => "no"}
=> {"casado"=>"no", "nombre"=>"pepe"}irb(main):002:0> asoc["nombre"]=> "pepe"irb(main):003:0> asoc.has_key? "nombre"=> trueirb(main):004:0> asoc.keys=> ["casado", "nombre"]irb(main):005:0> asoc.values=> ["no", "pepe"]irb(main):006:0> asoc.each_pair {|k,v| puts "#{k}: #{v}"}casado: nonombre: pepe=> {"casado"=>"no", "nombre"=>"pepe"}
![Page 58: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/58.jpg)
Hash
irb(main):001:0> asoc = {"nombre" => "pepe","casado" => "no"}
=> {"casado"=>"no", "nombre"=>"pepe"}irb(main):002:0> asoc["nombre"]=> "pepe"irb(main):003:0> asoc.has_key? "nombre"=> trueirb(main):004:0> asoc.keys=> ["casado", "nombre"]irb(main):005:0> asoc.values=> ["no", "pepe"]irb(main):006:0> asoc.each_pair {|k,v| puts "#{k}: #{v}"}casado: nonombre: pepe=> {"casado"=>"no", "nombre"=>"pepe"}
![Page 59: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/59.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 60: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/60.jpg)
Modulos
• ((Declaran)) nuevos espacios de nombres
• Son explıcitos, con la sintaxis module Foo ... end
• La orden require no los incluye en un espacio nuevo
• Esto permite redefinir el contexto actual, p.ej.
• Como las clases, pero no se pueden crear ejemplares demodulos
• Sirven tambien para la tecnica Mix-in
• Las funciones en modulos se declaran como defFoo.funcion (o con module function)
![Page 61: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/61.jpg)
Modulos
• ((Declaran)) nuevos espacios de nombres
• Son explıcitos, con la sintaxis module Foo ... end
• La orden require no los incluye en un espacio nuevo
• Esto permite redefinir el contexto actual, p.ej.
• Como las clases, pero no se pueden crear ejemplares demodulos
• Sirven tambien para la tecnica Mix-in
• Las funciones en modulos se declaran como defFoo.funcion (o con module function)
![Page 62: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/62.jpg)
Modulos
• ((Declaran)) nuevos espacios de nombres
• Son explıcitos, con la sintaxis module Foo ... end
• La orden require no los incluye en un espacio nuevo
• Esto permite redefinir el contexto actual, p.ej.
• Como las clases, pero no se pueden crear ejemplares demodulos
• Sirven tambien para la tecnica Mix-in
• Las funciones en modulos se declaran como defFoo.funcion (o con module function)
![Page 63: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/63.jpg)
Modulos
• ((Declaran)) nuevos espacios de nombres
• Son explıcitos, con la sintaxis module Foo ... end
• La orden require no los incluye en un espacio nuevo
• Esto permite redefinir el contexto actual, p.ej.
• Como las clases, pero no se pueden crear ejemplares demodulos
• Sirven tambien para la tecnica Mix-in
• Las funciones en modulos se declaran como defFoo.funcion (o con module function)
![Page 64: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/64.jpg)
Modulos
• ((Declaran)) nuevos espacios de nombres
• Son explıcitos, con la sintaxis module Foo ... end
• La orden require no los incluye en un espacio nuevo
• Esto permite redefinir el contexto actual, p.ej.
• Como las clases, pero no se pueden crear ejemplares demodulos
• Sirven tambien para la tecnica Mix-in
• Las funciones en modulos se declaran como defFoo.funcion (o con module function)
![Page 65: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/65.jpg)
Modulos
• ((Declaran)) nuevos espacios de nombres
• Son explıcitos, con la sintaxis module Foo ... end
• La orden require no los incluye en un espacio nuevo
• Esto permite redefinir el contexto actual, p.ej.
• Como las clases, pero no se pueden crear ejemplares demodulos
• Sirven tambien para la tecnica Mix-in
• Las funciones en modulos se declaran como defFoo.funcion (o con module function)
![Page 66: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/66.jpg)
Modulos
• ((Declaran)) nuevos espacios de nombres
• Son explıcitos, con la sintaxis module Foo ... end
• La orden require no los incluye en un espacio nuevo
• Esto permite redefinir el contexto actual, p.ej.
• Como las clases, pero no se pueden crear ejemplares demodulos
• Sirven tambien para la tecnica Mix-in
• Las funciones en modulos se declaran como defFoo.funcion (o con module function)
![Page 67: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/67.jpg)
Ejemplo de modulos
module Fooclass Bar; end
end
f = Foo::Bar.new
class Foo::Bardef dia_aciago; puts "Asi hago algo"; end
end
f.dia_aciago # "Asi hago algo"
![Page 68: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/68.jpg)
Ejemplo de modulos
module Fooclass Bar; end
end
f = Foo::Bar.new
class Foo::Bardef dia_aciago; puts "Asi hago algo"; end
end
f.dia_aciago # "Asi hago algo"
![Page 69: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/69.jpg)
Ejemplo de modulos
module Fooclass Bar; end
end
f = Foo::Bar.new
class Foo::Bardef dia_aciago; puts "Asi hago algo"; end
end
f.dia_aciago # "Asi hago algo"
![Page 70: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/70.jpg)
Ejemplo de modulos
module Fooclass Bar; end
end
f = Foo::Bar.new
class Foo::Bardef dia_aciago; puts "Asi hago algo"; end
end
f.dia_aciago # "Asi hago algo"
![Page 71: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/71.jpg)
Ejemplo de modulos
module Fooclass Bar; end
end
f = Foo::Bar.new
class Foo::Bardef dia_aciago; puts "Asi hago algo"; end
end
f.dia_aciago # "Asi hago algo"
![Page 72: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/72.jpg)
Ejemplo de modulos
module Fooclass Bar; end
end
f = Foo::Bar.new
class Foo::Bardef dia_aciago; puts "Asi hago algo"; end
end
f.dia_aciago # "Asi hago algo"
![Page 73: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/73.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 74: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/74.jpg)
Sımbolos, ¿ser o estar?
• ((Cosa rara)) de Ruby
• Ninguna funcionalidad adicional, mera ((forma de hablar))
• Parecidos a ristras inmutables
• Sintaxis → :simbolo
• Ayudan a identificar la intencion
• No hay equivalente en otros lenguajes populares, en los que seusarıan ristras (¿be = ((ser)) o ((estar))?)
![Page 75: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/75.jpg)
Sımbolos, ¿ser o estar?
• ((Cosa rara)) de Ruby
• Ninguna funcionalidad adicional, mera ((forma de hablar))
• Parecidos a ristras inmutables
• Sintaxis → :simbolo
• Ayudan a identificar la intencion
• No hay equivalente en otros lenguajes populares, en los que seusarıan ristras (¿be = ((ser)) o ((estar))?)
![Page 76: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/76.jpg)
Sımbolos, ¿ser o estar?
• ((Cosa rara)) de Ruby
• Ninguna funcionalidad adicional, mera ((forma de hablar))
• Parecidos a ristras inmutables
• Sintaxis → :simbolo
• Ayudan a identificar la intencion
• No hay equivalente en otros lenguajes populares, en los que seusarıan ristras (¿be = ((ser)) o ((estar))?)
![Page 77: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/77.jpg)
Sımbolos, ¿ser o estar?
• ((Cosa rara)) de Ruby
• Ninguna funcionalidad adicional, mera ((forma de hablar))
• Parecidos a ristras inmutables
• Sintaxis → :simbolo
• Ayudan a identificar la intencion
• No hay equivalente en otros lenguajes populares, en los que seusarıan ristras (¿be = ((ser)) o ((estar))?)
![Page 78: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/78.jpg)
Sımbolos, ¿ser o estar?
• ((Cosa rara)) de Ruby
• Ninguna funcionalidad adicional, mera ((forma de hablar))
• Parecidos a ristras inmutables
• Sintaxis → :simbolo
• Ayudan a identificar la intencion
• No hay equivalente en otros lenguajes populares, en los que seusarıan ristras (¿be = ((ser)) o ((estar))?)
![Page 79: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/79.jpg)
Sımbolos, ¿ser o estar?
• ((Cosa rara)) de Ruby
• Ninguna funcionalidad adicional, mera ((forma de hablar))
• Parecidos a ristras inmutables
• Sintaxis → :simbolo
• Ayudan a identificar la intencion
• No hay equivalente en otros lenguajes populares, en los que seusarıan ristras (¿be = ((ser)) o ((estar))?)
![Page 80: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/80.jpg)
Ejemplos de sımbolos
File.open(’ruta’)obj.send(:metodo) # Aunque vale obj.send(’metodo’)
var[’clave’] = ’valor’var[:opcion] = ’valor’
find(:conds => ["1 = :foo", {:foo => ’bar’}],:limit => 3,:order_by => "uncampo DESC")
set_table_name ’una_tabla’valides_presence_of :uncampo
![Page 81: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/81.jpg)
Ejemplos de sımbolos
File.open(’ruta’)obj.send(:metodo) # Aunque vale obj.send(’metodo’)
var[’clave’] = ’valor’var[:opcion] = ’valor’
find(:conds => ["1 = :foo", {:foo => ’bar’}],:limit => 3,:order_by => "uncampo DESC")
set_table_name ’una_tabla’valides_presence_of :uncampo
![Page 82: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/82.jpg)
Ejemplos de sımbolos
File.open(’ruta’)obj.send(:metodo) # Aunque vale obj.send(’metodo’)
var[’clave’] = ’valor’var[:opcion] = ’valor’
find(:conds => ["1 = :foo", {:foo => ’bar’}],:limit => 3,:order_by => "uncampo DESC")
set_table_name ’una_tabla’valides_presence_of :uncampo
![Page 83: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/83.jpg)
Ejemplos de sımbolos
File.open(’ruta’)obj.send(:metodo) # Aunque vale obj.send(’metodo’)
var[’clave’] = ’valor’var[:opcion] = ’valor’
find(:conds => ["1 = :foo", {:foo => ’bar’}],:limit => 3,:order_by => "uncampo DESC")
set_table_name ’una_tabla’valides_presence_of :uncampo
![Page 84: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/84.jpg)
Ejemplos de sımbolos
File.open(’ruta’)obj.send(:metodo) # Aunque vale obj.send(’metodo’)
var[’clave’] = ’valor’var[:opcion] = ’valor’
find(:conds => ["1 = :foo", {:foo => ’bar’}],:limit => 3,:order_by => "uncampo DESC")
set_table_name ’una_tabla’valides_presence_of :uncampo
![Page 85: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/85.jpg)
Ejemplos de sımbolos
File.open(’ruta’)obj.send(:metodo) # Aunque vale obj.send(’metodo’)
var[’clave’] = ’valor’var[:opcion] = ’valor’
find(:conds => ["1 = :foo", {:foo => ’bar’}],:limit => 3,:order_by => "uncampo DESC")
set_table_name ’una_tabla’valides_presence_of :uncampo
![Page 86: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/86.jpg)
Ejemplos de sımbolos
File.open(’ruta’)obj.send(:metodo) # Aunque vale obj.send(’metodo’)
var[’clave’] = ’valor’var[:opcion] = ’valor’
find(:conds => ["1 = :foo", {:foo => ’bar’}],:limit => 3,:order_by => "uncampo DESC")
set_table_name ’una_tabla’valides_presence_of :uncampo
![Page 87: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/87.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 88: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/88.jpg)
Que
• La herencia en Ruby no es multiple
• Es conveniente compartir funcionalidad generica
• O bien obligar a que ciertas clases compartan ciertos metodos
• La solucion en Ruby es el Mixin
![Page 89: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/89.jpg)
Que
• La herencia en Ruby no es multiple
• Es conveniente compartir funcionalidad generica
• O bien obligar a que ciertas clases compartan ciertos metodos
• La solucion en Ruby es el Mixin
![Page 90: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/90.jpg)
Que
• La herencia en Ruby no es multiple
• Es conveniente compartir funcionalidad generica
• O bien obligar a que ciertas clases compartan ciertos metodos
• La solucion en Ruby es el Mixin
![Page 91: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/91.jpg)
Que
• La herencia en Ruby no es multiple
• Es conveniente compartir funcionalidad generica
• O bien obligar a que ciertas clases compartan ciertos metodos
• La solucion en Ruby es el Mixin
![Page 92: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/92.jpg)
Como
• Se anaden metodos a un modulo, y luego se incluyen en lasclases
• Los metodos se anaden como si fueran del ejemplar, no de laclase (no se pueden llamar directamente)
• En la clase, se hace un include Modulo...
• ...y automagicamente se anaden los nuevos metodos
• Lo mas guay es que el enlace es dinamico...
• ...ası que si anadimos metodo al modulo, los podemos usar
• Se puede hacer para un objeto concreto, con el metodoextend
![Page 93: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/93.jpg)
Como
• Se anaden metodos a un modulo, y luego se incluyen en lasclases
• Los metodos se anaden como si fueran del ejemplar, no de laclase (no se pueden llamar directamente)
• En la clase, se hace un include Modulo...
• ...y automagicamente se anaden los nuevos metodos
• Lo mas guay es que el enlace es dinamico...
• ...ası que si anadimos metodo al modulo, los podemos usar
• Se puede hacer para un objeto concreto, con el metodoextend
![Page 94: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/94.jpg)
Como
• Se anaden metodos a un modulo, y luego se incluyen en lasclases
• Los metodos se anaden como si fueran del ejemplar, no de laclase (no se pueden llamar directamente)
• En la clase, se hace un include Modulo...
• ...y automagicamente se anaden los nuevos metodos
• Lo mas guay es que el enlace es dinamico...
• ...ası que si anadimos metodo al modulo, los podemos usar
• Se puede hacer para un objeto concreto, con el metodoextend
![Page 95: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/95.jpg)
Como
• Se anaden metodos a un modulo, y luego se incluyen en lasclases
• Los metodos se anaden como si fueran del ejemplar, no de laclase (no se pueden llamar directamente)
• En la clase, se hace un include Modulo...
• ...y automagicamente se anaden los nuevos metodos
• Lo mas guay es que el enlace es dinamico...
• ...ası que si anadimos metodo al modulo, los podemos usar
• Se puede hacer para un objeto concreto, con el metodoextend
![Page 96: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/96.jpg)
Como
• Se anaden metodos a un modulo, y luego se incluyen en lasclases
• Los metodos se anaden como si fueran del ejemplar, no de laclase (no se pueden llamar directamente)
• En la clase, se hace un include Modulo...
• ...y automagicamente se anaden los nuevos metodos
• Lo mas guay es que el enlace es dinamico...
• ...ası que si anadimos metodo al modulo, los podemos usar
• Se puede hacer para un objeto concreto, con el metodoextend
![Page 97: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/97.jpg)
Como
• Se anaden metodos a un modulo, y luego se incluyen en lasclases
• Los metodos se anaden como si fueran del ejemplar, no de laclase (no se pueden llamar directamente)
• En la clase, se hace un include Modulo...
• ...y automagicamente se anaden los nuevos metodos
• Lo mas guay es que el enlace es dinamico...
• ...ası que si anadimos metodo al modulo, los podemos usar
• Se puede hacer para un objeto concreto, con el metodoextend
![Page 98: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/98.jpg)
Como
• Se anaden metodos a un modulo, y luego se incluyen en lasclases
• Los metodos se anaden como si fueran del ejemplar, no de laclase (no se pueden llamar directamente)
• En la clase, se hace un include Modulo...
• ...y automagicamente se anaden los nuevos metodos
• Lo mas guay es que el enlace es dinamico...
• ...ası que si anadimos metodo al modulo, los podemos usar
• Se puede hacer para un objeto concreto, con el metodoextend
![Page 99: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/99.jpg)
Ejemplo de Mixin
module Enumerabledef collect# Algo con each
enddef grep# Algo con each
endend
class Arrayinclude Enumerabledef each; ...; end
end
# Ya tenemos collect, grep, etc. en Array
![Page 100: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/100.jpg)
Ejemplo de Mixin
module Enumerabledef collect# Algo con each
enddef grep# Algo con each
endend
class Arrayinclude Enumerabledef each; ...; end
end
# Ya tenemos collect, grep, etc. en Array
![Page 101: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/101.jpg)
Ejemplo de Mixin
module Enumerabledef collect# Algo con each
enddef grep# Algo con each
endend
class Arrayinclude Enumerabledef each; ...; end
end
# Ya tenemos collect, grep, etc. en Array
![Page 102: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/102.jpg)
Ejemplo de Mixin
module Enumerabledef collect# Algo con each
enddef grep# Algo con each
endend
class Arrayinclude Enumerabledef each; ...; end
end
# Ya tenemos collect, grep, etc. en Array
![Page 103: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/103.jpg)
Modulos utiles para Mixin
• Enumerable (all?, find, grep, include?, sort)
• Observable (add observer, changed?,notify observers)
• Comparable (varios operadores, a partir de <=>)
![Page 104: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/104.jpg)
Modulos utiles para Mixin
• Enumerable (all?, find, grep, include?, sort)
• Observable (add observer, changed?,notify observers)
• Comparable (varios operadores, a partir de <=>)
![Page 105: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/105.jpg)
Modulos utiles para Mixin
• Enumerable (all?, find, grep, include?, sort)
• Observable (add observer, changed?,notify observers)
• Comparable (varios operadores, a partir de <=>)
![Page 106: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/106.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 107: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/107.jpg)
Ahora lo ves, ahora no lo ves
• Ruby es muy dinamico
• ¿Casi? todo se puede redefinir (¡fumadas sin fronteras!)
• Las definiciones de clase se ((ejecutan))...
• ...ası que podemos ((ejecutar)) cosas al definir clases
• alias method, attr reader, protected, public,module function...
• Declarar una clase es definir una nueva constante(mayusculas, Remember, Sammy Jenkins?)
• Se pueden anadir definiciones a modulos y clases
![Page 108: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/108.jpg)
Ahora lo ves, ahora no lo ves
• Ruby es muy dinamico
• ¿Casi? todo se puede redefinir (¡fumadas sin fronteras!)
• Las definiciones de clase se ((ejecutan))...
• ...ası que podemos ((ejecutar)) cosas al definir clases
• alias method, attr reader, protected, public,module function...
• Declarar una clase es definir una nueva constante(mayusculas, Remember, Sammy Jenkins?)
• Se pueden anadir definiciones a modulos y clases
![Page 109: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/109.jpg)
Ahora lo ves, ahora no lo ves
• Ruby es muy dinamico
• ¿Casi? todo se puede redefinir (¡fumadas sin fronteras!)
• Las definiciones de clase se ((ejecutan))...
• ...ası que podemos ((ejecutar)) cosas al definir clases
• alias method, attr reader, protected, public,module function...
• Declarar una clase es definir una nueva constante(mayusculas, Remember, Sammy Jenkins?)
• Se pueden anadir definiciones a modulos y clases
![Page 110: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/110.jpg)
Ahora lo ves, ahora no lo ves
• Ruby es muy dinamico
• ¿Casi? todo se puede redefinir (¡fumadas sin fronteras!)
• Las definiciones de clase se ((ejecutan))...
• ...ası que podemos ((ejecutar)) cosas al definir clases
• alias method, attr reader, protected, public,module function...
• Declarar una clase es definir una nueva constante(mayusculas, Remember, Sammy Jenkins?)
• Se pueden anadir definiciones a modulos y clases
![Page 111: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/111.jpg)
Ahora lo ves, ahora no lo ves
• Ruby es muy dinamico
• ¿Casi? todo se puede redefinir (¡fumadas sin fronteras!)
• Las definiciones de clase se ((ejecutan))...
• ...ası que podemos ((ejecutar)) cosas al definir clases
• alias method, attr reader, protected, public,module function...
• Declarar una clase es definir una nueva constante(mayusculas, Remember, Sammy Jenkins?)
• Se pueden anadir definiciones a modulos y clases
![Page 112: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/112.jpg)
Ahora lo ves, ahora no lo ves
• Ruby es muy dinamico
• ¿Casi? todo se puede redefinir (¡fumadas sin fronteras!)
• Las definiciones de clase se ((ejecutan))...
• ...ası que podemos ((ejecutar)) cosas al definir clases
• alias method, attr reader, protected, public,module function...
• Declarar una clase es definir una nueva constante(mayusculas, Remember, Sammy Jenkins?)
• Se pueden anadir definiciones a modulos y clases
![Page 113: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/113.jpg)
Ahora lo ves, ahora no lo ves
• Ruby es muy dinamico
• ¿Casi? todo se puede redefinir (¡fumadas sin fronteras!)
• Las definiciones de clase se ((ejecutan))...
• ...ası que podemos ((ejecutar)) cosas al definir clases
• alias method, attr reader, protected, public,module function...
• Declarar una clase es definir una nueva constante(mayusculas, Remember, Sammy Jenkins?)
• Se pueden anadir definiciones a modulos y clases
![Page 114: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/114.jpg)
Ejemplo
class UnaClaseattr_reader :foo # Igual a def foo; @foo; endattr_accessor :bar # Tambien crea bar=
protected # Esto es un metododef metodo_protegidoend
end
module UnModulodef f1end
module_function :f1end
![Page 115: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/115.jpg)
Ejemplo
class UnaClaseattr_reader :foo # Igual a def foo; @foo; endattr_accessor :bar # Tambien crea bar=
protected # Esto es un metododef metodo_protegidoend
end
module UnModulodef f1end
module_function :f1end
![Page 116: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/116.jpg)
Ejemplo
class UnaClaseattr_reader :foo # Igual a def foo; @foo; endattr_accessor :bar # Tambien crea bar=
protected # Esto es un metododef metodo_protegidoend
end
module UnModulodef f1end
module_function :f1end
![Page 117: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/117.jpg)
Ejemplo
class UnaClaseattr_reader :foo # Igual a def foo; @foo; endattr_accessor :bar # Tambien crea bar=
protected # Esto es un metododef metodo_protegidoend
end
module UnModulodef f1end
module_function :f1end
![Page 118: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/118.jpg)
Gamberrada Zen
class OtraClase; end
o = OtraClase.newif o.class == OtraClase
class Stringdef nuevo_metodo
raise "Esto no estaba antes"end
endend
if "".respond_to?(:nuevo_metodo)"Cuidado con el".nuevo_metodo
end
![Page 119: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/119.jpg)
Gamberrada Zen
class OtraClase; end
o = OtraClase.newif o.class == OtraClase
class Stringdef nuevo_metodo
raise "Esto no estaba antes"end
endend
if "".respond_to?(:nuevo_metodo)"Cuidado con el".nuevo_metodo
end
![Page 120: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/120.jpg)
Gamberrada Zen
class OtraClase; end
o = OtraClase.newif o.class == OtraClase
class Stringdef nuevo_metodo
raise "Esto no estaba antes"end
endend
if "".respond_to?(:nuevo_metodo)"Cuidado con el".nuevo_metodo
end
![Page 121: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/121.jpg)
Gamberrada Zen
class OtraClase; end
o = OtraClase.newif o.class == OtraClase
class Stringdef nuevo_metodo
raise "Esto no estaba antes"end
endend
if "".respond_to?(:nuevo_metodo)"Cuidado con el".nuevo_metodo
end
![Page 122: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/122.jpg)
Gamberrada Zen
class OtraClase; end
o = OtraClase.newif o.class == OtraClase
class Stringdef nuevo_metodo
raise "Esto no estaba antes"end
endend
if "".respond_to?(:nuevo_metodo)"Cuidado con el".nuevo_metodo
end
![Page 123: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/123.jpg)
Mas ejemplos de dinamismo
class Stringdef metodo_nuevo; puts "Soy nuevo"; endalias_method :old_strip, :stripdef strip; puts "Tariro, tariro..."; old_strip; end
end"".metodo_nuevo" con espacios, sin ropa ".strip
def ClaseNueva; endmiClase = quieresString ? String : ClaseNuevaobj = miClase.new
![Page 124: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/124.jpg)
Mas ejemplos de dinamismo
class Stringdef metodo_nuevo; puts "Soy nuevo"; endalias_method :old_strip, :stripdef strip; puts "Tariro, tariro..."; old_strip; end
end"".metodo_nuevo" con espacios, sin ropa ".strip
def ClaseNueva; endmiClase = quieresString ? String : ClaseNuevaobj = miClase.new
![Page 125: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/125.jpg)
Mas ejemplos de dinamismo
class Stringdef metodo_nuevo; puts "Soy nuevo"; endalias_method :old_strip, :stripdef strip; puts "Tariro, tariro..."; old_strip; end
end"".metodo_nuevo" con espacios, sin ropa ".strip
def ClaseNueva; endmiClase = quieresString ? String : ClaseNuevaobj = miClase.new
![Page 126: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/126.jpg)
Mas ejemplos de dinamismo
class Stringdef metodo_nuevo; puts "Soy nuevo"; endalias_method :old_strip, :stripdef strip; puts "Tariro, tariro..."; old_strip; end
end"".metodo_nuevo" con espacios, sin ropa ".strip
def ClaseNueva; endmiClase = quieresString ? String : ClaseNuevaobj = miClase.new
![Page 127: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/127.jpg)
Mas ejemplos de dinamismo
class Stringdef metodo_nuevo; puts "Soy nuevo"; endalias_method :old_strip, :stripdef strip; puts "Tariro, tariro..."; old_strip; end
end"".metodo_nuevo" con espacios, sin ropa ".strip
def ClaseNueva; endmiClase = quieresString ? String : ClaseNuevaobj = miClase.new
![Page 128: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/128.jpg)
Mas ejemplos de dinamismo
class Stringdef metodo_nuevo; puts "Soy nuevo"; endalias_method :old_strip, :stripdef strip; puts "Tariro, tariro..."; old_strip; end
end"".metodo_nuevo" con espacios, sin ropa ".strip
def ClaseNueva; endmiClase = quieresString ? String : ClaseNuevaobj = miClase.new
![Page 129: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/129.jpg)
Reflexion en Ruby
• El dinamismo viene apoyado por la reflexion
• Las definiciones de clases, las crean o anaden metodos
• Las clases no son mas que constantes, que podemos asignar,comparar...
• Podemos anadir metodos a cada objeto
• Podemos llamar a metodos y obtener constantesdinamicamente
• Podemos preguntar a que metodos responde un objeto
• Podemos saber que objetos (y clases, por tanto) existen enese momento
![Page 130: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/130.jpg)
Reflexion en Ruby
• El dinamismo viene apoyado por la reflexion
• Las definiciones de clases, las crean o anaden metodos
• Las clases no son mas que constantes, que podemos asignar,comparar...
• Podemos anadir metodos a cada objeto
• Podemos llamar a metodos y obtener constantesdinamicamente
• Podemos preguntar a que metodos responde un objeto
• Podemos saber que objetos (y clases, por tanto) existen enese momento
![Page 131: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/131.jpg)
Reflexion en Ruby
• El dinamismo viene apoyado por la reflexion
• Las definiciones de clases, las crean o anaden metodos
• Las clases no son mas que constantes, que podemos asignar,comparar...
• Podemos anadir metodos a cada objeto
• Podemos llamar a metodos y obtener constantesdinamicamente
• Podemos preguntar a que metodos responde un objeto
• Podemos saber que objetos (y clases, por tanto) existen enese momento
![Page 132: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/132.jpg)
Reflexion en Ruby
• El dinamismo viene apoyado por la reflexion
• Las definiciones de clases, las crean o anaden metodos
• Las clases no son mas que constantes, que podemos asignar,comparar...
• Podemos anadir metodos a cada objeto
• Podemos llamar a metodos y obtener constantesdinamicamente
• Podemos preguntar a que metodos responde un objeto
• Podemos saber que objetos (y clases, por tanto) existen enese momento
![Page 133: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/133.jpg)
Reflexion en Ruby
• El dinamismo viene apoyado por la reflexion
• Las definiciones de clases, las crean o anaden metodos
• Las clases no son mas que constantes, que podemos asignar,comparar...
• Podemos anadir metodos a cada objeto
• Podemos llamar a metodos y obtener constantesdinamicamente
• Podemos preguntar a que metodos responde un objeto
• Podemos saber que objetos (y clases, por tanto) existen enese momento
![Page 134: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/134.jpg)
Reflexion en Ruby
• El dinamismo viene apoyado por la reflexion
• Las definiciones de clases, las crean o anaden metodos
• Las clases no son mas que constantes, que podemos asignar,comparar...
• Podemos anadir metodos a cada objeto
• Podemos llamar a metodos y obtener constantesdinamicamente
• Podemos preguntar a que metodos responde un objeto
• Podemos saber que objetos (y clases, por tanto) existen enese momento
![Page 135: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/135.jpg)
Reflexion en Ruby
• El dinamismo viene apoyado por la reflexion
• Las definiciones de clases, las crean o anaden metodos
• Las clases no son mas que constantes, que podemos asignar,comparar...
• Podemos anadir metodos a cada objeto
• Podemos llamar a metodos y obtener constantesdinamicamente
• Podemos preguntar a que metodos responde un objeto
• Podemos saber que objetos (y clases, por tanto) existen enese momento
![Page 136: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/136.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 137: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/137.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 138: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/138.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 139: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/139.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 140: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/140.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 141: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/141.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 142: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/142.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 143: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/143.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 144: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/144.jpg)
Ejemplos de reflexion
disponibles = App::Drivers.constantscontrolador = App::Drivers.const_get(’Pg’).new
str = ""str.methods.grep(/trip/)metodo = :stripstr.send(metodo) if str.respond_to? metodo
ObjectSpace.each_object(Class) do |o|next unless o.name =~ /^TC_/puts "La clase #{o} empieza por TC_"
end
![Page 145: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/145.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 146: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/146.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):
• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 147: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/147.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):
• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 148: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/148.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero
• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 149: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/149.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’
• Algun metodo, con nombre ((particular)), tiene que llamarsetambien como self.class
• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 150: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/150.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class
• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 151: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/151.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 152: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/152.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 153: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/153.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 154: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/154.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 155: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/155.jpg)
Negativo
• Si programamos a lo loco, puede ser ilegible
• Algunas ((sorpresas)):• El 0 y "" son verdadero• Los ((metodos =)) se llaman como self.cosa = ’foo’• Algun metodo, con nombre ((particular)), tiene que llamarse
tambien como self.class• Uso de mayusculas y minusculas
• Puede ser un poco difıcil de coger sin saber OO
• Es lento, comparado con otros
• Algunos modulos, poco maduros
• A veces, documentacion suboptima
![Page 156: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/156.jpg)
Indice
1 El lenguajeBloques e iteradoresClases basicas de datosModulosSımbolosMixinReflexion y dinamismo
2 ConclusionesAspectos negativosAspectos positivos
![Page 157: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/157.jpg)
Positivo
• Lenguaje muy potente, relativamente sencillo de aprender
• Herramientas de ayuda, ruby-doc.org, consola interactiva
• Sistema de documentacion empotrada
• Modulos disponibles muy buenos
• Comunidad muy amigable
• Innovaciones interesantes (ActiveRecord, Rails, Wee, RSCM)
• Flexible, es facil hacer DSLs
![Page 158: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/158.jpg)
Positivo
• Lenguaje muy potente, relativamente sencillo de aprender
• Herramientas de ayuda, ruby-doc.org, consola interactiva
• Sistema de documentacion empotrada
• Modulos disponibles muy buenos
• Comunidad muy amigable
• Innovaciones interesantes (ActiveRecord, Rails, Wee, RSCM)
• Flexible, es facil hacer DSLs
![Page 159: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/159.jpg)
Positivo
• Lenguaje muy potente, relativamente sencillo de aprender
• Herramientas de ayuda, ruby-doc.org, consola interactiva
• Sistema de documentacion empotrada
• Modulos disponibles muy buenos
• Comunidad muy amigable
• Innovaciones interesantes (ActiveRecord, Rails, Wee, RSCM)
• Flexible, es facil hacer DSLs
![Page 160: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/160.jpg)
Positivo
• Lenguaje muy potente, relativamente sencillo de aprender
• Herramientas de ayuda, ruby-doc.org, consola interactiva
• Sistema de documentacion empotrada
• Modulos disponibles muy buenos
• Comunidad muy amigable
• Innovaciones interesantes (ActiveRecord, Rails, Wee, RSCM)
• Flexible, es facil hacer DSLs
![Page 161: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/161.jpg)
Positivo
• Lenguaje muy potente, relativamente sencillo de aprender
• Herramientas de ayuda, ruby-doc.org, consola interactiva
• Sistema de documentacion empotrada
• Modulos disponibles muy buenos
• Comunidad muy amigable
• Innovaciones interesantes (ActiveRecord, Rails, Wee, RSCM)
• Flexible, es facil hacer DSLs
![Page 162: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/162.jpg)
Positivo
• Lenguaje muy potente, relativamente sencillo de aprender
• Herramientas de ayuda, ruby-doc.org, consola interactiva
• Sistema de documentacion empotrada
• Modulos disponibles muy buenos
• Comunidad muy amigable
• Innovaciones interesantes (ActiveRecord, Rails, Wee, RSCM)
• Flexible, es facil hacer DSLs
![Page 163: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/163.jpg)
Positivo
• Lenguaje muy potente, relativamente sencillo de aprender
• Herramientas de ayuda, ruby-doc.org, consola interactiva
• Sistema de documentacion empotrada
• Modulos disponibles muy buenos
• Comunidad muy amigable
• Innovaciones interesantes (ActiveRecord, Rails, Wee, RSCM)
• Flexible, es facil hacer DSLs
![Page 164: Ruby on Rails (Introducción a Ruby, la venganza)demiurgo.org/charlas/osl-200503-ruby2.pdf · Ruby on Rails (Introduccion a Ruby, la venganza) Esteban Manchado Vel´azquez zoso@foton.es](https://reader034.vdocuments.us/reader034/viewer/2022052218/5bc109a809d3f28e288cbf1a/html5/thumbnails/164.jpg)
¡Manana mas!