В Groovy документации, он упоминает сокращенную запись для доступа к свойствам только по имени, например, obj.getFoo()
будет эквивалентно obj.foo
и obj.setFoo(val)
будет эквивалентно obj.foo = val
. Похоже, что это также применимо к методам с префиксом «есть». Например, с объектом File
вместо obj.isFile()
вы можете сделать obj.file
, и он будет семантически одинаковым. Означает ли это сокращенное обозначение, где вы можете лишить глагол и не иметь круглых скобок для любых других методов Groovy?Groovy сокращенная доступа имя вскрышных глаголом и удаления круглых скобок
ответ
Я бы не думал об этом так же, как удаление глагола и круглых скобок. Это больше похоже на то, что вы напрямую обращаетесь к свойству, как на языках Ruby и Python. Это просто Groovy, удобный и отличный от Java. Существует множество аналогичных удобств на языке, таких как перегрузка операторов по умолчанию для коллекций (например, «< <» и +) и «сборные спреды» с помощью *.
Так что это действительно не так, как доступ к собственности напрямую или удаление глагола. Это синтаксический сахар.
В Groovy:
println bob.name
Является эквивалентом в Java, чтобы:
System.out.println(bob.getName());
В Groovy:
bob.name = "Bob"
Является эквивалентом в Java, чтобы:
bob.setName("Bob");
Также, в Groovy, реализации по умолчанию предоставляются без какого-либо кода. Поэтому, когда вы можете генерировать утилизаторы и сеттеры по умолчанию в Java, Groovy по умолчанию компилируется в ваш класс.
Вы всегда можете переопределить их, предоставив свой собственный геттер и сеттер, чтобы вы никогда не обращались к собственности напрямую.
На сайте Groovy Language имеется большой объем информации. Вот только одно место, где это объясняется, но более подробную информацию можно найти на сайте Groovy Language.
О, право. Да, я понимаю свойства. Чтобы уточнить, я был более удивлен, увидев, что этот синтаксический сахар работает для методов с префиксом «is», таких как isFile(), и поэтому мне было интересно, насколько сильно этот синтаксический сахар покрывает отдельно от свойств. – solstice333
Да, я знаком с Руби и Python свойств. Я должен уточнить - я не думаю, что в документации Groovy упоминается свойство синтаксического сахара, работающего со способами, отличными от getter/seters. Поэтому я был удивлен, увидев, что он работает для isFile(). В принципе, мне было интересно, что другие типы сигнатур свойств синтаксического сахара применимы к другим, которые «получают», «устанавливают» и «есть». – solstice333
Причина, по которой они шли с «is», заключается в том, что это идиома Java. Как правило, с булевыми полями геттер имеет префикс «is», а не «get». Еще одна тонкость Groovy! – rockympls