Примеси

Лите

Статья mixin-based inheritance Scala. Mixin class compositions Dart mixins-and-traits-in-swift Ruby

Примеси и множественное наследование

Примеси в D

В языке D примеси называют шаблонными примесями (template mixin). При этом примесью может быть всё, что угодно. Связано это с тем, что для использования участка кода в каче TODO

Лексические примеси в языке D

Язык D под термином mixin понимает несколько иную концепцию. Выражение mixin( ... ) позволяет на этапе компиляции вставить в исходный код программы строку, которая будет скомпилирована как код на D.

Например,

template GenStruct(string Name, string M1)
{
    const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}

mixin( GenStruct!("Foo", "bar") );

породит код

struct Foo{ int bar; }

Это приём метапрограммирования, который лучше сравнивать по мощности с макросами C или макросами в Scala, однако с помощью этого мощного инструмента можно реализовать и ООП-примеси в том смысле, в котором мы понимаем в этой главе.

[TODO: криво написано]

Trait'ы в Rust

Trait в Rust - описание интерфейса. Класс может заявить, что реализует trait. Шаблонный метод может потребовать от аргумента наличие некоторого trait'а. В отличие от интерфейса trait в Rust может иметь реализацию по-умолчанию. В таком случае класс может не переопределять реализацию trait'а.

[TODO: пример] Traits in Rust

Примеси в JavaScript

TODO

Примеси и аспектно-ориентированное программирование

[TODO]

Trait vs Mixin. О неустоявшейся терминологии

Mixin - общий термин, пришедший из Lisp Flavours. Изначально подразумевал реализацию методов класса отдельно от класса. Классы определяли только аттрибуты, а затем примешивали mixin'ы, реализующие методы.

Trait в PHP - это mixin в понимании остальных языков.

Trait в C++ - это приём шаблонного программирования. Для параметризации шаблона используют в дополнение к основному аргументу шаблона другой шаблонный класс, групирующий и задающий по-умолчанию свойства основного аргумента.

Trait в Rust - описание интерфейса. Класс может заявить, что реализует trait. Шаблонный метод может потребовать от аргумента наличие некоторого trait'а. Сам

results matching ""

    No results matching ""