Соглашение об именах @FunctionalInterface - PullRequest
0 голосов
/ 01 июля 2018

По соглашению, типы должны именоваться существительными, это нормально. Однако @FunctionalInterface - это особый тип - тип объекта, который действует как функция / метод. В случае функции я чувствую, что более естественно выбрать глагол, например decorate.apply(o) вместо существительного decorator.apply(o). И есть также существительные, выражающие действия, например decoration.apply(o).

Если я посмотрю на пакет java.util.function , все функции будут названы существительными: Function, Operator, Consumer, Supplier, ... Если я предпочитаю существительные , глаголы или существительные, выражающие глаголы ?

1 Ответ

0 голосов
/ 01 июля 2018

@FunctionalInterface может помечать только типы (классы, интерфейсы, аннотации, перечисления).

Чтобы назвать тип, вы должны использовать существительное, а для метода нужен глагол.

Классы

Имена классов должны быть существительными в смешанном регистре с заглавной первой буквой каждого внутреннего слова. Постарайтесь, чтобы названия ваших классов были простыми и наглядными. Используйте целые слова, избегайте сокращений и аббревиатур (если только аббревиатура не используется гораздо шире, чем полная форма, такая как URL или HTML).

class Raster; 
class ImageSprite;

Методы

Методы должны быть глаголами, в смешанном регистре с первой буквой в нижнем регистре, причем первая буква каждого внутреннего слова пишется с большой буквы.

run(); 
runFast(); 
getBackground();

Соглашения об именах, Oracle

Вот пример того, как я бы определил функциональный интерфейс.

@FunctionalInterface
interface Decorator {

    void decorate();

}

В коде это выглядит читабельно.

Decorator decorator = () -> {};
decorator.decorate();

Мои мысли о "декоратор против украшения":

"Decoration" больше относится к описанию процесса / результата, тогда как "Decorator" - это механизм / инструмент / средство для запуска этого процесса / для получения этого результата.

Если бы я увидел класс Decoration в коде, я бы подумал о коллекции декоративных элементов (например, орнаменты, краски, обои), а не о человеке, который на самом деле украшает.

Если бы я увидел Decorator или Painter, я бы ожидал такие методы, как decorate() или paint(), потому что это то, что они могут / должны делать.

Сравните suppliance/supplier -> get() и consumption/consumer -> accept(t).

...