Благодаря библиотеке jQuery примерно с 2006 года (то есть лет пять как) никому не надо объяснять, что такое method chaining: это та самая техника программирования, в которой методы объекта могут быть вызваны друг за другом по цепочке, как в jQuery.
Главнейшим достоинством этой техники является заметная экономия усилий программиста. С нею программисту не приходится заново, неоднократно записывать имя объекта вот в такой манере:
Вместо этого программист может вызвать все методыцепóчкою — в одну строку:
Если же ему покажется, что такой вид записи хуже читается человеком, чем предыдущий (особенно когда у методов появляются параметры, иногда довольно обширные), то тогда программист может записывать имена методов с новой строки (JavaScript это позволяет), но всё равно экономить на имени объекта:
На практике возможность такой техники обеспечивается тем, что ни один метод объекта не возвращает значение undefined. Вместо этого, если метод является командою, а не запросом (то есть выполняет некоторое действие, а не возвращает некоторое значение), то в конце его автор библиотеки пишет«return this» — этим-то и обеспечивается возможность записи вызова нескольких команд подряд в форме цепочки.
Насколько я знаю, устоявшегося русского эквивалента англоязычному словосочетанию «method chaining» пока что не существует. Наверное, можно говоритьо «цепочечной» или, для простоты, о «цепной» форме вызова методов.
Удобство цепного вызова вызывает привыкание. Ну правда же: достаточнопару-тройку-другую недель попрограммировать на jQuery — и обыкновенные API начинают раздражать, даже бесить, своею допотопною невозможностью цепного вызова. Также недостаёт возможности задания их свойств в виде объекта, передаваемого методу, подобному .css({color: 'red', 'line-height': 1}) в jQuery.
Вообразите себе, например, как необыкновенно было бы удобно, кабы по холсту(<canvas>) можно было рисовать цепными вызовами в такой манере:
И средство для именно таких цепных вызовов появилось — благодаря Lea Verou. Вот оно:
![[Chainvas]](https://habrastorage.org/getpro/habr/post_images/b09/77b/18b/b0977b18b6fd85ecfbe1485ec689791a.jpg)
Главнейшим достоинством этой техники является заметная экономия усилий программиста. С нею программисту не приходится заново, неоднократно записывать имя объекта вот в такой манере:
obj.шмяк();
obj.тыдыжжь();
obj.ынц();
Вместо этого программист может вызвать все методы
obj.шмяк().тыдыжжь().ынц();
Если же ему покажется, что такой вид записи хуже читается человеком, чем предыдущий (особенно когда у методов появляются параметры, иногда довольно обширные), то тогда программист может записывать имена методов с новой строки (JavaScript это позволяет), но всё равно экономить на имени объекта:
obj
.шмяк(параметр1, параметр2, …)
.тыдыжжь(параметр1, параметр2, …)
.ынц(параметр1, параметр2, …);
На практике возможность такой техники обеспечивается тем, что ни один метод объекта не возвращает значение undefined. Вместо этого, если метод является командою, а не запросом (то есть выполняет некоторое действие, а не возвращает некоторое значение), то в конце его автор библиотеки пишет
Насколько я знаю, устоявшегося русского эквивалента англоязычному словосочетанию «method chaining» пока что не существует. Наверное, можно говорить
Удобство цепного вызова вызывает привыкание. Ну правда же: достаточно
Вообразите себе, например, как необыкновенно было бы удобно, кабы по холсту
ctx.beginPath()
.prop({
lineWidth: 2,
strokeStyle: '#333'
}).moveTo(0,0)
.bezierCurveTo(50,50, 80,80, 100,100)
.stroke().closePath();
И средство для именно таких цепных вызовов появилось — благодаря Lea Verou. Вот оно:
![[Chainvas]](https://habrastorage.org/getpro/habr/post_images/b09/77b/18b/b0977b18b6fd85ecfbe1485ec689791a.jpg)