Ruby Mixins – Prepend

Ruby jak każdy język obiektowy opiera się na dziedziczeniu. Ze względu na ograniczenie, w postaci dziedziczenia na raz tylko po jednej klasie twórcy języka zaproponowali mechanizm mixinów – dołączania modułów do klas. Pozwala to programistom na podążanie za dobrymi praktykami stosowania kompozycji zamiast dziedziczenia.

Jednym ze sposobów pozwalających na domieszkę modułu do klasy jest dyrektywa PREPEND.

Dyrektywa ta sprawia, że moduł zostaje włączony w łańcuch dziedziczenia obiektów na samym jego końcu, nawet przed klasę, w której dodajemy mixin. Stanowi to pewien sposób implementacji dekoratora dla klasy.

Jeśli w module i w klasie istnieją metody o tej samej nazwie, to w pierwszej kolejności zostanie wywołana metoda z modułu. Jeśli metoda ta zawiera słowo kluczowe <strong>super</strong>, to następna w kolejności zostanie wywołana metoda o tej samej nazwie, znajdująca się w rozszerzonej klasie.

Klasa poprzedzona modułem Logger pozwala na implementację metody log zwracającą string. Wywołanie tej metody wykonuje się za pomocą super w metodzie modułu, dodając do zwracanego stringa timestamp.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

You May Also Like
Czytaj

Spread Operator w Ruby i Ruby Ranges

Wszyscy pamiętamy jak rewolucyjne w świecie JavaScriptu okazało sie wprowadzenie tzw. <strong>spread operator</strong> wraz ze standardem ES6. Praca z kolekcjami…
Czytaj

Ruby Mixins – Extend

Ruby jak każdy język obiektowy opiera się na dziedziczeniu. Ze względu na ograniczenie, w postaci dziedziczenia na raz…
Czytaj

Modyfikator Protected w Ruby

Rozmowy rekrutacyjne, a zwłaszcza ich część techniczna najczęściej przebiegają według jakiegoś określonego schematu. Łatwo przewidzieć pytania, jakie mogą…
Czytaj

Simple Command

Kto kiedykolwiek pracował w projekcie railsowym napewno widział tzw. fat controllers, gdzie logika poszczególnych akcji wpakowana jest bezpośrednio w…
Czytaj

Range i Date w Ruby on Rails

W jednym z poprzednich postów pokazywałem przykład zastosowania obiektu Range w Ruby. Ruby on Rails posiada własne rozszerzenie klasy…
Czytaj

Ruby Mixins – Include

Ruby jak każdy język obiektowy opiera się na dziedziczeniu. Ze względu na ograniczenie, w postaci dziedziczenia na raz…