‼️В спецификацию Dart готовится обновление‼️
Замечен черновик новой фичи - Metaobjects 😎
Этот механизм позволит отображать тип (например, класс) в специальный метаобъект, отвечающий за «виртуальные» статические члены и конструкторы данного типа.
Основные моменты фичи:
🔧 Виртуальные статические члены. Сейчас в Dart для вызова статических методов нужно явно указывать имя конкретного класса (например, Foo.foo()). С метаобъектами можно вызывать статические методы через переменную типа, даже если тип известен только во время выполнения.
• 🏗 Виртуальные конструкторы. С помощью метаобъектов можно будет создавать объекты (вызывать конструкторы) через абстрактные типовые переменные.
•✅ Изменения в синтаксисе и статическая гарантия типов. Новая пара ключевых конструкций static implements и static extends позволит компилятору гарантировать, что метаобъект будет иметь необходимый интерфейс для вызова соответствующих статических членов или конструкторов.
🤖 Имплицитно генерируемые классы. Для каждого класса, где при его объявлении используются static implements или static extends компилятор автоматически сгенерирует скрытый метаобъект-класс, который переадресует вызовы к статическим методам или конструкторам исходного класса.
В целом, данная фича расширяет возможности языка, делая статические члены и конструкторы «виртуальными». Благодаря этому нововведению их можно будет вызывать не напрямую через конкретное имя класса, а через абстрактное представление типа. Другими словами, вы сможете писать более гибкий обобщенный и типобезопасный код 🔫
Ниже приведен пример кода с использованием текущей фичи: `// Интерфейс, описывающий «виртуальный» статический метод. abstract class Fooable { const Fooable(); String foo(X x); }
// Класс A теперь объявлен с ключевым словом static implements, // что позволяет генерировать метаобъект, переадресующий вызовы. class A static implements Fooable{ final String name; A(this.name);
// Статический метод, к которому будет осуществляться вызов через метаобъект. static String foo(A a) => "${a.name} fooing!"; }
// Функция, использующая метаобъект: тип X (ограниченный интерфейсом Fooable) // «виртуализирует» вызов статического метода. String showFoo>(X x) { return X.foo(x); }
void main() { // Теперь можно вызывать статический метод через типовую переменную X, // что делает код более обобщённым. print(showFoo(A("MyA"))); }
Как по мне – данная фича чем-то напоминает виртуальную таблицу из С++ 🤣
Ждете? 👍 – О, да, детка!!! 👌 - сомнительно, но Окей 👎 - не вижу от него пользы
#dart_lang@madteacher_channel`