Ruby Mixins – Prepend
💡

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 super, to następna w kolejności zostanie wywołana metoda o tej samej nazwie, znajdująca się w rozszerzonej klasie.

image

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.