Ruby On Rails para Programadores Java
A quién va dirigida? Buenos Programadores Java Web
Ya sabes Rails MVC Programación Orientada a Objetos Convenciones sobre configuraciones
MVC Java.Configuración Rails ::Convención
Orientación a objetos Objetos, mensajes Clases Interfaces Instancias Variable/métodos de instancia Métodos/variables de clase (static)... Herencia la misma terminología
Mapeo O/R Active Record JDO, Hibernate, Toplink... Envoltura sobre filas de BD Encapsula el acceso a BD Métodos de clase para obtener instancias
Testing Usas Junit? Con Rails podrás hacer: Tests unitarios (modelos) Tests funcionales (controladores) Test de integración (acciones) Rails incluye el mejor entorno para testing del 'mercado'. Sin discusión.
Ayuda para tareas de desarrollo? Usas Ant? Usarás Rake sin problemas
Resumen Todas las convenciones que asume Rails te parecerán naturales. Rails te proporciona mecanismos simples para las funcionalidades de las herramientas Java que estás acostumbrado a usar. Rails agrupa funcionalidades que estas acostumbrado a encontrar por separado.
No sabes Ruby Rails no podría existir sin Ruby Rails 'hereda' de Ruby su elegancia y simplicidad Ruby es un lenguaje dinámico orientado a objetos Si llego desde Java qué diferencias me voy a encontrar?
Ruby: Tipado dinámico Java: int x=2; x=x^100; System.out.println(x); => -831846303 (!) Ruby: x=2 x.class => Fixnum x=x**100 => 1267650600228229401496703205376 x.class => Bignum
Ruby: No hay tipos básicos! Java: String.valueOf(33); Integer.parseInt( 33 ); Ruby: 33.to_s => No wrappers! 33.to_i 11.zero? 7.class => Fixnum 6+2 6.+ 2 6.+(2)
Ruby: Todo son objetos Java: null => Referencia erronea a un objeto Ruby: x=nil x.nil? => true x.class => NilClass No NullPointerException!!
Ruby: Manejo simple de Fechas Java: Date fecha = new GregorianCalendar(2006,11,25,16,0).getTime(); Ruby: 2006-11-25 16:00.to_time Java: new Date(new Date().getTime() - (30*60*1000)) RoR: 30.minutes.ago
Ruby: Simplicidad de código Java: Ruby: getter/setter se generan automáticamente
Ruby: Contenedores Java: Arrays Collections Framework: ArrayList Stack List HashSet HashMap... Funcionalidades repartidas (Clases, Interfaces, Metodos estáticos...) Ruby: Array Hash Set a[1]=x h[a]=b Todas las funcionalidades es un solo contenedor.
Ruby: Iteradores Java: for (Enumeration e=parent.getchildren(); e.hasmoreelements(); ) { Element child = (Element)e.nextElement(); } Ruby: // Hacer algo con child parent.each_child { child } # Hacer algo con child
Ruby: Asignación múltiple Java: int a=2; int b=3; Ruby: a=2 b=3 int aux; aux = a; a = b; a,b = b,a b = aux; titulo, autor = Libro.getInfo
Ruby: es (muy) Dinámico Puedo añadir métodos a CUALQUIER clase ( y en CUALQUIER momento) class String def spanish? include? ñ end end Du hast mich.spanish? => false
Ruby: No hay interfaces No hay herencia de interfaz Y si necesitamos tener métodos comunes? Módulos Agrupación de métodos Un módulo no se instancia Se incluyen en las clases (include) Se convierten en metodos de instancia
OK. Qué consigo a cambio? Menos código No XML innecesario No aprender lenguajes de configuración de apps Acceso fácil a buenas prácticas: Test, REST,... Menos sufrimiento Comunidad efervescente ++ PRODUCTIVIDAD
ENSÉÑAMELO!!
Ejemplos de tareas comunes No hacer nada Mapear una tabla de BD Hacer una consulta a BD Crear un archivo XML Añadir filtros a una petición web Hacer una llamada Ajax
Un programa que no hace nada Java: Ruby On Rails:
Mapeo O/R Java: Ruby On Rails:
Consultar la Base de Datos Java: Ruby On Rails:
Crear un archivo XML Java: Ruby On Rails: Método.to_xml!
Añadir un filtro Java: clase Filter, dofilter, xml Ruby On Rails:
Realizar una llamada Ajax Java: Ruby On Rails:
EXTRAS: Migraciones RJS irb
Migraciones Control de versiones de la BD No utiliza SQL, utiliza Ruby!
RJS Plantillas Javascript No se programa en JS sino en Ruby!
irb: interactive ruby Consola de ejecución Acceso a todas las clases de la aplicación Rails
Resumen Transición fácil Aumento de la productividad Haz feliz al carbono, no al silicio!
Gracias! Licencia: Este documento se presenta bajo licencia Creative Commons Attribution- NonCommercial-ShareAlike, versión 2.5. Es decir, se puede copiar, distribuir o crear trabajos derivados bajo las siguientes condiciones: * Atribuir el crédito al autor original (Juanjo Bazán @ www.kflink.com ) * No utilizar este trabajo para usos comerciales. * Distribuir cualquier trabajo derivado usando esta misma licencia. (Detalles en: http://creativecommons.org/licenses/by-nc-sa/2.5/ ) License dudas? jjbazan@kflink.com