/ janturon.cz / Od kodéra k analytikovi / Řetězení metod

Řetězení metod

Tento vzor se používá pro takové metody nastavující nějaký objekt, u kterých nezáleží na výstupu. U klasického přístupu vrací void a nastavení se provede sérií příkazů. V případě zřetězení vrací objekt, na kterém je volána: lze tak provést všechna nastavení jedním příkazem.

Klasický přístup

// C++ class Human { string name; int age; public: void setName(string n) { name = n; } void setAge(int a) { age = a; } }; int main() { Human *h = new Human; h->setName("John"); h->setAge(31); } // Javascript function Human() { var name, age; var that = this; this.setName = function(name) { that.name = name; } this.setAge = function(age) { that.age = age; } } h = new Human(); h.setName("John"); h.setAge(31);

Řetězení metod

// C++ class Human { string name; int age; public: Human* setName(string n) { name = n; return this; } Human* setAge(int a) { age = a; return this; } }; int main() { Human *h = new Human; h->setName("John")->setAge(31); } // Javascript function Human() { var name, age; var that = this; this.setName = function(name) { that.name = name; return that; } this.setAge = function(age) { that.age = age; return that; } } h = new Human(); h.setName("John").setAge(31);

V obou případech by šlo data nastavit konstruktorem. Nastavovací metody používáme v atributů, kterým konstruktor doplní výchozí hodnoty.

Nutnost volání velkého množství nastavovacích metod je antivzor Automat na kafe. Koncoví uživatelé si nebudou všechny nastavovací metody pamatovat a budou je líní psát. To vede ke stylu programování copy&paste z existujícího funkčního kódu. To lze opravit těmito způsoby: