Подтвердить что ты не робот

Выражение Lambda по отношению к методу

IntelliJ продолжает предлагать мне заменить мои лямбда-выражения ссылками на методы.

Есть ли какая-то объективная разница между ними?

4b9b3361

Ответ 1

Позвольте мне дать некоторое представление о том, почему мы добавили эту функцию в язык, когда явно нам это не нужно (все ссылки на методы можно выразить как лямбды).

Обратите внимание, что нет правильного ответа. Любой, кто говорит "всегда используйте метод ref вместо лямбды" или "всегда используйте лямбду вместо метода ref", должен игнорироваться.

Этот вопрос по духу очень похож на "когда я должен использовать именованный класс против анонимного класса"? И ответ тот же: когда вы найдете его более читабельным. Есть, конечно, случаи, которые однозначно или однозначно являются другими, но в середине есть множество серых, и необходимо использовать суждение.

Теория метода refs проста: имена имеют значение. Если у метода есть имя, то обращение к нему по имени, а не по императивному пакету кода, который в конечном итоге просто поворачивается и вызывает его, часто (но не всегда!) Более понятно и читабельно.

Аргументы о производительности или о подсчете символов - это в основном красные сельди, и вы должны их игнорировать. Целью является написание кода, который кристально ясно, что он делает. Очень часто (но не всегда!) Метод refs побеждает в этой метрике, поэтому мы включили их в качестве опции для использования в этих случаях.

Ключевое соображение относительно того, является ли метод refs разъясняющим или запутывающим намерение, состоит в том, очевидно ли из контекста, какова форма представляемой функции. В некоторых случаях (например, map(Person::getLastName), из контекста совершенно ясно, что требуется функция, которая отображает одну вещь на другую, и в подобных случаях ссылки на метод блестят. В других, использование метода ref требует читатель задается вопросом о том, какую функцию описывают, это предупреждающий признак того, что лямбда может быть более читабельной, даже если она длиннее.

Наконец, мы обнаружили, что большинство людей сначала избегают ссылок на методы, потому что чувствуют себя еще новее и страннее, чем лямбды, и поэтому вначале находят их "менее читабельными", но со временем, когда привыкнут к синтаксису, обычно меняют свое поведение и тяготеют к ссылкам на методы, когда могут. Так что имейте в виду, что ваша собственная субъективная первоначальная "менее читаемая" реакция почти наверняка влечет за собой некоторые аспекты предвзятости фамильярности, и вы должны дать себе шанс освоиться с обоими, прежде чем высказывать стилистическое мнение.

Ответ 2

Длинные лямбда-выражения, состоящие из нескольких операторов, могут уменьшить удобочитаемость вашего кода. В таком случае извлечение этих операторов в методе и обращение к ней может быть лучшим выбором.

Другая причина может быть повторного использования. Вместо копирования и вставки вашего лямбда-выражения нескольких операторов вы можете создать метод и вызвать его из разных мест вашего кода.