1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-12-14 20:20:28 +00:00
TiddlyWiki5/editions/tw5.com/tiddlers/variables/Variable Usage.tid
btheado d99b1897c3
Refactor variable invocation docs (#7642)
* Factored out variable invocation tiddlers into separate tiddlers

* Document the variable attribute value behavior more completely

---------

Co-authored-by: btheado <btheado@mailinator.com>
2023-07-31 12:13:37 +01:00

111 lines
3.4 KiB
Plaintext

created: 20230421020225031
modified: 20230726145912019
tags:
title: Variable Usage
type: text/vnd.tiddlywiki
!Ways to define variables and parameters
|! how declared|! how parameters are defined|! accessing parameter values in the body|
|\define|`()`|`$param$, <<__param__>>`|
|~|<<.wlink ParametersWidget>> or `\parameters`|`<<param>>`|
|<<.wlink SetWidget>>, <<.wlink LetWidget>>, <<.wlink VarsWidget>>|<<.wlink ParametersWidget>> or `\parameters`|`<<param>>`|
|\procedure, \widget|`()`, <<.wlink ParametersWidget>> or `\parameters`|`<<param>>`|
|\function|`()`|`<param>`|
|javascript macros|`exports.params` javascript property array|passed as normal javascript function parameter and so accessed as a normal javascript variable|
!!Examples
These examples are meant to provide insight into the various ways of defining and using parameters. In many cases they do not illustrate best practices.
!!! \define
<$let eg='\define mp1(a1) $a1$ - <<__a1__>>
\define mp2() <$parameters a1><<a1>></$parameters>
\define mp3()
\parameters(a1)
<<a1>>
\end
|<<mp1 foo>>|<<mp2 foo>>|<<mp3 foo>>|
'>
<$macrocall $name="copy-to-clipboard-above-right" src=<<eg>>/>
<$codeblock code=<<eg>>/>
</$let>
!!! $set, $let, $vars
<$let eg='<$set name="sp1" value="<$parameters a1><<a1>></$parameters>">
<$set name="sp2" value="""
\parameters(a1)
<$parameters a1><<a1>></$parameters>
""">
<$vars vp1="<$parameters a1><<a1>></$parameters>" vp2="""
\parameters(a1)
<$parameters a1><<a1>></$parameters>
""">
<$let lp1="<$parameters a1><<a1>></$parameters>" lp2="""
\parameters(a1)
<$parameters a1><<a1>></$parameters>
""">
|<<sp1 foo>>|<<sp2 foo>>|
|<<vp1 foo>>|<<vp2 foo>>|
|<<lp1 foo>>|<<lp2 foo>>|
</$let>
</$vars>
</$set>
</$set>
'>
<$macrocall $name="copy-to-clipboard-above-right" src=<<eg>>/>
<$codeblock code=<<eg>>/>
</$let>
!!! \procedure, \widget
<$let eg='\procedure pp1(a1) <<a1>>
\procedure pp2() <$parameters a1><<a1>></$parameters>
\procedure pp3()
\parameters(a1)
<<a1>>
\end
\procedure wp1(a1) <<a1>>
\widget wp2() <$parameters a1><<a1>></$parameters>
\widget wp3()
\parameters(a1)
<<a1>>
\end
|<<pp1 foo>>|<<pp2 foo>>|<<pp3 foo>>|
|<<wp1 foo>>|<<wp2 foo>>|<<wp3 foo>>|
'>
<$macrocall $name="copy-to-clipboard-above-right" src=<<eg>>/>
<$codeblock code=<<eg>>/>
</$let>
!!! \function
<$let eg='\function fp1(a1) [<a1>]
|<<fp1 foo>>|'>
<$macrocall $name="copy-to-clipboard-above-right" src=<<eg>>/>
<$codeblock code=<<eg>>/>
</$let>
!Behaviour of invoked variables depends on how the variable was declared
{{Behaviour of invoked variables depends on how the variable was declared}}
!Namespaces
*''tiddler titles'' - tiddlers are uniquely identified by their title. The namespace for tiddler titles and variable names are completely separate.
*''variables'' - \define, <<.wlink SetWidget>>, <<.wlink LetWidget>>, <<.wlink VarsWidget>>, \procedure, \widget, \function all create variables. If the same name is used, then later define will overwrite earlier defined
*''<<.op function>> filter operator parameter'' - only variables defined using \function can be called using the <<.olink function>> operator
*''filter operators'' - only the [[javascript defined filter operators|Filter Operators]] and variables defined using \function with name containing a dot can be called
*''widgets'' - variables defined using \widget can be invoked using `<$widget/>` syntax ONLY if the name starts a dollar sign. Without the dollar sign prefix, defining variables using \widget is no different than using \procedure.