Definiciones
Ruby
Rails
Ok... ¿y los demás?
Ruby on Rails: Porque hay mejores maneras de
cortarse las venas que escribiendo PHP
Gunnar Wolf —
[email protected]
http://www.gwolf.org/soft/rails
Instituto de Investigaciones Económicas, UNAM
Desarrollador del proyecto Debian
Encuentro Nacional de Linux y Software Libre
Octubre 19, 2007
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Bien. Veo que tengo tu atención
Bien. Veo que ya tengo tu atención.
No, pese a lo que el título te de a pensar, esta no es una plática
orientada a hablar mal de PHP.
Esta es una plática orientada a hablar bien de las buenas prácticas
de programación hacia las cuales nos orilla el framework Ruby on
Rails — Y como parte de ello, desmenuzaremos parte de las
razones de por qué una tan gran parte del código escrito en PHP
resulta ser una sopa inmantenible.
Pero no adelantemos vísperas. Vamos a lo que esta presentación
sí es.
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Temas
1 Definiciones
2 Ruby: Un lenguaje pragmático
3 Rails: Un framework para el desarrollo Web
4 Ok... ¿y los demás?
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
¿Qué es Ruby on Rails?
Un framework para el desarrollo de aplicaciones Web
Basado en el patrón MVC
Orientado a aplicaciones modeladas sobre una base de datos
relacional
Utilizando el lenguaje Ruby
Fuertemente opinioneado
...Una de tantas palabrejas de moda
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
¿Framework?
Muchos comenzamos a escribir aplicaciones Web procesando,
generando e integrando cada uno de los componentes de
nuestro sistema
Un framework nos evita tener que encargarnos de las partes
más repetitivas del desarrollo, de la integración de nuestro
sistema
Y al hacerlo, se asegura de que sigamos la lógica general de
sus desarrolladores
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
El patrón MVC
Patrón Modelo, Vista, Controlador (Trygve Reenskaug, 1979)
Patrón de arquitectura de sistemas que separa los
componentes de un sistema en tres roles claramente separados
— Modelo, Vista y Controlador
Este patrón no se limita a sistemas Web (fue descrito
formalmente por primera vez en 1979), aunque estos
típicamente se ajustan a él a la perfección
No hace falta trabajar dentro de un framework para escribir
sistemas MVC - Pero ayuda a mantener la separación y el
flujo de información presentes.
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
El patrón MVC
http://es.wikipedia.org/wiki/Modelo_Vista_Controlador
Modelo La representación de los datos y las relaciones entre
ellos (llamado también lógica de negocios)
Vista La interfaz al usuario
Controlador Quien recibe los eventos solicitados a través de la
vista, los empuja al modelo, y genera/refresca a la
vista
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Sobre una base de datos relacional
Los modelos en Rails (casi siempre) utilizan una base de datos
relacional como medio de persistencia
Una parte fundamental de Rails es su ORM (mapeo
objeto-relacional), ActiveRecord; nos permite tratar
directamente a cada uno de los registros como objetos de
Ruby. Trabajando con Rails, es muy poco frecuente escribir
SQL (aunque siempre es importante poder hacerlo).
ActiveRecord es un ORM muy inteligente, permitiéndonos
expresar fácilmente relaciones y validaciones complejas
Rails asume una base de datos tonta, al estilo MySQL —
Busca que las validaciones y restricciones radiquen en los
modelos, no en la base. Es posible utilizar bases de datos más
potentes y aprovechar sus ventajas — aunque a costa de
repetirnos (ver más adelante: DRY)
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Fuertemente opinioneado
Los desarrolladores de Rails decidieron impulsar toda una cultura
de desarrollo de software, a través de diversos principios de
desarrollo (que detallaremos un poco más adelante), entre ellos:
Metodologías de desarrollo ágil
Convención sobre configuración
DRY: ¡No te repitas!
Andamiaje
Generadores
Desarrollo basado en pruebas
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Frameworks: ¿Buenos? ¿Malos? ¿Feos?
Muchas veces, nos cuesta cambiar de nuestra forma
tradicional de desarrollo para ajustarnos al estilo de
pensamiento de un framework. Sin embargo, muy
probablemente lo terminaremos agradeciendo
Por definición, comenzar a trabajar con un framework implica
aprender un muy extenso API. Vale la pena invertir el tiempo,
para poder realmente aprovechar las ventajas (y comprender
la idiosincracia) de un framework
A diferencia de un lenguaje (que no debe tomarnos como tope
más que un par de días aprender), aprender a usar un
framework de modo óptimo nos puede tomar varios meses.
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Frameworks: ¿Buenos? ¿Malos? ¿Feos?
Particularmente el framework Ruby on Rails es muy extenso,
inclusive comparando con otros de propósitos similares
La documentación disponible en línea
(http://api.rubyonrails.org), típicamente instalada
además junto con Rails, es muy extensa y amigable
Hay excelentes recursos, tanto en línea como en forma de libro
impreso.
Lo repito: Comenzar a emplear un framework puede ser un
paso difícil para quien está acostumbrado a trabajar a mano
alzada... Pero las ventajas comienzan a aparecer casi de
inmediato.
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Temas
1 Definiciones
2 Ruby: Un lenguaje pragmático
3 Rails: Un framework para el desarrollo Web
4 Ok... ¿y los demás?
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
¿Ruby? ¿Qué es eso?
Un lenguaje de programación
Limpia y completamente orientado a objetos
Dinámicamente extensible
Con una fuerte dosis de programación funcional
Libre de paradigmas
Con fuerte influencia de Perl, Smalltalk, Python, Lisp, Dylan y
CLU (http://es.wikipedia.org/wiki/Ruby)
Creado por Yukihiro Matz Matsumoto, a partir de 1993
Enfatiza en la comodidad al programador más que a la
máquina
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Limpia y completamente orientado a objetos
Lenguajes como Java dicen ser el epítome del purismo de la
programación orientada a objetos — Pero no lo son.
Constantemente manipulamos cosas que no son objetos (por
ejemplo, los mismos números)
En Ruby, todo es un objeto, y toda operación que hagamos
sobre un objeto será llamando a uno de sus métodos
Desde los operadores base del lenguaje (+, -, [], []=,
etc.), todo está implementado como métodos
...Y todos estos métodos admiten, claro, que modifiquemos su
comportamiento
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Limpia y completamente orientado a objetos
Ruby implementa únicamente herencia simple
Para lograr comportamientos similares al de la herencia
múltiple, tenemos el mecanismo de mixins, que nos permite
mezclar módulos dentro de la definición de una clase
El estilo de orientación a objetos de Ruby es conocida como
Duck Typing:
Si tiene cara de pato, camina como pato y hace “cuac” como
un pato, ¡es un pato!
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Dinámicamente extensible
Una clase en Ruby no es algo cerrado, terminado
Ni siquiera las clases del sistema, que pueden ser ampliadas en
cualquier momento
Hay unas simples convenciones para los nombres de los
métodos
Un método terminado en ? entrega resultado booleano
Un método terminado en ! es destructivo (altera el contenido
original del objeto, perdiendo lo que tuviera antes)
Un método que inicia con to entrega la transformación del
contenido del objeto a otra clase (por ejemplo, to s entrega
una cadena, to i un entero). Muchas clases base ofrecen estos
métodos, pero siempre podemos extenderlos (incluso en la
clase original)
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Limpia y completamente orientado a objetos
Example (Modificando una clase en vivo)
irb(main):001:0> class Fixnum
irb(main):002:1> def lastDigit; self %10; end
irb(main):003:1> def isEven?; self %2 == 0; end
irb(main):004:1> end
=> nil
irb(main):005:0> 105.lastDigit
=> 5
irb(main):006:0> 105.isEven?
=> false
irb(main):007:0> 106.isEven?
=> true
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Con una fuerte dosis de programación funcional
Una parte importante de la cultura de Ruby es aprovechar la
programación funcional a través de funciones anónimas,
closures y continuaciones
Toda expresión entrega un resultado; el resultado de una
función es el último valor evaluado en ella (no requiere un
return explícito, aunque sí lo admite)
Fuerte soporte a la introspección y metaprogramación
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Con una fuerte dosis de programación funcional
La sintaxis funcional se integra de manera muy natural con la
sintaxis orientada a objetos del lenguaje, a través de los bloques
Example (Uso de programación funcional en Ruby)
irb(main):005:0> class Fixnum
irb(main):006:1> def countDown; return 0 if self<=0;
[self, *(self-1).countDown]; end
irb(main):007:1> def isEven?; self %2 == 0; end
irb(main):008:1> end
=> nil
irb(main):009:0> 10.countDown.select {|num|
num.isEven?}.map {|num| num.to f}
=> [10.0, 8.0, 6.0, 4.0, 2.0, 0.0]
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Libre de paradigmas
El que todo sea un objeto no nos obliga a mantenerlo en
mente constantemente
Podemos escribir código completamente procedimental,
funcional, o no estructurado
...Aunque a fin de cuentas, todo termina siendo convertido a
objetos al ser evaluado por la máquina virtual
debian-logo
Definiciones
Ruby
Rails
Ok... ¿y los demás?
Enfatiza en la comodidad al programador más que a la
máquina
Yukihiro Matsumoto
Often people, especially computer engineers, focus on the machines. They think, ”By
doing this, the machine will run faster. By
Comentarios de: Ruby on Rails: Porque hay mejores maneras de cortarse las venas que escribiendo PHP (0)
No hay comentarios