Download PPT - Software Libre

Document related concepts
no text concepts found
Transcript
Introducción a
por David Santamaria
http://twitter.com/highwayman
[email protected]
http://linkd.in/davidsantamaria
Agenda
• ¿Que es Groovy?
• ¿Por que Groovy?
• Goodies.
• Mejoras respecto a Java.
• Comenzamos.
• Lenguaje Basicos.
¿Qué es Groovy?
Groovy es un lenguaje Dinamico para la JVM que permite el
uso de caracteristicas de otros lenguajes como Ruby para la
comunidad Java.
http://groovy.codehaus.org/
¿Qué mas es Groovy?
Groovy también es ...
agil, dinamico, compacto, sin curva de aprendizaje, con DSL,
soporte de scripts, Totalmente OO, Integrado con Java
(Sintaxis Java y Produce Bytecode).
¿Qué es Groovy? (para los developers)
Groovy es un "superset" de Java.
Groovy = Java - Boiler Plate Code
+ Dynamic Typing
+ Closures
+ DSL
+ Builders
+ Metaprograming
+ GDK
- Errores de compilacion
- Ligeramente mas lento
¿Por que Groovy?
• Java Platform!
o
o
o
o
o
o
o
Se ejecuta en la JVM (si hay una JVM puedes ejecutar Groovy).
Usa librerias Java.
Embebida en Aplicaciones de Escritorio Java.
Embebida en aplicaciones J2EE
Test con JUnit
Debug con Eclipse, IntelliJ, Netbeans.
Code Coverage con Cobertura.
• No requiere aprender nuevas APIS (Jython, JRuby,...)
• Rhino es interesante pero es JavaScript :)
Goodies
•
•
•
•
•
•
Tipado Dinamico y estatico.
Totalmente orientado a objetos. (Todo es un Objeto)
Closures.
Sobrecarga de operadores.
Multimethods.
Declaracion Literal de Listas (Arrays), maps, ranges, y
expresiones regulares. (Soporte Nativo!)
• Metaprogramación.
• Y Mas...
o GPath.
o Builders.
o Groovy Beans.
HelloWorld.java
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld();
hw.setNombre("Groovy");
System.out.println(hw.saluda());
}
String nombre;
public String getNombre() { return nombre; }
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String saluda(){ return "Hola " + nombre;}
}
HelloWorld.groovy
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld();
hw.setNombre("Groovy");
System.out.println(hw.saluda());
}
String nombre;
public String getNombre() { return nombre; }
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String saluda(){ return "Hola " + nombre;}
}
HelloWorld.groovy
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.setNombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
public String getNombre() { return nombre }
public void setNombre(String nombre) {
this.nombre = nombre
}
public String saluda(){ return "Hola " + nombre}
}
; opcionales!
HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.setNombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
String getNombre() { return nombre }
void setNombre(String nombre) {
this.nombre = nombre
}
String saluda(){ return "Hola " + nombre}
}
public por defecto!
HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
String saluda(){ return "Hola " + nombre}
}
getters and setters autogenerados!
HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
System.out.println(hw.saluda())
}
String nombre;
String saluda(){ "Hola " + nombre}
}
return opcional!
HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
System.out.println(hw.saluda())
}
def nombre;
def saluda(){ "Hola " + nombre}
}
Tipado Dinamico!
HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
println(hw.saluda())
}
def nombre;
def saluda(){ "Hola " + nombre}
}
Incluido por defecto:
•
•
•
•
•
•
•
•
java.io.*
java.lang.*
java.math.BigDecimal
java.math.BigInteger
java.net.*
java.util.*
groovy.lang.*
groovy.util.*
HelloWorld.groovy
class HelloWorld {
static void main(String[] args){
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
println(hw.saluda())
}
def nombre
def saluda(){ "Hola ${nombre}" }
}
GStrings!
HelloWorld.groovy
HelloWorld hw = new HelloWorld()
hw.nombre("Groovy")
println(hw.saluda())
class HelloWorld {
def nombre
def saluda(){ "Hola ${nombre}" }
}
Declaracion de clases opcional para Scripts!
HelloWorld.groovy
HelloWorld hw = new HelloWorld()
hw.nombre "Groovy"
println hw.saluda()
class HelloWorld {
def nombre
def saluda(){ "Hola ${nombre}" }
}
Parentesis opcionales en la mayoria de casos.
HelloWorld.java
public class HelloWorld {
public static void main(String[] args){
HelloWorld hw = new HelloWorld();
hw.setNombre("Groovy");
System.out.println(hw.saluda());
}
String nombre;
public String getNombre() { return nombre; }
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String saluda(){ return "Hola " + nombre;}
}
HelloWorld.groovy
HelloWorld hw = new HelloWorld()
hw.nombre "Groovy"
println hw.saluda()
class HelloWorld {
def nombre
def saluda(){ "Hola ${nombre}" }
}
Comenzamos!
• Descargamos la ultima version de Groovy
http://groovy.codehaus.org/
• Descomprimimos en un directorio.
• Añadimos la variable de entorno GROOVY_HOME.
Y %GROOVY_HOME%/bin a la variable PATH.
• Escribimos groovy -version
Comenzamos! (II)
groovyconsole
println "Hola Mundo!"
Ctrl + R
Lenguaje: Strings and GStrings.
• Comillas Simples para
Strings.
• Comillas dobles para
GStrings: Son como Strings
pero soportan
expresiones: ${expression}.
• Strings multi-linea.
Lenguaje: Strings and GStrings.
• Slashy Strings: Como GStrings con soporte para
Expresiones Regulares.
• - Muchas mas operaciones...
http://groovy.codehaus.org/Strings+and+GString
http://groovy.codehaus.org/JN1525-Strings
Lenguaje: Numbers
Java:
• Java soporta tipos primitivos y Objetos.
• Tiene Wrappers para permitir la conversion.
• Java 5+ hay autoboxing /autoUnboxing.
Groovy:
• Todo es un objeto en el lenguaje.
o El realiza el autoboxing cuando es mezclado con Java.
• BigDecimal es el tipo por defecto (excepto Integers).
• Sobrecarga de operadores.
http://groovy.codehaus.org/JN0515-Integers
http://groovy.codehaus.org/JN0525-Decimals
http://groovy.codehaus.org/JN0535-Floats
Lenguaje: Numbers
Lenguaje: Collections
Syntaxis Nativa en colecciones:
Java:
Groovy:
Map map = new HashMap()
map.put("nombre", "David")
map.put("edad",30);
def map = [nombre: "David", edad:30]
map.get("valor");
map.valor
map["valor"]
List list = new ArrayList(
Arrays.asList(
"primero", "segundo"));
def list = ["primero","segundo"]
list.add("tercero");
list << "tercero"
Lenguaje: Bucles
Java:
Groovy:
for (String s: list) {
System.out.println(s);
}
list.each {
println it
}
for (int n=1; n<6; n++){
System.out.println(n);
}
l.upto 5,{
println it
}
Lenguaje: GDK
Java:
import java.io.*;
public classReadFile {
public static void main(String[] args){
try{
BufferedReader br = new BufferedReader(
new FileReader(
new File("file.txt")));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch(IOException e) {
e.printStackTrace();
}
}
Groovy:
new File(file.txt).echLine { String line ->
println line
}
Lenguaje: Closures
Definición de Closures
//suma
def sum = 0
[1, 2, 3].each { item -> sum += item }
println "Total ${sum}"
// listar
def text = customers.collect{ item ->
item.name }.join(",")
// llamar a un Closure
def c = { name -> println "Hola ${name}"}
c("David")
Lenguaje: Closures
Iteración en Closures
//Simple Loops
5.times { print it }
-> 01234
//Strings
'dog'.each { c -> println c }
-> d
-> o
-> g
//Lists and Arrays
[1,2,'dog'].each { print it }
-> 12dog
//Maps
['rod':33, 'james':35].each {
print "${it.key}=${it.value} "
}
-> james=35 rod=33
Lenguaje: GDK
• String
o contains(), count(), execute(), padLeft(),
center(), padRight(), reverse(), tokenize(), each(), etc.
• Collection
o count(), collect(), join(), each(), reverseEach(), find/All(),
min(), max(), inject(), sort(), etc.
• File
o eachFile(), eachLine(), withPrintWriter(), write(), getText(),
etc.
Lenguaje: MarkupBuilder
import groovy.xml.*
def page = new MarkupBuilder()
page.html {
head { title 'Hola' }
body{
ul {
1.upto 5, { li "Mundo ${it}"}
}
}
}
<html>
<head>
<title>Hola</title>
</head>
<body>
<ul>
<li>Mundo 1</li>
<li>Mundo 2</li>
<li>Mundo 3</li>
<li>Mundo 4</li>
<li>Mundo 5</li>
</ul>
</body>
</html>
Mas Groovy
- Groovy Doc:
http://groovy.codehaus.org/
- Groovy Koans:
https://github.com/cjudd/groovy_koans
Preguntas...