00013. Редактирование main.scm. Потоки и опкоды (Часть 3)
Last updated
Last updated
Редактирование main.scm. Потоки и опкоды (Часть 3)|В этом уроке мы продолжим изучать потоки. На этот раз мы познакомимся с командами gosub и return|wmysterio|wmysterio||||Если вы владеете какими то языками программирования, то для Вас это может показаться знакомой вешью. Итак, ознакомимся с тем, как пишется команда gosub:
Эта команда переходит на метку "POTOK_1" так же само, как и "jump", только разница том, что шарик будет возвращаться к месту, где этот переход состоялся. Возвращаться он будет когда встретит ближайший return. Следовательно 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 ```
\|52091111
png290
343