Инструменты пользователя

Инструменты сайта


help:organizing

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:organizing [2025/09/28 15:23]
aleks_versus [Неявный вызов функции FUNC]
help:organizing [2025/12/28 13:16] (текущий)
aleks_versus [Неявный вызов оператора GOSUB]
Строка 213: Строка 213:
 GS '​ход',​$var,​2,'​данные'​ GS '​ход',​$var,​2,'​данные'​
 </​sxh>​ </​sxh>​
 +==== Неявный вызов оператора GOSUB ====
  
-Cуществует краткая форма записи, не требующая явного указания оператора ​''​GOSUB''​:+Вы можете ​не прописывать всякий ​раз ​оператор ''​GOSUB'' ​явно. Можно использовать более простую запись. Вот как это выглядит в общем виде:
  
 <sxh qsp> <sxh qsp>
-  ​@@[$локация] [аргумент 0], [аргумент 1], ... ,​[аргумент 18]+@@[$локация] [аргумент 0],​[аргумент 1], ... ,​[аргумент 18]
 </​sxh>​ </​sxh>​
  
-Название локации ''​[$локация]''​ не заключается в кавычки и не должно содержать ​спецсимволов, кроме точки. Допустимо заключать аргументы в скобки.+Здесь ''​%%[$локация]%%''​ — это название локации, код которой мы хотим выполнить без непосредственного перехода на неё. Аргументы ​''​%%[аргумент 0]%%'',​ ''​%%[аргумент 1]%%''​ и т.д. могут использоваться на этой ​локации, их значения автоматически помещаются в ячейки массива ''​%%ARGS[0]%%''​, ''​%%ARGS[1]%%'',​ и т.д. соответственно. 
 + 
 +То есть: пишем ''​%%@@%%'', ​затем без пробелов название локации, потом ставим пробел и через запятую перечисляем ​аргументы. 
 + 
 +При такой записи необходимо соблюдать несколько правил: 
 + 
 +  * Название локации не должно содержать пробелов, ​символов математических операций и специальных ​символов (за исключением точки) 
 +  * Название локации не должно совпадать ​с ключевыми словами QSP, в том числе с названиями системных переменных. 
 +  * Аргументы, передаваемые на локацию,​ можно заключать ​в скобки, но можно и не заключать. 
 +  * Нельзя подставить вместо названия локации значение переменной! 
 + 
 +Пример локации для подъёма яблока:​
  
 <sxh qsp> <sxh qsp>
-@@inventory.add '​ScrewDriver',​ 12+!# поднять_яблоко 
 +if яблоки['​рюкзак'​]=0:​ 
 +  addobj "​Яблоки"​ 
 +end 
 +яблоки['​рюкзак'​]+=1 
 +яблоки[$curloc]-=1 
 +</​sxh>​ 
 + 
 +Действие,​ которое мы пишем на любой другой локации:​ 
 + 
 +<sxh qsp> 
 +act "​Взять яблоко":​ 
 +  @@поднять_яблоко 
 +end 
 +</​sxh>​ 
 + 
 +Допустимо помещать аргументы в скобки:​ 
 + 
 +<sxh qsp> 
 +@@inventory.add('​ScrewDriver',​ 12)
  
 @@reset_screen('​black-green'​) @@reset_screen('​black-green'​)
 </​sxh>​ </​sxh>​
 +
 +Другие примеры:​
 +
 +<sxh qsp>
 +@@sys.init
 +@@hero.init
 +@@loc.type '​page'​
 +
 +@@map_set_cell [0,12], '​дерево'​
 +</​sxh>​
 +
 ===== Описание FUNC ===== ===== Описание FUNC =====
  
Строка 301: Строка 343:
 !$ARGS[0] содержит строку "​строка",​ ARGS[1] равен 2. !$ARGS[0] содержит строку "​строка",​ ARGS[1] равен 2.
 MSG "​text"​ + FUNC($name, "​строка",​ 2) MSG "​text"​ + FUNC($name, "​строка",​ 2)
-</​sxh>​ 
- 
-Cуществует краткая форма записи,​ не требующая явного указания функции ''​FUNC'':​ 
- 
-<sxh qsp> 
-  @[$локация]([аргумент 0],​[аргумент 1], ... ,​[аргумент 18]) 
-</​sxh>​ 
- 
-Название локации ''​[$локация]''​ не заключается в кавычки и не должно содержать спецсимволов,​ кроме точки. Запись без скобок допускается,​ если у функции нет аргументов. 
- 
-<sxh qsp> 
-@loc.type('​page'​) 
-@html.link('​Информация об игре',​ {goto '​game_info'​}) + @BR 
-</​sxh>​ 
-===== Ранний выход. Оператор EXIT ===== 
- 
-Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​. 
- 
-''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события). 
- 
-Пример:​ 
- 
-<sxh qsp> 
-if args[0] = 0: exit 
 </​sxh>​ </​sxh>​
  
Строка 344: Строка 362:
   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.   * Название локации не должно совпадать с ключевыми словами QSP, в том числе с названиями системных переменных.
   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки   * Аргументы,​ передаваемые на локацию,​ всегда должны заключаться в скобки
-  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить.+  * Если на локацию не нужно передавать аргументы,​ после её названия можно поставить пустые скобки,​ а можно не ставить ​совсем.
   * Нельзя подставить вместо названия локации значение переменной!   * Нельзя подставить вместо названия локации значение переменной!
  
Строка 362: Строка 380:
 ! пример вложения функций и участие их в выражениях ! пример вложения функций и участие их в выражениях
 point = @queue.addPoint($next[i],​new_cost+@hevr.est($next[i],​$args[0])) point = @queue.addPoint($next[i],​new_cost+@hevr.est($next[i],​$args[0]))
 +
 +! пример генерации гиперссылки с помощью локации-функции:​
 +@html.link('​Информация об игре',​ {goto '​game_info'​}) + @BR
 +! локация-функция BR не принимает аргументов...........^^^
 </​sxh>​ </​sxh>​
  
-Если подобный неявный вызов сочетается с использованием неявного оператора,​ а на локации при этом НЕ присваивается значение переменной ''​%%RESULT%%'', ​можно использовать ​неявный вызов функции ​вместо оператора ''​%%GOSUB%%'':​+Если подобный неявный вызов сочетается с использованием неявного оператора,​ а на локации при этом НЕ присваивается значение переменной ''​%%RESULT%%'',​ неявный вызов функции ​будет работать как ​''​%%GOSUB%%'':​
  
 Локация ''​%%"​поднять_яблоко"​%%'':​ Локация ''​%%"​поднять_яблоко"​%%'':​
Строка 383: Строка 405:
   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB   @поднять_яблоко & ! в данном случае поведение функции будет идентично поведению GOSUB
 end end
 +</​sxh>​
 +
 +===== Ранний выход. Оператор EXIT =====
 +
 +Чтобы прервать выполнение текущего кода и выйти из вызванной с помощью ''​%%GOSUB%%''​ или ''​%%FUNC%%''​ локации,​ используйте оператор ''​%%EXIT%%''​.
 +
 +''​%%EXIT%%''​ - завершение выполнения текущего кода (преждевременный выход из подпрограммы/​обработчика какого-либо события).
 +
 +Пример:​
 +
 +<sxh qsp>
 +if args[0] = 0: exit
 </​sxh>​ </​sxh>​
  
help/organizing.1759073037.txt.gz · Последние изменения: 2025/09/28 15:23 — aleks_versus