Ruby on Rails: la revolución del desarrollo web
Esteban Manchado Velázquez
[email protected]
15 de octubre de 2005
Índice
1 Introducción
Antes de nada...
Un poco de Ruby
Estado actual del desarrollo web
2 Ruby on Rails
RoR is in tha house!
MVC
Otras comodidades
Conclusión
3 Demo
Preparación
Ejecución
Índice
1 Introducción
Antes de nada...
Un poco de Ruby
Estado actual del desarrollo web
2 Ruby on Rails
RoR is in tha house!
MVC
Otras comodidades
Conclusión
3 Demo
Preparación
Ejecución
Sobre esta charla
• Presentar Ruby y RoR
Sobre esta charla
• Presentar Ruby y RoR
• Mostrar cómo hacer una aplicación
Sobre esta charla
• Presentar Ruby y RoR
• Mostrar cómo hacer una aplicación
• Cuidado con los mensajes subliminales
Grupo Rubies
• http://www.ruby.org.es
• Noticias, wiki, lista de correo
• Traducciones, documentación, ...
• ¡Anímense!
• También, lista de RoR-es, independiente
Índice
1 Introducción
Antes de nada...
Un poco de Ruby
Estado actual del desarrollo web
2 Ruby on Rails
RoR is in tha house!
MVC
Otras comodidades
Conclusión
3 Demo
Preparación
Ejecución
¿Qué es Ruby?
• Una piedra preciosa
¿Qué es Ruby?
• Una piedra preciosa
• Un lenguaje de programación
¿Qué es Ruby?
• Una piedra preciosa
• Un lenguaje de programación
• Es de propósito general, Rails es sólo una de las posibilidades
web, y aparte hay Ruby/Qt, Ruby/GNOME, etc.
¿Qué es Ruby?
• Una piedra preciosa
• Un lenguaje de programación
• Es de propósito general, Rails es sólo una de las posibilidades
web, y aparte hay Ruby/Qt, Ruby/GNOME, etc.
• ((La combinación ganadora de la elegancia conceptual de
SmallTalk, la facilidad de uso y aprendizaje de Python y el
pragmatismo de Perl))
¿Qué es Ruby?
• Una piedra preciosa
• Un lenguaje de programación
• Es de propósito general, Rails es sólo una de las posibilidades
web, y aparte hay Ruby/Qt, Ruby/GNOME, etc.
• ((La combinación ganadora de la elegancia conceptual de
SmallTalk, la facilidad de uso y aprendizaje de Python y el
pragmatismo de Perl))
• ((Un lenguaje que es como lo mejor de SmallTalk, Perl y Lisp,
y sin ruido en la línea))
No es amor, será...
No es amor, será...
• Orientación a objetos obsesiva
No es amor, será...
• Orientación a objetos obsesiva
• Todo es un objeto y tiene métodos
No es amor, será...
• Orientación a objetos obsesiva
• Todo es un objeto y tiene métodos
• 1.upto(10) {|i| puts i}
"uno dos tres".split(/ */)
No es amor, será...
• Orientación a objetos obsesiva
• Todo es un objeto y tiene métodos
• 1.upto(10) {|i| puts i}
"uno dos tres".split(/ */)
• No hay atributos de objetos (desde fuera)
No es amor, será...
• Orientación a objetos obsesiva
• Todo es un objeto y tiene métodos
• 1.upto(10) {|i| puts i}
"uno dos tres".split(/ */)
• No hay atributos de objetos (desde fuera)
• Basado en líneas (no son necesarios ; y similares)
No es amor, será...
• Orientación a objetos obsesiva
• Todo es un objeto y tiene métodos
• 1.upto(10) {|i| puts i}
"uno dos tres".split(/ */)
• No hay atributos de objetos (desde fuera)
• Basado en líneas (no son necesarios ; y similares)
• Aspecto limpio, fácil de leer
No es amor, será...
• Orientación a objetos obsesiva
• Todo es un objeto y tiene métodos
• 1.upto(10) {|i| puts i}
"uno dos tres".split(/ */)
• No hay atributos de objetos (desde fuera)
• Basado en líneas (no son necesarios ; y similares)
• Aspecto limpio, fácil de leer
• Aunque también ((Ruby golf)), expresiones regulares...
Ejemplo algo más ((real))
class Pokemon
attr_reader :evolucionado, :nombre
def initialize(nombre)
@nombre
@evolucionado = false
= nombre
end
def evoluciona
puts "Soy el Pokemon #{@nombre}"
@evolucionado = true
end
end
Ejemplo algo más ((real))
class Pokemon
attr_reader :evolucionado, :nombre
def initialize(nombre)
@nombre
@evolucionado = false
= nombre
end
def evoluciona
puts "Soy el Pokemon #{@nombre}"
@evolucionado = true
end
end
Ejemplo algo más ((real))
class Pokemon
attr_reader :evolucionado, :nombre
def initialize(nombre)
@nombre
@evolucionado = false
= nombre
end
def evoluciona
puts "Soy el Pokemon #{@nombre}"
@evolucionado = true
end
end
Ejemplo algo más ((real))
class Pokemon
attr_reader :evolucionado, :nombre
def initialize(nombre)
@nombre
@evolucionado = false
= nombre
end
def evoluciona
puts "Soy el Pokemon #{@nombre}"
@evolucionado = true
end
end
Ejemplo algo más ((real))
class Pokemon
attr_reader :evolucionado, :nombre
def initialize(nombre)
@nombre
@evolucionado = false
= nombre
end
def evoluciona
puts "Soy el Pokemon #{@nombre}"
@evolucionado = true
end
end
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Ejemplo algo más ((real))
ruby> pika = Pokemon.new(’Pikachu’)
=> #<Pokemon:0x4030d154 @evolucionado=false, ...>
ruby> pika.evolucionado
=> false
ruby> pika.evoluciona
Soy el Pokemon Pikachu
=> true
ruby> pika.evolucionado
=> true
ruby> pika.class
=> Pokemon
ruby> pika.methods.grep(/evoluciona/)
=> ["evoluciona", "evolucionado"]
Bloques/iteradores
• ((Subrutinas anónimas)) como ((parámetro))
Bloques/iteradores
• ((Subrutinas anónimas)) como ((parámetro))
• P.ej., para recorrer objetos
Bloques/iteradores
• ((Subrutinas anónimas)) como ((parámetro))
• P.ej., para recorrer objetos
• [1, 2, 3, 4].each do |i|
puts i
end
Bloques/iteradores
• ((Subrutinas anónimas)) como ((parámetro))
• P.ej., para recorrer objetos
• [1, 2, 3, 4].each do |i|
puts i
end
• "jander klander gronder".split(" ").each do |i|
puts i =~/ander$/ ? "#{i} rulz" : "#{i} sobra"
end
Bloques/iteradores
• ((Subrutinas anónimas)) como ((parámetro))
• P.ej., para recorrer objetos
• [1, 2, 3, 4].each do |i|
puts i
end
• "jander klander gronder".split(" ").each do |i|
puts i =~/ander$/ ? "#{i} rulz" : "#{i} sobra"
end
• button.connect(PUSH EVENT) do |sender,sel,event|
puts "Botón pulsado"
end
Índice
1 Introducción
Antes de nada...
Un poco de Ruby
Estado actua
Comentarios de: Ruby on Rails: la revolución del desarrollo web (0)
No hay comentarios