Я уже некоторое время занимаюсь разработкой в Groovy, и мне интересно, как часто мне следует использовать динамическое приведение def
? Мой коллега считает, что мы должны использовать его всегда, так как это помогает Groovy каким-то образом, я не понимаю.
В настоящее время, когда я объявляю методы, возвращающие типы и аргументы, мне нравится сознательно указывать, какие объекты следует принимать и выплевывать (для удобства чтения кода, и я пришел из Java-фона, это имеет смысл для меня), например:
String doSomething(String something){
//code
}
// vs
def doSomething(def somthing){
//code
}
// vs
def doSomething(somthing){
// code
}
Поэтому я думаю, что мой вопрос - это просто предпочтение того, когда использовать, def
или есть реальное преимущество в том, чтобы использовать его постоянно? (Я добавил последний пример, потому что мне показалось, что он подходит для вопроса как жизнеспособного варианта для Groovy)
Ответы:
В качестве хорошей практики программирования (даже написания сценариев) всегда рассматривайте возможность указания определенного (хотя и не обязательно конкретного) типа для переменной. Используйте
def
только если нет определенного типа, применимого к переменной.Поскольку OP знает Java, он ничем не отличается от указания типа
Object
(хотя, кажется, есть небольшая разница ). Тогда ответ на этот вопрос не будет отличаться от ответа на вопрос типа «почему не всегда использоватьObject
тип в Java?»Быть как можно более определенным в отношении типов снижает вероятность ошибок и даже служит самодокументированием. Принимая во внимание, что если кто-то намеренно реализует динамическую логику, тогда использование
def
может иметь большой смысл. Это на самом деле одна из самых сильных сторон Groovy; программа может быть динамически или статически типизирована так, как это необходимо! Только не позволяйте лени быть причиной для использованияdef
;-)Например, этот метод имеет смысл с определенным типом аргумента и типом возвращаемого значения:
в то время как этот метод имеет смысл с типом
def
источник
Всякий раз, когда код, который вы пишете, будет использоваться другими в качестве общедоступного API, вы всегда должны отдавать предпочтение использованию строгой типизации, это помогает укрепить контракт, позволяет избежать возможных ошибок ввода аргументов, дает лучшую документацию, а также помогает IDE с дополнением кода. Всякий раз, когда код предназначен только для вашего использования, например, частные методы, или когда среда IDE может легко определить тип, вы можете более свободно решать, когда печатать или нет.
источник