Skip to main content

How are the methods goto, execute and transfer different?

SWML offers a lot of flexibility in how you control program flow with it's control methods. Of these, goto, execute, and transfer allow you to unconditionally control program flow.

goto​

The goto method is designed to allow you to jump to particular labels within a section. Use this method to simulate more complex loops like while and for loops.

you can not jump to sections using goto.

Use execute described further below to jump sections.

version: 1.0.0
sections:
main:
- play:
url: 'say:Entering infinite loop'
- label: loop
- play:
url: 'say:Looping ...'
- goto:
label: loop

execute​

The execute method allows you to invoke a subsection as a function. You can pass parameters to the function and receive a return value.

version: 1.0.0
sections:
main:
- play:
url: 'say:Transferring you to another section'
- execute:
dest: subsection
- play:
url: 'say: %{return_value}'
subsection:
- play:
url: 'say:inside a subsection'
- return: back!

Output transcript:

"Transferring you to another section"
"inside a subsection"
"back!"

Or in a more complex example:

version: 1.0.0
sections:
main:
- play:
url: 'say:Transferring you to another section'
- execute:
dest: subsection
params:
a: 1
b: 2
- play:
url: 'say: %{return_value}'
subsection:
- return: '%{params.a+params.b}'

transfer​

version: 1.0.0
sections:
main:
- play:
url: 'say:Transferring you to another section'
- transfer:
dest: subsection
- play:
url: 'say:Back!'
subsection:
- play:
url: 'say:inside a subsection'

Output transcript:

"Transferring you to another section"
"inside a subsection"
info

Notice how we aren't going back to the calling section at all.

Conclusion​

gotoexecutetransfer
UseJump between labels within a sectionInvoke a subsection with params, then returnInvoke a subsection with params
Scopewithin a sectionFrom one section to another, or to another SWML fileFrom one section to another, or to another SWML file