Loopback
|
Posted: Sat Jun 06, 2020 14:05 Post subject: |
|
|
Flasher wrote: | В справке, надеюсь, это всё отражено будет. |
Конечно, будет отдельный раздел по синтаксису. Иначе не разберешься. Пожалуй, всё описанное здесь можно уже сейчас на бета-страницу перенести.
Flasher wrote: | Сейчас у нас не КЗ/ФЗ, а КЗ+ФЗ? Или как? На КЗ новинки (функции, циклы и т. д.) заведуться или надо между прагмами переключаться? |
Да, КЗ+ФЗ. Просто надо понимать, что уточнение "командная запись", равно как и "функциональная запись" относится не к скрипту в целом, а только к методу записи отдельных команд/функций. Иными словами, в КЗ может быть записан только вызов команды или функции. Выражения всегда записываются только в ФЗ, если в выражении используется функция, она тоже записывается в ФЗ, по другому просто невозможно. Поэтому говоря о выражениях, можно даже не упоминать, в какой они записи - это всегда ФЗ. То же самое объявление переменной и присваивание - это всегда ФЗ.
Вычисляемая строка - в некотором роде костыль, чтобы дать возможность в параметре команды в КЗ использовать выражения в ФЗ.
Вполне очевидно, что все новинки так или иначе работают с выражениями в ФЗ. Была попытка скрестить ужа с ежом, в виде функций в командной записи FileExist/ProcessExist в условиях, но она, что очевидно, провалилась. Но это не отменяет возможности по прежнему записывать команды в КЗ внутри блоков условий, циклов и пользовательских функций:
Code: |
If a = 0 then -- ФЗ (выражение a = 0)
MsgBox %a% -- КЗ (команда)
MsgBox(a) -- ФЗ (команда)
b = a + 1 -- ФЗ (присваивание)
endif
MyFunc 123 456 -- КЗ (функция)
MyFunc(123, 456) -- ФЗ (функция)
Func MyFunc(a, b = 1) -- ФЗ (объявление функции)
Local c = 1 -- ФЗ (объявление переменной)
MsgBox %a% -- КЗ (команда)
MsgBox(a) -- ФЗ (команда)
EndFunc
|
Так что переключаться между прагмами не нужно, скрипт в целом будет работать при любой. Прагма будет только переключать два режима работы парсера выражений:
1. Старый - строки могут быть в кавычках (любых из двух типов), либо без кавычек, переменные только в %%. В случае отсутствия переменной возвращается само имя переменной (можно и пустую строку возвращать, но это "потеря совместимости"). Ошибок не выдавалось. Есть неопределенности при работе со строками.
2. Новый - строки в кавычках (любых из двух типов), переменные в выражениях могут быть либо в %%, либо без них (предпочтительнее без, чтобы было лучше видно отличие от КЗ, где %% обязательны). При отсутствии переменной выдается ошибка. Неопределенностей нет.
Вот пример с особенностями (возможно что-то упустил):
Code: |
1: Старый
a = zxc -- ок
с = %a% -- ок, присвоит значение a
с = a -- ок, присвоит строку "a"
a = "zxc asd" -- ок
a = zxc asd -- некорректная запись, вернет "zxcasd" без пробела
b = StrLen(qwerty) -- ок
b = StrLen("qwerty") -- ок
b = StrLen(%a%) -- ок
b = StrLen(a) -- ок, вернет "1", длину строки "a"
b = StrLen("qwerty asdf") -- кавычки все равно обязательны, т.к. пробел
b = StrLen("qw(er)ty,asdf") -- кавычки все равно обязательны, т.к. в строке есть разделители ",()"
b = StrLen(%a% & qwerty) -- ок
2: Новый
a = "zxc" -- ок
с = %a% -- ок, присвоит значение a
с = a -- ок, присвоит значение a
b = StrLen("qwerty") -- ок
b = StrLen(%a%) -- ок
b = StrLen(a) -- ок
b = StrLen(a & "qwerty") -- ок
|
|
|