Od jakiegoś czasu rozwijam się w Groovy i zastanawiam się, jak często powinienem używać dynamicznego rzutowania def
? Mój współpracownik uważa, że powinniśmy go zawsze używać, ponieważ pomaga Groovy w jakiś sposób, którego nie rozumiem.
Obecnie, deklarując typy zwracane przez metody i argumenty, lubię celowo określać, które obiekty należy pobrać i wypluć (dla czytelności kodu i pochodzę z tła Java ma to dla mnie sens) przykład:
String doSomething(String something){
//code
}
// vs
def doSomething(def somthing){
//code
}
// vs
def doSomething(somthing){
// code
}
Więc myślę, że moje pytanie jest to tylko preferencja kiedy użyć def
lub czy istnieje realne zaletą korzystania to cały czas? (Dodałem ostatni przykład, ponieważ czułem, że pasuje on do pytania jako realnej opcji dla Groovy)
Odpowiedzi:
Jako dobrą praktykę programowania (nawet skryptowania) zawsze rozważ określenie określonego (choć niekoniecznie konkretnego) typu zmiennej. Używaj
def
tylko wtedy, gdy dla zmiennej nie ma określonego typu.Ponieważ OP zna Javę, nie różni się niczym od określenia rodzaju
Object
(choć wydaje się, że istnieje niewielka różnica ). Odpowiedź na to pytanie nie będzie się zatem różnić od odpowiedzi na pytanie typu: „dlaczego nie zawsze używać tegoObject
typu w Javie?”Bycie tak precyzyjnym w zakresie typów, jak to możliwe, zmniejsza ryzyko błędów, a nawet służy jako dokumentacja własna. Podczas gdy, jeśli ktoś celowo implementuje dynamiczną logikę, użycie
def
może mieć sens. To w rzeczywistości jedna z największych zalet Groovy; program można pisać dynamicznie lub statycznie, tak jak trzeba! Tylko nie pozwól, aby lenistwo było powodem do użyciadef
;-)Np. Ta metoda ma sens w przypadku określonego typu argumentu i typu zwracanego:
podczas gdy ta metoda ma sens z typem
def
źródło
Kiedykolwiek kod, który piszesz, będzie używany przez innych jako publiczny interfejs API, zawsze powinieneś faworyzować użycie silnego pisania, pomaga wzmocnić kontrakt, pozwala uniknąć pomyłek w pisaniu argumentów, daje lepszą dokumentację, a także pomaga IDE z uzupełnianiem kodu. Ilekroć kod służy wyłącznie do użytku, na przykład metod prywatnych, lub gdy IDE może łatwo wywnioskować typ, masz większą swobodę decydowania, kiedy wpisać, czy nie.
źródło