Добавление "универсального" префикса типа для переменных
Было предложено следующее изменение языка: при отсутствии префикса типа для переменной / массива, считать это “универсальным” префиксом и записывать / читать значение “как есть”.
Сейчас, если в переменной $X[0] записана строка, то обращение X[0] вернет 0, т.к. тип не соответствует ожидаемому и возвращается значение по умолчанию (ячейка массива как бы не инициализирована).
Если добавить “универсальный” префикс, то X[0] вернет строку - фактическое значение в ячейке.
Аналогично с присваиванием - станет возможным делать X[0]="asdasdas" - будет присвоена строка.
Это изменение позволит упростить некоторые сценарии, когда тип значения неважен - нужно просто его вывести / прочитать / передать куда-то еще.
Обратная совместимость не нарушается, если для неинициализированных переменных возвращать 0 (по умолчанию универсальный префикс - число).
Главный минус этого “универсального” префикса - будет сложнее понимать какой тип данных указан в переменной / что ожидает игра - нужно проверять фактические присваивания. В этом случае есть риск того, что авторы начнут повсюду использовать универсальный префикс и разбираться в коде станет сложнее.
Из компромиссов:
-
разрешить чтение / запись значения “как есть” только для
ARRITEM/SETVAR. -
добавить новый, более явный префикс - например “~”:
~X[0]/~X(мне не очень нравится этот вариант, честно говоря).
Хочется обсудить и услышать разные мнения - нравится / не нравится, нужно / не нужно / как лучше это сделать.
PS. Явные префиксы $ / # / % в любом случае останутся.