00013. Редактирование main.scm. Потоки и опкоды (Часть 3)

Редактирование main.scm. Потоки и опкоды (Часть 3)|В этом уроке мы продолжим изучать потоки. На этот раз мы познакомимся с командами gosub и return|wmysterio|wmysterio||||Если вы владеете какими то языками программирования, то для Вас это может показаться знакомой вешью. Итак, ознакомимся с тем, как пишется команда gosub:

gosub @POTOK_1

Эта команда переходит на метку "POTOK_1" так же само, как и "jump", только разница том, что шарик будет возвращаться к месту, где этот переход состоялся. Возвращаться он будет когда встретит ближайший return. Следовательно return - команда возврата. Давайте напишем небольшой скрипт, что бы вы поняли как он работает:

:POTOK
thread 'POTOK'
wait 0
gosub @POTOK_1
end_thread

:POTOK_1
wait 0
return

Графически можно представить так:

Давайте проследим за тем, так будет двигаться шарик. Сначала он пройдёт 3 строчки. На 4-й он встретит "gosub", дальше идёт прыжок на 7 строку, так как именно там находится метка "@POTOK_1". Проходит дальше 2 строки и встречает "return". Дальше шарик прыгает обратно на строку, где был "gosub" и продолжает путь, то есть переходит на 5 строку и "уходит на пенсию" =)

Напишем более сложный скрипт, где есть несколько "gosub", и посмотрим на движение шарика:

Что бы вам было легче представить как работают эти 2 опкода, я наведу пример в реальной жизни:

Папа Васе: - Сын, пойди в магазин. Вася идёт. По дороге ему девочка Рита: - Вася, сорви для меня цветок. Вася идёт рвать цветы. Возвращается. Девочка благодарит. Вася идёт в магазин, покупает там, и приходит домой. Папа даёт Васе 5 рублей.

Теперь давайте рассмотрим картинку, которая "транслирует" эту историю в Sanny Builder:

Таким образом можно сказать, что поток существует, что бы выполнять одну конкретную задачу, а "gosub" - что бы выполнять вторичные. В нашем примере главная цель - заработать 5 рублей, вторичные цели - купить товар, сорвать цветок. Две вторичные задачи - два "gosub".

И, конечно, не забываем о правилах переходов, которые я написал в предыдущем уроке. Думаю основы работы с потоками и метками вы научились. Пора переходить к новому материалу. Если у вас возникли вопросы, задайте их на форуме.

× **ВАЖНО:** Любой "gosub" требует обязательного возврата командой "ruturn".× **Примечание:** В SCM скриптинге есть лимит на количество вложенных "gosub" - 8 штук. Под "вложенными" имеется ввиду те "gosub", которые вызываются внутри существующего "gosub". В последнем примере таких вложенных "gosub" было 2 ( "@POTOK_1" и "@POTOK_2" ). Остальные находились на одном уровне вложенности.|1360|1|0|84529523`png`285`183 ```

\|52091111png290343

`\|80340610`png`574`379`400`264``\||redaktirovanie_main_scm_potoki_i_opkody_chast_3|1498207216

Last updated