Миксины в Dart: как работают и где применяются
Вопрос
Объясните, как работают миксины в Dart, и приведите пример из Flutter.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Миксин подмешивает члены через `with`, класс может взять несколько миксинов
Линеаризация: порядок `with` задаёт цепочку, правый перекрывает левый, `super` идёт к левому
`on` ограничивает, к каким классам можно применить миксин
Пример: `SingleTickerProviderStateMixin` даёт `vsync` для `AnimationController`
Отличие от наследования и от интерфейса
Что могут спросить следом
- Что выведет вызов метода, который есть в двух миксинах?
- Чем
mixin classотличается отmixin?
Разбор
Образцовый ответ: «Миксин это способ переиспользовать поведение без наследования: класс наследует один суперкласс, но может подмешать сколько угодно миксинов через with. Технически class C extends Base with A, B строит цепочку Base, Base+A, Base+A+B, C. Поэтому если метод есть и в A, и в B, победит B, а super внутри B вызовет A. Ключевое слово on говорит, к каким классам миксин можно применить, и даёт доступ к их членам. Во Flutter самый частый пример SingleTickerProviderStateMixin: он делает State провайдером тикера, и я передаю this в vsync контроллера анимации. Ещё WidgetsBindingObserver для событий жизненного цикла приложения. От интерфейса миксин отличается тем, что несёт реализацию»
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.