164
Ruby on Rails (Introducci´ on a Ruby, la venganza) Esteban Manchado Vel´ azquez [email protected] 15 de mayo de 2006

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 [email protected]

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

¡Manana mas!