Цепочка методов
Эта статья нуждается в дополнительных цитатах для проверки . ( май 2008 г. ) |
Цепочка методов — это общий синтаксис для вызова нескольких методов в объектно-ориентированных языках программирования . Каждый метод возвращает объект, что позволяет объединить вызовы в одну инструкцию без необходимости использования переменных для хранения промежуточных результатов. [1]
Обоснование
[ редактировать ]локальных переменных Объявления — это синтаксический сахар . [2]
Цепочка методов исключает дополнительную переменную для каждого промежуточного шага. Разработчик избавлен от когнитивной нагрузки, связанной с присвоением имени переменной и ее запоминанием.
Цепочку методов называют «крушением поезда» из-за увеличения количества методов, идущих один за другим в одной строке, что происходит по мере того, как все больше методов объединяются в цепочку. [3]
Аналогичным синтаксисом является каскадирование методов , где после вызова метода выражение оценивается как текущий объект, а не возвращаемое значение метода. Каскадирование можно реализовать с помощью цепочки методов, заставив метод возвращать сам текущий объект . Каскадирование — ключевой метод в Fluent-интерфейсах , и поскольку цепочка широко реализована в объектно-ориентированных языках, а каскадирование — нет, эта форма «каскадирования за цепочкой путем возврата» это часто называют просто «связыванием». И связывание, и каскадирование пришли из языка Smalltalk .
Хотя цепочка является синтаксисом, она имеет семантические последствия, а именно, требует, чтобы методы возвращали объект, и при реализации каскадирования через цепочку это должен быть текущий объект. Это предотвращает использование возвращаемого значения для каких-либо других целей, например, для возврата значения ошибки .
Примеры
[ редактировать ]Типичным примером является iostream в C++ , где, например, <<
возвращает левый объект, позволяя создавать цепочки.
Сравнивать:
a << b << c;
эквивалентно:
a << b;
a << c;
Другой пример в JavaScript использует встроенные методы Array:
somethings
.filter(x => x.count > 10)
.sort((a, b) => a.count - b.count)
.map(x => x.name)
См. также
[ редактировать ]- Свободный интерфейс
- Конвейер (Unix)
- Вложение (вычисления)
- Шаблон строителя
- Пирамида судьбы (программирование)
Ссылки
[ редактировать ]- ^ «Применение цепочки методов» . Первоклассные мысли. Архивировано из оригинала 22 февраля 2011 г. Проверено 13 апреля 2011 г.
Чтобы упростить повторяющиеся взаимодействия объектов с одним и тем же объектом, следует применить старый трюк « Сцепление методов», зародившийся в мире Smalltalk. Идея состоит в том, чтобы позволить методам возвращать
this
скорее, чемvoid
, тем самым особенно влияяset()
иadd()
методы. Цепочка методов возникла, когда разработчики Smalltalk стремились минимизировать количество ключевых слов в языке, что привело к открытию, чтоvoid
это ненужное ключевое слово!. - ^ «CMSC 631 – Анализ и понимание программы» (PDF) .
• Синтаксический сахар для локальных объявлений — пусть x = e1 в e2 является сокращением от (λx.e2) e1.
- ^ Мартин, Роберт Сесил (2008). Чистый код: Справочник по гибкому программному обеспечению . Прентис Холл . ISBN 0-13-235088-2 .