‼️В спецификацию 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`