Skip to content

Commit a561906

Browse files
Jaime Salas ZancadaJaime Salas Zancada
authored andcommitted
added Groovy demos
1 parent 55e2b7a commit a561906

File tree

8 files changed

+851
-0
lines changed

8 files changed

+851
-0
lines changed

03-cd/00-groovy/00-grovy-console.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# The Groovy Console
2+
3+
Lo primero que necesitamos para trabajar con cualquier tipo de lenhuajes es algo que valide y verificque que nuestro código se comporta de la manera que nsostros esperamos.
4+
5+
6+
Nuestro objectivo final será `Jenkins`. Como nota al respecto, `Jenkins` tiene internamente, una consola de `Groovy` para validar de los `scripts`. Pero para desarrollar nos puede convenir una solución más ligera.
7+
8+
`Apache`, tiene una herramienta como la que necesiatamos [link](http://groovy-lang.org/download.html). Esta aplicación es una aplicación de `swing`.
9+
10+
* Algo para verificar y validar nuestro código.
11+
* Nuestro objetivo es `Jenkins`.
12+
* Un sitio para experimentar.
13+
14+
Una alternativa a instalar de manera local, es utilizar un [contenedor de Docker](https://hub.docker.com/_/groovy?tab=description)
15+
16+
```bash
17+
docker run -it --rm groovy
18+
19+
# Running a Groovy script
20+
docker run --rm -v "$PWD":/home/groovy/scripts -w /home/groovy/scripts groovy groovy <script> <script-args>
21+
```
22+
23+
> Referencia: https://groovy-lang.gitlab.io/101-scripts/docker/basico-en.html
24+
25+
Crear `BasicDocker.groovy`
26+
27+
```groovy
28+
println "------------------------------------------------------------------"
29+
println "Hello"
30+
System.getenv().each{
31+
println it
32+
}
33+
println "------------------------------------------------------------------"
34+
```
35+
36+
Ahora desde el directorio raíz en el cual hemos creado el ficero anterior, podemos ejecutar:
37+
38+
```bash
39+
docker run --rm -v "$PWD":/home/groovy/scripts -w /home/groovy/scripts groovy:latest groovy BasicDocker.groovy -a
40+
```
41+
42+
* `-a` es para volcar las variables de sistema.
43+
* `-w` establecemos el directorio de trabajo dentro del contenedor.
44+
45+
# Demo: La Consola de Groovy
46+
47+
* Create `playground/00_groovy_console.groovy`
48+
49+
```groovy
50+
def x = 5
51+
52+
x += 5
53+
54+
println x
55+
assert x == 10
56+
```
57+
58+
Y lo podemos ejecutar de la siguiente manera:
59+
60+
```bash
61+
$ docker run --rm -v $(pwd):/home/groovy/scripts -w /home/groovy/scripts groovy:latest groovy 00_groovy_console.groovy
62+
$ 10
63+
```
64+
65+
Si cambiamos el valor de `x`
66+
67+
```diff
68+
def x = 5
69+
70+
x += 5
71+
72+
println x
73+
-assert x == 10
74+
+assert x == 11
75+
```
76+
77+
Podemos introducir un mensaje si la aseveración no pasa.
78+
79+
```diff
80+
def x = 5
81+
82+
x += 5
83+
84+
println x
85+
-assert x == 11
86+
+assert x == 11: "Value was not eleven"
87+
```
88+
89+
```bash
90+
Jaimes-MacBook-Pro:playground jaimesalaszancada$ docker run --rm -v $(pwd):/home/groovy/scripts -w /home/groovy/scripts groovy:latest groovy 00_groovy_console.groovy
91+
10
92+
Caught: java.lang.AssertionError: Value was not eleven. Expression: (x == 11). Values: x = 10
93+
java.lang.AssertionError: Value was not eleven. Expression: (x == 11). Values: x = 10
94+
at 00_groovy_console.run(00_groovy_console.groovy:7)
95+
```

03-cd/00-groovy/01-tipos-de-datos.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Tipos de Datos
2+
3+
**Groovy** es un lenguaje con tipado opcional, lo que significa que podemos trabajar con tipos `primitivos de Java`, o podemos dejar que el `runtime` los deduzca del contexto, lo cuál lo hace bastante bien.
4+
5+
* `x` es claramente un número
6+
* Un lenguaje opcionalmente tipado
7+
* Sin ninguna definición de tipo
8+
9+
Veamos cuales son los tipo primitivos que vamos a utilizar:
10+
11+
| Data Type | Groovy Keyword | Sample Data |
12+
|:---------:|:--------------:|---------------|
13+
| Strings | String | "Jaime Salas" |
14+
| Integers | int | 0, 1, 2, 3 |
15+
| Floats | float | 0.5, 3.8 |
16+
| Boolean | Boolean | true, false |
17+
18+
# Demo: Tipos de Datos
19+
20+
Creamos el siguiente fichero [01_groovy_data_types.groovy](playground/01_groovy_data_types.groovy)
21+
22+
```groovy
23+
String name = "Joe Doe"
24+
int courseCount = 14
25+
float salary = 999999.99
26+
Boolean isProgrammer = true
27+
28+
println name + " has created " + courseCount + " courses." // [1]
29+
println name + " is a programmer? " + isProgrammer // [1]
30+
println name + " wishes his salary was " + salary // [1]
31+
```
32+
33+
1. Groovy convierte los `booleans` y `float` a `strings`
34+
35+
Y lo podemos ejecutar de la siguiente manera:
36+
37+
```bash
38+
$ docker run --rm -v $(pwd):/home/groovy/scripts -w /home/groovy/scripts groovy:latest groovy 01_groovy_data_types.groovy
39+
Joe Doe has created 14 courses.
40+
Joe Doe is a programmer? true
41+
Joe Doe wishes his salary was 1000000.0
42+
```
43+
44+
Vamos a introducir una pequeña diferencia
45+
46+
```diff
47+
String name = "Joe Doe"
48+
int courseCount = 14
49+
float salary = 999999.99
50+
Boolean isProgrammer = true
51+
52+
println name + " has created " + courseCount + " courses."
53+
-println name + " is a programmer? " + isProgrammer
54+
+println name + " is a programmer? " + isProgrammer.toString().capitalize()
55+
println name + " wishes his salary was " + salary
56+
```
57+
58+
```bash
59+
$ docker run --rm -v $(pwd):/home/groovy/scripts -w /home/groovy/scripts groovy:latest groovy 01_groovy_data_types.groovy
60+
Joe Doe has created 14 courses.
61+
Joe Doe is a programmer? True
62+
Joe Doe wishes his salary was 1000000.0
63+
```
64+
65+
Podemos notar que `Groovy` tiene un problema al convertir de `float` a `string`, podemos tener un control más fino usando el formateo de `String`.
66+
67+
```diff
68+
String name = "Joe Doe"
69+
int courseCount = 14
70+
float salary = 999999.99
71+
Boolean isProgrammer = true
72+
73+
println name + " has created " + courseCount + " courses."
74+
println name + " is a programmer? " + isProgrammer.toString().capitalize()
75+
-println name + " wishes his salary was " + salary
76+
+println name + " wishes his salary was \$" + String.format("%.2f", salary)
77+
```
78+
79+
```bash
80+
$ docker run --rm -v $(pwd):/home/groovy/scripts -w /home/groovy/scripts groovy:latest groovy 01_groovy_data_types.groovy
81+
Joe Doe has created 14 courses.
82+
Joe Doe is a programmer? True
83+
Joe Doe wishes his salary was $1000000.00
84+
```
85+
86+
Seguimos teniendo un problema, simplemente podemos cambiar el tipo:
87+
88+
```diff
89+
String name = "Joe Doe"
90+
int courseCount = 14
91+
-float salary = 999999.99
92+
+BigDecimal salary = 999999.99
93+
Boolean isProgrammer = true
94+
95+
println name + " has created " + courseCount + " courses."
96+
println name + " is a programmer? " + isProgrammer.toString().capitalize()
97+
-println name + " wishes his salary was \$" + String.format("%.2f", salary)
98+
+println name + " wishes his salary was \$" + salary
99+
```
100+
101+
Simplemente como nota en `Java` tenemos `;` para terminar una línea, en `Groovy` son opcionales.
102+
103+
### Tipos de Datos y Sintaxis
104+
105+
* "def" opcional o tipo de dato explicito
106+
* ¿Perder el tipado? Nop
107+
* Ciando devolvemos un valor está perfectamente claro el tipo devuelto
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Estructuras de Control
2+
3+
Para hacer algo medianamente importante en nuestros scripts, necesitamos estructuras de control. La más esencial de ellas es `if else`, que tiene la misma apariencia que en `Java` on en `C`
4+
5+
```groovy
6+
if (isProgrammer) {
7+
println "He's a programmer, alright"
8+
}
9+
else {
10+
println "Not a programmer, tho"
11+
}
12+
```
13+
14+
Lo mismo para un `loop`
15+
16+
```groovy
17+
for (int i = 0; i < courseCount; i++) {
18+
println "Chris made course " + (i + 1) + "!!!"
19+
}
20+
```
21+
22+
Lo mismo de cun un `while loop`
23+
24+
```groovy
25+
int i = 0;
26+
27+
while (i < courseCount) {
28+
println "Chris made course " + (i + 1) + "!!!"
29+
i++
30+
}
31+
```
32+
33+
34+
Podemos definir un `for in loop` de la siguiente manera:
35+
36+
```groovy
37+
String[] singers = ["Bob", "George", "Jeff", "Roy", "Tom"]
38+
39+
for(String singer: singers) {
40+
println singer
41+
}
42+
```
43+
44+
Podemos definir el bucle anterior de una manera más compacta:
45+
46+
```groovy
47+
singers.each(x -> println(x))
48+
```
49+
50+
Podemos incluso darle una vuelta de tuerca más alimentando directamente el `iterador`.
51+
52+
```groovy
53+
singers.each(println(it))
54+
```
55+
56+
# Demo: Estructuras de Control
57+
58+
Crear el siguiente el fichero [02_control_structures.groovy](playground/02_control_structures.groovy)
59+
60+
```groovy
61+
int courseCount = 14;
62+
Boolean isProgrammer = true;
63+
String[] singers = ["Bob", "George", "Jeff", "Roy", "Tom"]
64+
65+
if (isProgrammer) {
66+
println "He's a programmer"
67+
}
68+
else {
69+
println "not a programmer"
70+
}
71+
72+
for (int i = 0; i < courseCount; i++) {
73+
println "Chris made course " + (i + 1) + "!!!"
74+
}
75+
76+
for (String singer: singers) {
77+
println singer
78+
}
79+
80+
singers.each(x -> println(x))
81+
singers.each{println(it)}
82+
```
83+
84+
Y lo ejecutamos de la siguiente manera:
85+
86+
```bash
87+
$ docker run --rm -v $(pwd):/home/groovy/scripts -w /home/groovy/scripts groovy:latest groovy 02_control_structures.groovy
88+
He's a programmer
89+
Chris made course 1!!!
90+
Chris made course 2!!!
91+
Chris made course 3!!!
92+
Chris made course 4!!!
93+
Chris made course 5!!!
94+
Chris made course 6!!!
95+
Chris made course 7!!!
96+
Chris made course 8!!!
97+
Chris made course 9!!!
98+
Chris made course 10!!!
99+
Chris made course 11!!!
100+
Chris made course 12!!!
101+
Chris made course 13!!!
102+
Chris made course 14!!!
103+
Bob
104+
George
105+
Jeff
106+
Roy
107+
Tom
108+
Bob
109+
George
110+
Jeff
111+
Roy
112+
Tom
113+
```

0 commit comments

Comments
 (0)