[NAME] ALL.dao.control.for [TITLE] For循环控制 [DESCRIPTION] 道语言支持以下几种for循环控制: * For-in 循环; * 区间 for 循环; * C 风格 for 循环; 0.1 定义 1 ForIn ::= 'for' '(' ['var'|'invar'] Identifier 'in' Expression {';' Identifier 'in' Expression} ')' 2 ControlBlock 3 4 RangeFor ::= 'for' '(' ['var'|'invar'] Identifier '=' Expression ':' [Expression ':'] Expression ')' 5 ControlBlock 6 7 CFor ::= 'for' '(' [ LocalVarDeclaration ] ';' [ Expression ] ';' [ ExpressionList ] ')' 8 ControlBlock 9 10 ForStmt ::= ForIn | RangeFor | CFor 0.2 For-In For-in循环通常可用来历遍容器类对象里的元素。 它最常用于历遍列表的元素: 1 numbers = { 1, 2, 3, 4, 5 } 2 for( num in numbers ) io.writeln( num ) For-in 循环也可用来历遍关联表的键值: 1 mapping = { 'AA'=>11, 'BB'=>22, 'CC'=>33 } 2 for( pair in mapping ) io.writeln( pair ) 这里的循环变量pair将以元组的形式表示关联表里的一对键值。 在同一个for-in 循环,多个in表达式可用来同时历遍多个容器类对象: 1 numbers = { 1, 2, 3, 4, 5 } 2 mapping = { 'AA'=>11, 'BB'=>22, 'CC'=>33 } 3 for( num in numbers; pair in mapping ) io.writeln( num, pair ) 0.3 区间For循环 区间For循环使用算术级数确定一个循环的循环方式。 这种算术级数的定义由一初始值,一可选的步长值 和一终止值构成。 1 for( index = 1 : 2 : 10 ) { # 步长值 = 2; 2 io.writeln( index ) 3 } 4 for( index = 1 : 10 ) { # 步长值 = 1; 5 io.writeln( index ) 6 } 这里的循环由index=1开始,然后每个循环周期里, 循环变量index的值都加二或者一, 当其值大于10时 ,循环将终止。 0.4 C风格For循环 C风格For循环是一个非常灵活的循环结构。 它的基本用法如下: 1 for( init; condition; step ){ 2 block; 3 } 这种循环执行步骤的关键逻辑顺序如下: 1. 执行初始表达式init; 2. 检查条件表达式condition; 3. 如果检查结果为真,执行下一步,否则退出循环; 4. 执行代码块block; 5. 执行步长表达式step,然后跳到第二步; 这种循环的具体执行步骤将取决于实现, 但其逻辑步骤不变。 例子: 1 for(i=0; i<3; ++i){ 2 io.writeln( i ); 3 } 4 for(var i, j=0; i<10; ++i, j+=2){ 5 io.writeln( i, j ); 6 }