Safe dereferencing
Esta es una de las características que veo como mis favoritas en Groovy y valga mencionar, es muy poderosa.
El Safe Dereferencing, proporciona una sintaxis muy reducida para acceder a objetos compuestos (Composite).
Para contextualizar, si en Java tenemos un Objeto, Persona y dentro de este tenemos una composición Address y dentro de esta State:
clas State {
String name = "NY"
String detail = "NewYork"
}
class Address {
State state = null
String street
....
}
class Persona {
// ...
Address address = null
}
Si deseamos obtener el atributo "name" del objeto State, deberíamos hacer algo como así, para evitarnos NullPointerException's
String stateName = null;
if (null != persona) {
if (null != persona.getAddress()) {
if (null != persona.getAddress().getState()) {
stateName = persona.getAddress().getState().getName();
En Groovy solo debemos hacer:
stateName = persona?,address?.state?.name
En caso que algunos de los objetos sea nulo, stateName, se le asignará null.
Un ejemplo:
void safeDereferencing () {
println("\nSafe Dereferencing")
(1..3).each { print "*** " }
println("")
def name = "Jon";
println name.size()
name = null
// name.size() dispararía un NullPointerException
// pero si uso dereference =>
// si es nulo name, devuelve null, si no devuelve el tamaño del String.
println name?.size()
} // safeDereferencing.
Salida
Safe Dereferencing
*** *** ***
3
null
Esta es una de las características que veo como mis favoritas en Groovy y valga mencionar, es muy poderosa.
El Safe Dereferencing, proporciona una sintaxis muy reducida para acceder a objetos compuestos (Composite).
Para contextualizar, si en Java tenemos un Objeto, Persona y dentro de este tenemos una composición Address y dentro de esta State:
clas State {
String name = "NY"
String detail = "NewYork"
}
class Address {
State state = null
String street
....
}
class Persona {
// ...
Address address = null
}
Si deseamos obtener el atributo "name" del objeto State, deberíamos hacer algo como así, para evitarnos NullPointerException's
String stateName = null;
if (null != persona) {
if (null != persona.getAddress()) {
if (null != persona.getAddress().getState()) {
stateName = persona.getAddress().getState().getName();
En Groovy solo debemos hacer:
stateName = persona?,address?.state?.name
En caso que algunos de los objetos sea nulo, stateName, se le asignará null.
Un ejemplo:
void safeDereferencing () {
println("\nSafe Dereferencing")
(1..3).each { print "*** " }
println("")
def name = "Jon";
println name.size()
name = null
// name.size() dispararía un NullPointerException
// pero si uso dereference =>
// si es nulo name, devuelve null, si no devuelve el tamaño del String.
println name?.size()
} // safeDereferencing.
Salida
Safe Dereferencing
*** *** ***
3
null
Comentarios