Ruby on Rails
(Introducción a Ruby, la venganza)
Esteban Manchado Velázquez
[email protected]
15 de mayo de 2006
Índice
1 El lenguaje
Bloques e iteradores
Clases básicas de datos
Módulos
Símbolos
Mixin
Reflexión y dinamismo
2 Conclusiones
Aspectos negativos
Aspectos positivos
Índice
1 El lenguaje
Bloques e iteradores
Clases básicas de datos
Módulos
Símbolos
Mixin
Reflexión y dinamismo
2 Conclusiones
Aspectos negativos
Aspectos positivos
Bloques
• Trozo de código, con parámetros
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
• Bucles (iteradores)
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
• Bucles (iteradores)
• Guardar funciones anónimas (para más tarde)
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
• Bucles (iteradores)
• Guardar funciones anónimas (para más tarde)
• Ejecutar algo con un recurso (gestión automática)
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
• Bucles (iteradores)
• Guardar funciones anónimas (para más tarde)
• Ejecutar algo con un recurso (gestión automática)
• Inicialización de atributos
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
• Bucles (iteradores)
• Guardar funciones anónimas (para más tarde)
• Ejecutar algo con un recurso (gestión automática)
• Inicialización de atributos
• Despistar a los que vienen de otros lenguajes
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
• Bucles (iteradores)
• Guardar funciones anónimas (para más tarde)
• Ejecutar algo con un recurso (gestión automática)
• Inicialización de atributos
• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
Bloques
• Trozo de código, con parámetros
• Parecido al lambda de Python y a punteros a funciones en C
• Se pasan en llamadas a ciertos métodos
• Son la base del lenguaje
• Varios usos típicos:
• Bucles (iteradores)
• Guardar funciones anónimas (para más tarde)
• Ejecutar algo con un recurso (gestión automática)
• Inicialización de atributos
• Despistar a los que vienen de otros lenguajes
• Se pueden convertir en objetos Proc para pasarse
• Dos sintaxis: do/end y llaves (parámetros entre barras: |i|)
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|
puts "Me han pulsado"
end
Ejemplo de bloques
[1, 2, 3].each {|i| puts i}
button.onClick do |event, obj, data|
puts "Me han pulsado"
end
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
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
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
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
Bucles (otra vez)
a = 0
while a < 10 do a += 1 end
loop do
a += 1
puts "Bucle manual y aburrido"
break if a > 20
end
for i in 35..40 do puts "Mejor, pero no" end
Bucles estilo Ruby (otra vez)
0.upto(9) do puts "Mejor" end
loop do
a += 1
puts "Bucle manual y aburrido"
break if a > 20
end
for i in 35..40 do puts "Mejor, pero no" end
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
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
Índice
1 El lenguaje
Bloques e iteradores
Clases básicas de datos
Módulos
Símbolos
Mixin
Reflexión y dinamismo
2 Conclusiones
Aspectos negativos
Aspectos positivos
Clases básicas de datos
• String
Clases básicas de datos
• String
• Integer
Clases básicas de datos
• String
• Integer
• Array
Clases básicas de datos
• String
• Integer
• Array
• Hash
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
=> 13
irb(main):006:0> "Curso de Ruby".split(" ")
=> ["Curso", "de", "Ruby"]
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
=> 13
irb(main):006:0> "Curso de Ruby".split(" ")
=> ["Curso", "de", "Ruby"]
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
=> 13
irb(main):006:0> "Curso de Ruby".split(" ")
=> ["Curso", "de", "Ruby"]
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
=> 13
irb(main):006:0> "Curso de Ruby".split(" ")
=> ["Curso", "de", "Ruby"]
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
=> 13
irb(main):006:0> "Curso de Ruby".split(" ")
=> ["Curso", "de", "Ruby"]
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
=> 13
irb(main):006:0> "Curso de Ruby".split(" ")
=> ["Curso", "de", "Ruby"]
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each
{|linea| puts "Una línea: #{linea}"}
Una línea: Curso de Ruby
Una 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}
=> true
irb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}
=> false
irb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}
=> true
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each
{|linea| puts "Una línea: #{linea}"}
Una línea: Curso de Ruby
Una 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}
=> true
irb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}
=> false
irb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}
=> true
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each
{|linea| puts "Una línea: #{linea}"}
Una línea: Curso de Ruby
Una 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}
=> true
irb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}
=> false
irb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}
=> true
String (II)
irb(main):010:0> "Curso de Ruby\nin tha house!".each
{|linea| puts "Una línea: #{linea}"}
Una línea: Curso de Ruby
Una 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}
=> true
irb(main):012:0> "Curso de Ruby\nin tha house!".all?
{|linea| linea.size > 13}
=> false
irb(main):013:0> "Curso de Ruby\nin tha house!".any?
{|linea| linea.size > 13}
=
Comentarios de: Ruby on Rails (Introducción a Ruby, la venganza) (0)
No hay comentarios