Technical References - [return]

Explicitly identify what text is returned from a function call

numero = 237
interpreted = N
texte = [return][/return] The textual output generated as a result of a WebDNA function call includes whatever text remains after the function code is executed. This may include unwanted spaces, carriage returns, and other 'white space' characters. The [return] context can be used to explicitly identify what text is returned from the function call, thereby avoiding unwanted characters.

The [return] context is optional and can only be used from within the [function] context. The [return] context does NOT 'break out' of a function call, so it is possible to use one or more [return] contexts to 'tailor' the functions output.

Example without [return] Below is a simple function that does not include a [return] context. This function simply adds the first ten positive numbers. We will execute the function, then wrap the execution in [url][/url] tags to 'reveal' the extra white space that can accumulate from a function call (much as it would when using the WebDNA [include] tag.) Here is the code:
[function name=add_em_up][text]result=0[/text][loop start=1&end=10][text]result=[math][result]+[index][/math][/text][/loop][result][/function]
Executing the function, we get: " 55 " (note the extra spaces) Now, lets 'wrap' the function result with the [url] context to uncover the 'extra' stuff we accumulated a result of the function call. Here is the result: "%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A %0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A %0D%0A%0D%0A%0D%0A%0D%0A%0D%0A55%0D%0A" Note all the extra white space, in this case, carriage returns and line feeds. The 'old' Solution One way that WebDNA programmers have dealt with unwanted return characters, is to wrap line-endings, or other unwanted white space, with WebDNA comments, i.e. [!]...[/!]. So the function definition on the previous page would look like...
[function name=add_em_up][!][/!][text]result=0[/text][!][/!][loop start=1&end=10][!][/!][text]result=[math][result]+[index][/math][/text][!][/!][/loop][!][/!][result][!][/!][/function]
Executing the above function, and wrapping the result with URL tags, we get: "55" The extra 'garbage' is gone, but using all those [!][/!] pairs is cumbersome, and does add some extra parsing overhead. A Better Solution The [return] context can now be used to target exactly what we want the function to return. So our example function now looks like...
[function name=add_em_up][text]result=0[/text][loop start=1&end=10][text]result=[math][result]+[index][/math][/text][/loop][return][result][/return][/function]"[url][add_em_up][/url]"
Executing the above code, we get: "55" The extra 'garbage' is gone, and we did not have to use all those [!][/!] contexts. Even if the explicit results of a function call are not significant, for example, when the function assigns the result to some global text variable. It is still a good idea to use the [return] context in order to cut down on the amount of white space that my be returned to the client browser. For example:
[function name=add_em_up][text]result=0[/text][loop start=1&end=10][text]result=[math][result]+[index][/math][/text][/loop][text scope=global]result=[result][/text][return][/return] [!] return nothing [/!][/function][add_em_up]result="[result]"
Executing the above code, we get: result="55" As mentioned in the first page of this tutorial, the [return] context does not actually 'return' or 'break out' of the function call. So, it is possible to have multiple [return] contexts in a given function definition. For example:
[function name=add_em_up][text]result=0[/text][loop start=1&end=10][text]result=[math][result]+[index][/math][/text][showif [index]
Results in... "1+2+3+4+5+6+7+8+9+10=55" The [return] context is also very useful when creating 'recursive' functions (functions that call them selves until a terminating 'base case' is reached). Here is a sample recursive function that calculates the factorial for a given integer.
[function name=factorial][showif [num]>1][return][math][num]*[factorial num=[math][num]-1[/math]][/math][/return][/showif][hideif [num]>1][return]1[/return][/hideif][/function]6! = [factorial num=6]
The results... 6! = 720 [return][/return]

The textual output generated as a result of a WebDNA function call includes whatever text remains after the function code is executed. This may include unwanted spaces, carriage returns, and other 'white space' characters. The [return] context can be used to explicitly identify what text is returned from the function call, thereby avoiding unwanted characters.

The [return] context is optional and can only be used from within the [function] context. The [return] context does NOT 'break out' of a function call, so it is possible to use one or more [return] contexts to 'tailor' the functions output.



Example without [return]

Below is a simple function that does not include a [return] context. This function simply adds the first ten positive numbers. We will execute the function, then wrap the execution in [url][/url] tags to 'reveal' the extra white space that can accumulate from a function call (much as it would when using the WebDNA [include] tag.)

Here is the code:

[function name=add_em_up]
[text]result=0[/text]
[loop start=1&end=10]
[text]result=[math][result]+[index][/math][/text]
[/loop]
[result]
[/function]

Executing the function, we get: " 55 " (note the extra spaces)

Now, lets 'wrap' the function result with the [url] context to uncover the 'extra' stuff we accumulated a result of the function call.
Here is the result:

"%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A
%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A
%0D%0A%0D%0A%0D%0A%0D%0A%0D%0A55%0D%0A"

Note all the extra white space, in this case, carriage returns and line feeds.

The 'old' Solution

One way that WebDNA programmers have dealt with unwanted return characters, is to wrap line-endings, or other unwanted white space, with WebDNA comments, i.e. [!]...[/!]. So the function definition on the previous page would look like...

[function name=add_em_up][!]
[/!][text]result=0[/text][!]
[/!][loop start=1&end=10][!]
[/!][text]result=[math][result]+[index][/math][/text][!]
[/!][/loop][!]
[/!][result][!]
[/!][/function]

Executing the above function, and wrapping the result with URL tags, we get: "55"

The extra 'garbage' is gone, but using all those [!][/!] pairs is cumbersome, and does add some extra parsing overhead.

A Better Solution

The [return] context can now be used to target exactly what we want the function to return. So our example function now looks like...

[function name=add_em_up]
[text]result=0[/text]
[loop start=1&end=10]
[text]result=[math][result]+[index][/math][/text]
[/loop]
[return][result][/return]
[/function]

"[url][add_em_up][/url]"

Executing the above code, we get: "55"

The extra 'garbage' is gone, and we did not have to use all those [!][/!] contexts.

Even if the explicit results of a function call are not significant, for example, when the function assigns the result to some global text variable. It is still a good idea to use the [return] context in order to cut down on the amount of white space that my be returned to the client browser.

For example:

[function name=add_em_up]
[text]result=0[/text]
[loop start=1&end=10]
[text]result=[math][result]+[index][/math][/text]
[/loop]
[text scope=global]result=[result][/text]
[return][/return] [!] return nothing [/!]
[/function]

[add_em_up]
result="[result]"

Executing the above code, we get:

result="55"

As mentioned in the first page of this tutorial, the [return] context does not actually 'return' or 'break out' of the function call. So, it is possible to have multiple [return] contexts in a given function definition. For example:

[function name=add_em_up]
[text]result=0[/text]
[loop start=1&end=10]
[text]result=[math][result]+[index][/math][/text]
[showif [index]

Results in...
"1+2+3+4+5+6+7+8+9+10=55"

The [return] context is also very useful when creating 'recursive' functions (functions that call them selves until a terminating 'base case' is reached).

Here is a sample recursive function that calculates the factorial for a given integer.

[function name=factorial]
[showif [num]>1]
[return][math][num]*[factorial num=[math][num]-1[/math]][/math][/return]
[/showif]
[hideif [num]>1]
[return]1[/return]
[/hideif]
[/function]

6! = [factorial num=6]

The results...

6! = 720

DOWNLOAD WEBDNA NOW!

Top Articles:

Download WebDNA Applications

WebDNA applications...

WebDNA Libraries

A list of available libraries for WebDNA...

WebDNA Modules

A list of the currently available modules...

F.A.Q

A compilation of some user's questions...

Technical Change History

This Technical Change History provides a reverse chronological list of WebDNA changes...

Tips and Tricks

A list of user-submitted tips ...

Related Readings:

[hide]

Prevents WebDNA to return hidden parts of your code to apache (from version 8...

[deletefile]

Deleting a file from your website...

[clearlineitems]

Remove all line items from the specified shopping cart...

[sendmail]

There is hardly a website that doesn't at some point need to send an email...

[random]

will display a random number...

[array]

Array Operation...