Presentado en el evento "We Lead" de Women Who Code Monterrey.
Este archivo contiene las explicaciones de lo aprendido en el taller y ejercicios para probar tu conocimiento en cada subtema.
Para ver directamente los scripts que se presentaron en el taller (sin las explicaciones), ve a este archivo: scripts.md
Simplemente hay que ir a dwlang.fun para poder ver la página del DataWeave Playground.
Del lado izquierdo se encuentra el input
para el script, en medio es donde se escribe el código (script
), y en la derecha es donde se encuentra el output
o el resultado de la transformación.
Ver documentación oficial de MuleSoft sobre los principios de la programación funcional
Ver documentación oficial de MuleSoft sobre la estructura de los scripts de DataWeave
El uso más básico de DataWeave es para transformar datos de un formato a otro. Por ejemplo de XML
a JSON
.
Ver documentación oficial de MuleSoft sobre formatos
Para hacer esto, solo se tiene que cambiar el tipo de output
. Ejemplo:
Input
<?xml version='1.0' encoding='UTF-8'?>
<message>Hello world!</message>
Script
%dw 2.0
output application/json
---
payload
Output
{
"message": "Hello world!"
}
Así como en otros lenguajes de programación existe el String, Integer, Float, Char, Tuple, etc. En DataWeave existen varios tipos de datos, pero nos vamos a enfocar en estos 5:
- Strings (
"hello world"
) - Numbers (
1
,2.5
,-868
) - Booleans (
true
,false
) - Arrays (
[1, 2, 3]
,["a","b","c"]
,[{},1,true,"a"]
) - Objects (
{}
,{"field":"value"}
)
Ver documentación oficial de MuleSoft sobre tipos de datos
Ver ejercicio de tipos de datos.
Se pueden hacer diferentes operaciones con los datos, dependiendo de su tipo.
Ver documentación oficial de MuleSoft sobre operadores
Operadores matemáticos
+
- suma-
- resta*
- multiplicación/
- división
Operadores de igualdad y relacionales
<
- menor que>
- mayor que<=
- menor o igual que>=
- mayor o igual que==
- igual a~=
- igual a (convirtiendo diferentes tipos de datos en uno mismo)
Operadores lógicos
not
- negación de todas las condiciones en conjunto!
- negación de solo la primera condiciónand
- regresatrue
si todas las condiciones se cumplenor
- regresatrue
si al menos una condición se cumple
Operadores para Array
>>
- anteponer<<
- adjuntar+
- adjuntar-
- remover
Cuando se crean variables en DataWeave, no se tiene que seleccionar un tipo de dato ni se tiene que inicializar, como en otros lenguajes. Para crear una nueva variable, se tiene que usar la palabra clave var
, seguido del nombre de la variable y la asignación (usando el signo de igual =
). Nota que la declaración se tiene que hacer sobre los tres guiones (---
) del script.
Ver documentación oficial de MuleSoft sobre variables
Script
%dw 2.0
output application/json
var myStr = "Hello World"
---
myStr
Output
"Hello World"
Como DataWeave es un lenguaje de programación funcional, las variables se pueden usar como funciones.
Script
%dw 2.0
output application/json
var myStr = "Hello World"
var mayus = (str) -> upper(str)
---
mayus(myStr)
Output
"HELLO WORLD"
Para asignar tipos de datos a las variables, se escriben dos puntos (:
) después del nombre de la variable, seguido por el tipo de dato que se le quiere asignar.
Script
%dw 2.0
output application/json
var myStr: String = "Hello World"
var mayus = (str: String) -> upper(str)
---
mayus(myStr)
Output
"HELLO WORLD"
Al crear funciones en DataWeave, no se tiene que especificar el tipo de dato de los argumentos, o el tipo de dato que va a regresar la función.
Para crear una nueva función, se usa la palabra clave fun
, seguido del nombre de la función. Después, entre paréntesis, se escriben los nombres de los argumentos separados por coma (,
). Finalmente, se asigna el código a la función con el signo de igual (=
). Nota que la declaración se tiene que hacer sobre los tres guiones (---
) del script.
No es necesario poner el código de la función entre paréntesis (()
) o llaves ({}
). DataWeave puede reconocer que el código siguiente le pertenece a la función.
Ver documentación oficial de MuleSoft sobre funciones
Script
%dw 2.0
output application/json
fun mayus(str) = upper(str)
---
mayus("Hello World")
Output
"HELLO WORLD"
Para evitar errores, puedes asignar tipos de datos a los argumentos de las funciones. Al igual que con las variables, se escriben dos puntos (:
) después del nombre del argumento, seguido por el tipo de dato que se le quiere asignar.
Script
%dw 2.0
output application/json
fun mayus(str: String) = upper(str)
---
mayus("Hello World")
Output
"HELLO WORLD"
También se le pueden asignar tipos de datos a las funciones (es decir, lo que van a regresar). Esta vez se escriben los dos puntos y el tipo de dato después de los paréntesis donde están los argumentos, o bien, antes del signo de igual.
Script
%dw 2.0
output application/json
fun mayus(str: String): String = upper(str)
---
mayus("Hello World")
Output
"HELLO WORLD"
El mayor beneficio de asignar tipos de datos a las funciones es para poder usar Function Overloading (o sobrecarga de funciones). No se tocará ese tema en este taller, pero puedes leer al respecto aquí.
Al igual que en otros lenguajes de programación, existen formas de controlar el "flujo" o la lógica del código usando condiciones. En DataWeave se utiliza if
/else
.
Para crear condiciones, se usa primero la palabra clave if
, seguida de la condición entre paréntesis (()
). Después de esto no es necesario abrir paréntesis (()
) o llaves ({}
), ya que DataWeave puede reconocer que el código siguiente pertenece al if
.
A diferencia de otros lenguajes, aquí sí se tiene que agregar un else
después de un if
, para asegurarnos de que ambas rutas van a estar cubiertas en el código y siempre se va a asignar un valor sin importar si la condición se cumple o no. Después de crear el código del if
, se agrega la palabra clave else
y tampoco es necesario abrir paréntesis o llaves; con escribir código después de esto, DataWeave reconoce que pertenece al else
.
Ver documentación oficial de MuleSoft sobre control de flujo (condiciones)
Script
%dw 2.0
output application/json
fun concat(str1, str2) =
if (str1 is String and str2 is String) str1 ++ str2
else null
---
concat("Hello"," World")
Output
"Hello World"
Se puede agregar más de una condición usando las palabras else if
antes del último else
. En realidad lo que se hace es que se crea otro if
dentro del else
, anidando así varias declaraciones de if/else
para contemplar diferentes condiciones.
Script
%dw 2.0
output application/json
fun getCodigo(pais) =
if (pais == "Mexico") "MX"
else if (pais == "Estados Unidos") "EUA"
else if (pais == "Canada") "CA"
else "Otro pais"
---
getCodigo("Mexico")
Output
"MX"