Introducción a Ruby on
Rails
Dr. Diego Lz. de Ipiña Gz. de Artaza
http://paginaspersonales.deusto.es/dipina
Cursos de Julio 2006, Universidad de Deusto,
11 y 12 Julio, 10:00 a 12:00
[email protected]
Contenidos
1.
Introducción a la programación de scripting con Ruby. (1h y 10’)
Instalación de Ruby
Modo interactivo y de scripting
Tipos de datos en Ruby
Primitivos
Estructuras de Datos Complejas: Arrays, Iteradores y Mapas
Programación Orientada a Objetos en Ruby
Gestión de errores y de módulos
2. Programación avanzada en Ruby. (40 ‘)
Programación de redes con sockets
Multithreading en Ruby
Acceso a Bases de Datos desde Ruby
Descanso (10’)
1
Contenidos
3.
Introducción a Ruby on Rails (30’)
Filosofía DRY-COC
Instalación de Rails
Desarrollo de una aplicación CRUD en 6 pasos
4. Entendiendo el modelo MVC de Rails (40’)
Concepto de Scaffolding
Controladores en Rails: clase ApplicationController
Modelo en Rails: clase ActiveRecord
Vistas en Rails: ficheros .rhtml
5. Conceptos avanzados en Rails (40’)
Caching, validación y AJAX
Integración con Apache
Distribuyendo aplicaciones Rails
6. Casos de Éxito de Rails y Conclusión (10’).
Ruby
Un lenguaje de scripting orientado a objetos
“puro”
Desarrollado por Yukihiro "Matz" Matsumoto
Ruby combina:
Elegancia conceptual de Smalltalk
La facilidad de aprendizaje y uso de Python
El pragmatismo de Perl
Liberado en 1993
Más famoso que Python en Japón
Website: http://www.ruby-lang.org/en/
2
Ventajas de Ruby
Simple: fácil de aprender y mantener
Poderoso
“Language stays out of your way”
Equipado con excelentes librerías
Desarrollo rápido
Código abierto
“Divertido”
Desventajas de Ruby
Rendimiento comparable a Perl o Python, pero lejos de C o C++
Podemos extender Ruby con estos lenguajes
No existen muchas frameworks desarrolladas en Ruby
Ruby on Rails (http://www.rubyonrails.com/) es la excepción
No existe una framework de GUI multi-plataforma ampliamente
aceptada
RAA – Ruby Application Archive (http://raa.ruby-lang.org/)
No tan grande como CPAN – Comprehensive Perl Archive Network
(http://www.cpan.org/)
Peros:
Documentación en progreso
No es un lenguaje demasiado conocido en países occidentales
Más pensado para Linux que Windows
No tiene un buen soporte de Unicode todavía
3
Instalación Ruby
Para Windows se puede bajar .exe de:
http://rubyinstaller.rubyforge.org/wiki/wiki.pl?Ru
byInstaller
Utilizaremos la versión 1.8.2-14 de:
http://rubyforge.org/frs/download.php/2407/ruby182-14.exe
Instalación en Linux:
Podemos bajarnos las fuentes y encontrar
instrucciones sobre cómo instalarlo en:
http://www.ruby-lang.org/en/20020102.html
Características de Ruby
Diseñado siguiendo la filosofía POLS (Principle of Least Surprise)
Las cosas funcionan del modo que esperas, “sin sorpresas”
Dynamically typed/late binding, las decisiones en tiempo de ejecución ¡Peligro!
Integración con C
Convención de nombres: @instanceVar, @@classVar, $global,
CONSTANT, everythingElse
Portable, multiplataforma, open source
Seguridad
Internacionalización en progreso (1.9)
Muchas librerías
4
Todo es un objeto o un método
Herencia simple con módulos mixin
Bloques y cierres
Rangos
Metaclases
Introspección
Manejo de excepciones
Nuestros primeros pasos en
Ruby
Modo interactivo
Para trabajar en modo interactivo usamos irb
(Interactive Ruby Shell) escribiendo en consola:
irb --simple-prompt
Escribir operaciones aritméticas para que IRB se
comporte como una calculadora
Soporta los operadores típicos +, -, *, /, % y **
2**3 = 8
Para salir de Ruby escribimos exit
Tipos de Datos Primitivos
Numéricos:
Integers, una división entre enteros
devolverá un entero
Floats, es un número con decimales
Ruby puede utilizar números muy largos
192,349,562,563,447 se puede expresar como
192_349_562_563_447
Números aún más largos se pueden expresar
como:
1.7e13 significa 1.7 x 1013
5
Tipos de Datos Primitivos
Strings:
Grupos de caracteres
Algunos ejemplos:
"Hello."
"Ruby rocks."
"5 is my favorite number... what's yours?"
'Two plus two is #{2+2}' # ¡¡¡no interpola!!!
Operaciones:
"hi " * 3 "hi hi hi "
"hi".capitalize Hi
"hi".reverse ih
"hi".upcase HI
Probar: downcase y swapcase
chomp devuelve un string quitando los saltos de línea al final de la
palabra ("hola\n".chomp "hola")
Booleanos: true y false.
nil es el valor nulo en Ruby
Observar que los nombres de clases empiezan por mayúscula
En Ruby Todo son Objetos
Tipo de datos
Clase Ruby
integer
decimals
text
Integer
Float
String
Clase Ruby
Algunos Métodos
Integer
Float
String
+ - / * % **
+ - / * % **
capitalize, reverse,length, upcase
Método
String#to_i
String#to_f
Float#to_i
Float#to_s
Integer#to_f
Integer#to_s
De
String
String
Float
Float
Integer
Integer
Conversores
A
Integer
Float
Integer
String
Float
String
6
Fechas en Ruby
# ejemploFechas.rb
require 'date'
d = Date.today
puts d << 2
t = Time.new
t.year
t.strftime("%d-%b-%y")
Constructores literales para
clases built-in
String "new string" o 'new
string'
Symbol :symbol o : "symbol with
spaces"
Array [1,2,3]
Hash {"New York" => "NY",
"Oregon" => "OR"}
Range 0…10 o 0..9
Regexp /([a-z]+)/
7
Operaciones sobre strings
capitalize, upcase, downcase, swapcase, strip,
lstrip, rstrip, chop, chomp, reverse, replace,
"abc"[2], "abc"[2].chr, "abc"[2,1], equal?
Ejemplo:
>> str="Hello"
=> "Hello"
>> str.reverse
=> "olleH"
>> str
=> "Hello"
>> str.reverse! # ¡¡¡método bang!!! Cambian campo
=> "olleH"
>> str
=> "olleH"
Símbolos
Símbolos y strings representan unidades de
texto
Un objeto símbolo por cada texto
:a.equal?(:a) # true
"a".equal?("a") # false
Los símbolos son inmutables
Ejemplo:
:a
“a".to_sym
:a.to_s
8
Variables y Constantes
Las variables deben ser declaradas en minúsculas
Las constantes empiezan por una letra mayúscula y
son seguidas por n caracteres en minúscula
Si intentas cambiar el valor de una constante Ruby
dará un warning pero no lo impedirá (-:
Nuestro Primer Programa
Modo script:
Crea el fichero holamundo.rb
Inserta la línea puts "Kaixo mundua"
print hace lo mismo sin imprimir una nueva línea
printf "Number: %5.2f, String: %s", 1.23, "hello"
Ejecuta el programa como: ruby holamundo.rb
9
Nuestro Primer Programa
Para leer datos en Ruby utilizamos gets:
puts "¿Cómo te llamas?"
name = gets
puts "Hola " + name + ". ¿Qué tal
estás?"
Unicode en Ruby:
Funciona en irb
Pero no desde el intérprete
I18n ¡verde!
Nuestro Primer Programa
Sólo podemos añadir un string a otro
Lo siguiente daría un error:
puts "The answer is " + num2 # --> Error
Para corregirlo haríamos:
puts "The answer is " + num2.to_S
Una característica interesante de Ruby es que
podemos concatenar las llamadas a funciones y no
es necesario usar paréntesis:
name = gets.chomp
En Linux podemos hacer que un programa sea
ejecutable:
Cambiando los derechos del fichero chmod +x prog.rb'
Insertando como primera lína #!/usr/bin/env ruby
Creamos un fichero con extensión .rb
Lo ejecutamos desde consola con ./nombre-fichero.rb
10
Estructuras de control: if
Igual a la de otros lenguajes de programación con el nemónico if
Los operadores lógicos son and, &&, or, ||, not y !
Python incorpora elif y Ruby elsif:
if age >= 60
puts "Senior fare"
elsif age >= 14
puts "Adult fare"
elsif age > 2
puts "Child fare"
else
puts "Free"
end
La forma negativa del if es unless:
unless aSong.duration > 180 then
cost = .25
else
cost = .35
end
También hay soporte para la expresión condicional en C:
cost = aSong.duration > 180 ? .35 : .25
Estructuras de control: case
También existe la sentencia case
En Ruby todo son expresiones, por lo tanto un
case o un if devuelven el valor de la última
expresión ejecutada
kind = case year
when 1850..1889 then "Blues"
when 1890..1909 then "Ragtime"
when 1910..1929 then "New Orleans Jazz"
when 1930..1939 then "Swing"
when 1940..1950 then "Bebop"
else "Jazz"
end
11
Estructuras de control: while
Sigue el formato:
while cond
...
end
Calcular potencias de 2 menor que 10000 (potencias2.rb):
#!/usr/bin/ruby
# Calcular la potencia de 2 menor que 10000
number=1
while number < 10_000
number *= 2
end
number /=2
puts number.to_s + " es la potencia de 2 mayor menor que
10.000“
La forma negativa del while es until:
until playList.duration > 60
playList.add(songList.pop)
end
Estructuras de control: loops
Sentencia loop:
n=1
loop do
n = n+1
next
next unless n == 10
nextnext
break
break
break
break
end
El método times hace que iteremos N veces:
4.times do
puts "hola"
end
Contando:
count = 0
5.times do
count +=1
puts “count = “ + count.to_s
end
12
Arrays
La clase Array se utiliza para representar colecciones de objetos:
Ejemplo:
$ irb --simple-prompt
>> nums = ["cero", "uno", "dos", "tres", "cuatro"]
=> ["cero", "uno", "dos", "tres", "cuatro"]
>> nums.class
=> Array
>> exit
Observar que class devuelve el tipo de un objeto
Podemos acceder a un elemento mediante nums[0]
Podemos añadir nuevos elementos con: nums[5] = "cinco" o
nums.unshift(5) (al principio) o nums.push(5) (al final)
Eliminar elementos con shift() y pop()
Se pueden concatenar arrays con [1,2,3].concat([4,5,6])
En un Array puedes colocar cualquier tipo de dato
Operaciones sobre Arrays
Podemos ordenar elementos con el método
Array#sort
Invertir su orden con Array#reverse
Calcular su longitud con Array#length
Reducir dimensiones con Array#flatten
Eliminar duplicados con Array#uniq
Se pueden realizar operaciones sobre arrays
con los operadores ari
Comentarios de: Introducción a Ruby on Rails (0)
No hay comentarios