Search
Write a publication
Pull to refresh
12
0
Павел @ppskriptum

Любитель интересных ЯП

Send message

Чиним наследование?

Reading time6 min
Views8.8K
Сначала здесь было долгое вступление про то, как я додумался до гениальной идеи (шутка, это миксины в TS/JS и Policy в C++), которой и посвящена статья. Не буду тратить ваше время, вот виновник сегодняшнего торжества (осторожно, 5 строчек на JS):

function Extends(clazz) {
    return class extends clazz {
        // ...
    }
}

Поясню, как это работает. Вместо обычного наследования мы пользуемся механизмом выше. Потом мы указываем базовый класс только при создании объекта:

const Class = Extends(Base)
const object = new Class(...args)

Я постараюсь убедить вас, что это — сын маминой подруги для наследования классов и способ вернуть наследованию звание труъ-ООП инструмента (сразу после прототипного наследования, конечно).

Почти не оффтоп
Я бы даже сделал ЯП с этим приёмом как основной фичей, но, боюсь, этот pet project умрёт, как и другие мои pet project'ы. Так что пусть хотя бы будет статья, чтобы идея пошла в массы.


Условимся насчёт названий: я буду называть такую технику миксином, хотя под этим всё-таки подразумевается немного другое. До того, как мне подсказали, что это миксины из TS/JS, я использовал название LBC (late-bound classes).

Читать дальше →

Rust vs. State

Reading time5 min
Views5.3K

Важно: для комфортного прочтения статьи нужно уметь читать исходный код на Rust и понимать, почему оборачивать всё в Rc<RefCell<...>> — плохо.


Введение


Rust не принято считать объектно-ориентированным языком: в нём нет наследования реализации; инкапсуляции на первый взгляд тоже нет; наконец, столь привычные ООП-адептам графы зависимостей мутабельных объектов здесь выглядят максимально уродливо (вы только посмотрите на все эти Rc<RefCell<...>> и Arc<Mutex<...>>!)


Правда, наследование реализации уже как несколько лет считают вредным, а гуру ООП говорят очень правильные вещи вроде "хороший объект — иммутабельный объект". Вот мне и стало интересно: насколько хорошо объектное мышление и Rust сочетаются друг с другом на самом деле?


Первым подопытным кроликом станет паттерн State, чистой реализации которого и посвящена эта статья.

Начать опыт

Information

Rating
Does not participate
Registered
Activity