Llevo un tiempo desarrollando en Groovy y me pregunto con qué frecuencia debería utilizar el casting dinámico def
. Un compañero de trabajo mío cree que deberíamos usarlo siempre, ya que ayuda a Groovy de alguna manera que no entiendo.
Actualmente, al declarar los tipos y argumentos de retorno de métodos, me gusta establecer deliberadamente qué objetos se deben incorporar y escupir (para facilitar la lectura del código y vengo de un fondo de Java, tiene sentido para mí) ejemplo:
String doSomething(String something){
//code
}
// vs
def doSomething(def somthing){
//code
}
// vs
def doSomething(somthing){
// code
}
Entonces, supongo que mi pregunta es solo una preferencia de cuándo usarlo def
o ¿hay una ventaja real de usarlo todo el tiempo? (Agregué el último ejemplo porque sentí que encaja con la pregunta como una opción viable para Groovy)
Respuestas:
Como buena práctica de programación (incluso scripting), siempre considere especificar un tipo definido (aunque no necesariamente concreto) para una variable. Use
def
solo si no hay un tipo definido aplicable a la variable.Dado que el OP conoce Java, no es diferente de especificar un tipo de
Object
(aunque parece haber una pequeña diferencia ). La respuesta a esta pregunta no será diferente de responder una pregunta como: "¿por qué no usar siempre elObject
tipo en Java?"Ser tan definido sobre los tipos como sea posible reduce las posibilidades de errores e incluso sirve como documentación propia. Mientras que, si uno está implementando deliberadamente una lógica dinámica, usarlo
def
podría tener mucho sentido. De hecho, esa es una de las mayores fortalezas de Groovy; ¡el programa puede ser tan dinámico o estático como se necesita! Simplemente no dejes que la pereza sea la razón para usardef
;-)Por ejemplo, este método tiene sentido con un tipo de argumento definido y un tipo de retorno:
mientras que este método tiene sentido con el tipo
def
fuente
Cada vez que el código que está escribiendo será utilizado por otros como una API pública, siempre debe favorecer el uso de tipeo fuerte, ayuda a fortalecer el contrato, evita posibles errores de tipo de argumentos pasados, brinda una mejor documentación y también ayuda El IDE con la finalización del código. Siempre que el código sea solo para su uso, como métodos privados, o cuando el IDE pueda inferir fácilmente el tipo, entonces es más libre de decidir cuándo escribir o no.
fuente