💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 1.10 循环语句 Beetl支持丰富的循环方式,如 `for-in`,`for(exp;exp;exp)`,`while`,以及循环控制语句`break;`,`continue;` 另外,如果**没有进入for循环体**,还可以执行 `elsefor` 指定的语句。 [TOC] ### 1.10.1 for-in for-in循环支持遍历集合对象,对于List和数组来说以及Iterator,对象就是集合对象,对于Map来说,对象就是Map.entry,如下俩个例子 ```javascript <% for(user in userList){ print(userLP.index); print(user.name); } %> ``` 第三行代码userLP是Beetl隐含定义的变量,是一个ILoopStatus实例,能在循环体内使用。其命名规范是item名称后加上LP,他提供了当前循环的信息,如 - **userLP.index **当前的索引,从1开始 - userLP.dataIndex 索引,从0开始 - **userLP.size **集合的长度 - **userLP.first** 是否是第一个 - **userLP.last** 是否是最后一个 - **userLP.even** 索引是否是偶数 - **userLP.odd** 索引是否是奇数 > 如何记住后缀是LP,有俩个诀窍,英语棒的是Loop的缩写,拼音好的是老婆的拼音缩写,这可以让程序员每次写到这的时候都会想想老婆(不管有没有,哈哈) 如下是Map使用例子 ```javascript <% for(entry in map){ var key = entry.key; var value = entry.value; print(value.name); } %> ``` ### 1.10.2 for(exp;exp;exp) 对于渲染逻辑更为常见的是经典的for循环语句,如下例子 ```javascript <% var a = [1,2,3]; for(var i=0;i<a.~size;i++){ print(a[i]); } %> ``` ### 1.10.3 while 对于渲染逻辑同样常见的有的while循环语句,如下例子 ```javascript <% var i = 0; while(i<5){ print(i); i++; } %> ``` ### 1.10.4 elsefor 不同于通常程序语言,如果没有进入循环体,则不需额外的处理,模板渲染逻辑更常见情况是如果没有进入循环体,还需要做点什么,因此,对于for循环来说,还有elsefor 用来表达如果循环体没有进入,则执行elsefor 后的语句 ```javascript <% var list = []; for(item in list){ }elsefor{ print("未有记录"); } %> ```