OneScript
OneScript copied to clipboard
Синтаксис типизации в native
Для уменьшения количества динамической диспетчеризации + более внятного кода в native нужен синтаксис типизации
Перем А: Строка
Функция Ф(М: Строка): Булево
Б = Нечто как Строка
Если Б это Строка Тогда // учитывает наследование, в отличие от ТипЗнч() = Тип()
если уж дело идет к типизации, тогда предлагаю добавить такие операторы: Это, ЭтоНе - проверяют один и тот же это экземпляр объекта или нет... в отличие от оператора =, который сравнивает по содержимому. А="Мир"; Б=Лев("Миранда",3); //здесь А=Б возвращает Истина //а А Это Б возвращает Ложь
ЭтоТип, ЭтоНеТип - проверяет является ли левый операнд типом указанным в качестве правого операнда с учетом наследования. Если А ЭтоТип Строка Тогда Сообщить("Это тип Строка"); КонецЕсли
ЭтоТип, ЭтоНеТип - проверяет является ли левый операнд типом указанным в качестве правого операнда с учетом наследования. Если А ЭтоТип Строка Тогда Сообщить("Это тип Строка"); КонецЕсли
По поводу проверки типов зачем так далеко уходить от канона?
ТипЗнч("Текстовая строка") = Тип("Строка")
зачем так далеко уходить от канона?
я только отреагировал на это:
Если Б это Строка Тогда // учитывает наследование, в отличие от ТипЗнч() = Тип()
если уж внедрять оператор Это, то лучше разделить на Это и ЭтоТип...
Кмк "Это" - это калька с is/instanceOf, которые как раз проверяют типы и наследование. = в оскрипте за исключением литералов всегда работает по ссылке, а не содержимому. Проверки на содержимое (а-ля equals) в оскрипте просто нет.
это калька с is
понятно, что калька с C#, но в шарпе это сделано не идеально, продумано плохо, так почему при создании своего языка брать плохую кальку? конечно, пока в оскрипте нет наследования и перегрузки операторов, то и так сойдет... но когда появятся, то возникнут те же недостатки, что и у шарпа... В шарпе чтобы проверить, что две ссылки указывают на один и тот же объект проще использовать Object.ReferenceEquals, чем оператор ==, т.к. никогда не знаешь не переопределен ли случайно оператор ==, надо каждый раз проверять... к тому же структуры не поддерживают ==, если не переопределят... а строки хоть и ссылочные проверяются по значению... Поэтому я и предложил оператор Это зарезервировать для проверки того, что перед нами тот же экземпляр объекта, а оператор ЭтоТип для проверки того, что перед нами нужный тип...
Кстати, раз тут такой резкий поворот от канона, может уже пора просить наследование и интерфейсы ?
Тут еще как бы не все нормально компилируется даже из классики 😢