[NAME] ALL.dao.routine [TITLE] Routine [DESCRIPTION] Routine is a block of codes, once defined, can be used in different places at different time repeatedly. It can accept parameters to changes its behaviour. It may also return results to its callee. Dao routines are declared with keyword routine or function or sub (which are exactly equivalent to routine), 1 routine func( a, b ) 2 { 3 io.writeln( a, b ); 4 a = 10; 5 b = "test"; 6 return a, b; # return more than one results. 7 } 8 9 r1, r2; 10 ( r1, r2 ) = func( 111, "AAA" ); 11 r3 = func( r1, r2 ); 12 io.writeln( "r1 = ", r1 ); 13 io.writeln( "r2 = ", r2 ); 14 io.writeln( "r3 = ", r3 ); 0.1 Named Parameter In Dao the function parameters are named, and parameter values can be passed in by name: 1 func( b => 123, a => "ABC" ); 0.2 Parameter Type and Default Value It is also possible to specify the type or the default value of a parameter. 1 routine MyRout( name : string, index = 0 ) 2 { 3 io.writeln( "NAME = ", name ) 4 io.writeln( "INDEX = ", index ) 5 } Here name is specified as string, and index is specified as an integer with default value 0. Any parameter after a parameter with default value must have default values as well. If a routine is called with wrong type of parameters, or no value is passed to a parameter without a default value, an exception will be raised and the execution will abort. 0.3 Routine Overloading Routine overloading by parameter types is also supported in Dao, which means that multiple routines can be defined with the same name, but different parameter signatures. 1 routine MyRout( index : int, name = "ABC" ) 2 { 3 io.writeln( "INDEX = ", index ) 4 io.writeln( "NAME = ", name ) 5 } 6 7 MyRout( "DAO", 123 ) # invoke the first MyRout() 8 MyRout( 456, "script" ) # invoke the second MyRout() For coroutines, please see module.core.coroutine. [STRUCTURE] dao.routine--| dao.routine: Routine (12.6 KB) |--anonymous--| dao.routine.anonymous: Anonymous Routine (1.0 KB) |--section----| dao.routine.section: Code Section Methods (3.2 KB) |--decorator--| dao.routine.decorator: Function Decorator (6.4 KB)