Позвольте мне предложить некоторые взгляды на то, почему мы добавили эту функцию в язык, когда явно в этом не было особой необходимости (все ссылки на методы могут быть выражены как лямбды).
Обратите внимание, что нет правильного ответа . Следует игнорировать любого, кто говорит «всегда использовать ссылку на метод вместо лямбда» или «всегда использовать лямбда вместо ссылки на метод».
Этот вопрос очень похож по духу на «когда мне следует использовать именованный класс, а не анонимный»? И ответ тот же: когда он станет более читаемым . Конечно, есть дела, которые определенно являются одним или определенно другим, но посередине много серого, и нужно использовать суждение.
Теория, лежащая в основе метода refs, проста: имена имеют значение . Если у метода есть имя, то обращение к нему по имени, а не с помощью обязательного пакета кода, который в конечном итоге просто поворачивается и вызывает его, часто (но не всегда!) Более четкое и читабельное.
Споры о производительности или о подсчете символов в основном отвлекают, и вам следует их игнорировать. Наша цель - написать код, в котором кристально ясно, что он делает. Очень часто (но не всегда!) Ссылки на методы выигрывают по этой метрике, поэтому мы включили их в качестве опции для использования в таких случаях.
Ключевое соображение относительно того, проясняют ли ссылки на методы или скрывают намерения, является то, очевидно ли из контекста, какова форма представляемой функции. В некоторых случаях (например, map(Person::getLastName)
из контекста совершенно ясно, что требуется функция, которая сопоставляет одно с другим, и в подобных случаях светятся ссылки на методы. В других случаях использование метода ref требует, чтобы читатель задумался о том, какой вид of функции; это предупреждающий знак, что лямбда может быть более читаемой, даже если она длиннее.
Наконец, мы обнаружили, что большинство людей сначала избегают ссылок на методы, потому что они кажутся еще более новыми и странными, чем лямбды, и поэтому сначала находят их «менее читаемыми», но со временем, когда они привыкнут к синтаксису, обычно меняют свое поведение и по возможности обращаются к ссылкам на методы. Так что имейте в виду, что ваша собственная субъективная первоначальная «менее читабельная» реакция почти наверняка влечет за собой некоторый аспект предвзятости в отношении фамильярности, и вы должны дать себе возможность освоиться с обоими, прежде чем высказывать стилистическое мнение.