hyTags
HomeHome DocumentationDocumentation

function-call

Calls a named function with parameters and optional delay.
Parameter
Type
Description
name
String
Name of the function to call
params
Attributes
Element containing function parameters
delay
Number?
Optional delay in seconds before execution
commands
Commands
Commands to execute within the function
return
T
Return value from the function, or null if the function returns void
Test Case:Two parameters
    <function name="add" params="number, number" return="number">
      <number-add>
    </function>
    
    <number-new value="3">
    <number-new value="4">
    <function-call name="add"></function-call>
    <assert-equal value="7" type="number">
    
    👆 Try to change something!
  • Test Case:Named parameter
      <function name="greet" params="name: string" return="string">
        <string-prepend string="Hello, ">
      </function>
      
      <string-new value="World">
      <function-call name="greet"></function-call>
      <assert-equal value="Hello, World" type="string">
      
      👆 Try to change something!
    • Test Case:Array parameter
        <function name="sum" params="[number]" return="number">
          <var-set name="total">
            <number-new value="0">
          </var-set>
          <array-loop>
            <var-update name="total">
              <number-add>
            </var-update>
          </array-loop>
          <var-get name="total">
        </function>
        
        <string-split self="1,2,3" separator=",">
        <array-map return="number">
          <number-from-string>
        </array-map>
        <function-call name="sum"></function-call>
        <assert-equal value="6" type="number">
        
        👆 Try to change something!
      • Test Case:Mixed named and unnamed parameters
          <function name="repeat" params="text: string, count: number" return="string">
            <var-set name="result">
              <string-new value>
            </var-set>
            <var-get name="count">
            <array-sequence start="1">
            <array-loop>
              <var-update name="result">
                <var-get name="text">
                <string-append>
              </var-update>
            </array-loop>
            <var-get name="result">
          </function>
          
          <string-new value="hello">
          <number-new value="3">
          <function-call name="repeat"></function-call>
          <assert-equal value="hellohellohello" type="string">
          
          👆 Try to change something!
        • Test Case:No parameters
            <function name="getAnswer" return="number">
              <number-new value="42">
            </function>
            
            <function-call name="getAnswer"></function-call>
            <assert-equal value="42" type="number">
            
            👆 Try to change something!
          • Test Case:Closure parameter
              <function name="applyTwice" params="number, (number) -> number" return="number">
                <closure-execute></closure-execute>
                <closure-execute></closure-execute>
              </function>
              
              <number-new value="5">
              <closure-new>
                <number-new value="2">
                <number-multiply>
              </closure-new>
              <function-call name="applyTwice"></function-call>
              <assert-equal value="20" type="number">
              
              👆 Try to change something!
            • Test Case:Named closure parameter
                <function name="transform" params="items: [string], mapper: (string) -> string" return="string">
                  <var-get name="items">
                  <array-map return="string">
                    <var-get name="mapper">
                    <closure-execute></closure-execute>
                  </array-map>
                  <array-join separator=",">
                </function>
                
                <string-split self="a,b,c" separator=",">
                <closure-new>
                  <string-uppercase>
                </closure-new>
                <function-call name="transform"></function-call>
                <assert-equal value="A,B,C" type="string">
                
                👆 Try to change something!
              • Test Case:Unnamed parameters via positional attributes
                  <function name="add" params="number, number" return="number">
                    <number-add>
                  </function>
                  
                  <function-call name="add" 0="3" 1="4"></function-call>
                  <assert-equal value="7" type="number">
                  
                  👆 Try to change something!
                • Test succeeded Test failed