При написании API или объекта многократного использования существует ли какая-либо техническая причина, почему все вызовы методов, возвращающие 'void', должны не просто возвращать 'this' (* this на C++)?Зачем API возвращать 'void'?
Например, используя класс строк, мы можем сделать этот вид вещи:
string input= ...;
string.Join(input.TrimStart().TrimEnd().Split("|"), "-");
, но мы не можем сделать это:
string.Join(input.TrimStart().TrimEnd().Split("|").Reverse(), "-");
..because Array.Reverse() возвращает void.
Есть много других примеров, где API имеет много пустот возвращения операций, поэтому код будет выглядеть как:
api.Method1();
api.Method2();
api.Method3();
..но это было бы вполне возможно написать:
api.Method1().Method2().Method3()
.., если бы дизайнер API допустил это.
Есть ли техническая причина для следования этому маршруту? Или это просто стиль, чтобы указать на изменчивость/новый объект?
(х-исх Stylistic question concerning returning void)
Эпилог
Я принял ответ Luvieere как я думаю, что это лучше всего отражает намерение/дизайн, но, кажется, есть популярные примеры API из там, которые отклоняются от этого:
В C++ cout << setprecision(..) << number << setwidth(..) << othernumber;
, похоже, изменяет объект cout, чтобы изменить следующую вставленную датум.
В .NET, Stack.Pop()
и Queue.Dequeue()
оба возвращают элемент, но также меняют коллекцию.
Подложки для ChrisW и другие для получения подробной информации о фактических эксплуатационных расходах.
Шаблон, который вы описываете, также известен как * метод цепочки * (http://martinfowler.com/dslwip/MethodChaining.html). –
Цепочка метода или свободные интерфейсы (хотя пуристы утверждают, что для последнего требуется что-то большее, верю!). –
Ahhh - у него есть имя! Это кажется вполне читаемым и популярным в таких вещах, как JQuery – JBRWilkinson