App Inventor 2 控制流积木实战:从分支判断到多屏协作,构建“会思考“的App

📅 2026/7/8 7:34:57
App Inventor 2 控制流积木实战:从分支判断到多屏协作,构建“会思考“的App
App Inventor 2 控制流积木实战:从分支判断到多屏协作,构建会思考的App刚学 App Inventor 2 那会儿,我做过一个计算器:两个数字运算符→显示结果,塞进一个 Screen é‡Œå®Œäº‹ã€‚åŽæ¥å¼€å§‹åšå¤æ‚ç‚¹çš„ä¸œè¥¿â€”â€”ç™»å½•æ ¡éªŒã€åˆ†é¡µæŸ¥è¯¢ã€ç­”é¢˜è®¡æ—¶â€”â€”ä»£ç çªç„¶å°±å˜æˆäº†ä¸€å›¢ä¹±éº»ã€‚ç›´åˆ°æˆ‘æŠŠ Control ç§¯æœ¨ï¼ˆæŽ§åˆ¶æµï¼‰çš„ç³»ç»Ÿæ‘¸é€ï¼Œæ‰æ˜Žç™½é—®é¢˜å‡ºåœ¨å“ªï¼šä¸æ˜¯åŠŸèƒ½å¤ªå¤æ‚ï¼Œè€Œæ˜¯ä¸çŸ¥é“é€‰å¯¹æŽ§åˆ¶ç»“æž„ã€‚è¿™ç¯‡æ•™ç¨‹é¢å‘å·²ç»èƒ½æ‹¼åŸºç¡€ç§¯æœ¨ï¼Œä½†æƒ³å†™å‡ºæ›´å¥å£®ã€æ›´æ¨¡å—åŒ–ä»£ç çš„å¼€å‘è€ã€‚—## ä½ ä¼šå­¦åˆ°ä»€ä¹ˆ- 用if/else if处理多条件分支的正确姿势-for range、for each、for each with key三种循环各自的最佳使用场景-while break组合实现灵活的重复逻辑- å¤šå±å¹•åä½œçš„æŽ¨èä¼ å€¼æ¨¡å¼-do with resultå’Œevaluate but ignore result两个特殊积木的巧用—## 控制流积木四大类App Inventor 2 的控制流积木放在å†ç½®å—面板最顶上,分为四大类:| 类别 | 积木 | 用途 ||------|------|------|| 条件判断 | if then / if then else / if else if / choose(三åƒï¼‰ | æ ¹æ®æ¡ä»¶èµ°ä¸åŒåˆ†æ”¯ || 循环迭代 | for range / for each / for each with key / while / break | 重复执行一段逻辑 || 屏幕导航 | open another screen / close screen / get start value / close screen with value | å¤šå±å¹•ä¹‹é—´çš„è·³è½¬ä¸Žä¼ å€¼ || è¾åŠ©å·¥å· | do with result / evaluate but ignore result | å†è”计算与副作用处理 | åˆå­¦è€æœ€å¸¸è§çš„误区:把所有逻辑写在一个事件处理块里,然后用七å«ä¸ªåµŒå¥— if。正确的做法是åˆé€‰æŽ§åˆ¶ç»“æž„ï¼Œå†å†™ä¸šåŠ¡é€»è¾‘â€”â€”å°±åƒç›–æˆ¿å­åˆæ­æ¡†æž¶å†ç Œå¢™ã€‚—## 实战:用签到App串联所有控制流积木### Step 1: 用if/else ifæ ¡éªŒç­¾åˆ°ç ç­¾åˆ°è§„åˆ™ï¼šæ­£ç¡®ç  “AIA2026” → æˆåŠŸï¼›ç©ºè¾“å¥ â†’ æç¤ºä¸èƒ½ä¸ºç©ºï¼›é”™è¯¯ç  → 提示错误,请重试。å³é”®åœ¨äºŽif/else ifçš„ mutator 可扩展出多个 else if 分支,判断逻辑从上到下逐一测试,ʊ一旦某个条件为真,后续å¨éƒ¨è·³è¿‡ã€‚æ‰€ä»¥ä¼˜åˆæŠŠå¼‚å¸¸æ¡ä»¶æ”¾åœ¨å‰é¢ã€‚### Step 2: 用for each with key遍历签到记录生成考勤报告签到数据存在 TinyDB 里(键学号,值状态)。用for each with key同时拿到键和值,一条循环封能统计出签到人数和出勤率。对比三种循环:**-for range:需手动索引 select list itemï¼Œä»£ç å†—é•¿-for each:直接拿åƒç´ 值,适合列表遍历-for each with key:键值同取,适合字å¸éåŽ†æŽ¨èé¡ºåºï¼šèƒ½ç”¨for each就别用for range。### Step 3: 用whilebreak实现限时签到签到窗口开放 60 ç§’ï¼Œè¶æ—¶è‡ªåЍå³é—­ã€‚使用 Clock 组件设 1 秒间隔递减计数器,剩余 10 秒时变红提示,到 0 æ—¶å³é—­ç­¾åˆ°å¥å£ã€‚⚠️ 注意:break只能放在循环体å†ï¼Œä¸èƒ½ç”¨åœ¨ Clock çš„ Timer 事件中。停止计时器应该用TimerEnabled false。### Step 4: å¤šå±åä½œä¼ å€¼ç‚¹å‡»è€ƒå‹¤æŠ¥å‘Šä¸­çš„æŸä½å­¦ç”Ÿ →open another screen with start valueä¼ å¥å­¦å· → 详æƒé¡µç”¨get start value接收 → 查看完毕后close screen with value返回主屏。 🔄close screen with value→get start valueæ˜¯å¤šå±åä½œæ ‡å‡†æ¨¡å¼ã€‚close screen with value会释放被å³é—­å±å¹•çš„å†å­˜ï¼Œæ¯”重复 open æ›´çœèµ„æºã€‚å±å¹•æ ˆè¶è¿‡ 5 层时务å¿ç”¨è¿™ç§æ¨¡å¼ã€### Step 5: 用do with result精简一次性计算算出勤率这种只用一次的中间计算,用do with resultæ¯”å•ç‹¬å®šä¹‰è¿‡ç¨‹æ›´è½»é‡ã€‚ä»£ç ç´§è·Ÿåœ¨èµ‹å€¼è¯­å¥é‡Œï¼Œé˜è¯»èµ·æ¥æ›´æµç•。同理,evaluate but ignore result适合调用有返回值但当前不需要这个值的场景(如记录日志)。—## 常见坑点速查1. **å±å¹•é—´ä¼ å€¼ç”¨get start value,不是get plain start text**ï¼šåŽè€æ˜¯ä¸ºå¤–部 Android Activity 准备的,用错会导致复杂数据类型丢失2.for range循环变量只读:不要在循环体中修改变量值,不会生效3.choose返回的是值,if then else控制的是流程:前è€é€‚合赋值表达式å†åšæ¡ä»¶é€‰æ‹©4.open 屏幕å¿é¡»æ­é close:否则会å†å­˜æ³„漏,轻则卡顿,重则 OOM—## 总结| 场景 | 推荐积木 | 理由 ||------|---------|------|| 多条件分支(3~5 个) |if/else if(mutator 扩展) | æ¸æ™°ï¼Œè·³å‡ºåŠæ—¶ || 遍历列表 |for each| æ— ç´¢å¼•ï¼Œä»£ç ç®€ç»ƒ || éåŽ†å­—å¸ |for each with key| 键值同取 || 条件驱动的重复 |while 手动变量 | 灵活可控 || 一次性的å†éƒ¨è®¡ç®— |do with result| åå¼€è¿‡ç¨‹ || å¤šå±ä¼ å€¼ |open/close screen with value| 省å†å­˜ï¼Œä¼ 复杂值 |ä¸‹æ¬¡å†™ä»£ç æ—¶ï¼ŒèŠ±ä¸‰ç§’é’Ÿæƒ³æ¸æ¥šï¼šè¿™ä¸ªé€»è¾‘é€‚åƒå“ªç§æŽ§åˆ¶ç»“æž„ï¼Ÿé€‰å¯¹äº†ï¼Œä»£ç é‡ç›´æŽ¥å‡åŠï¼Œbug 也少一半。—### 📚 参考资料- 📄 控制流积木完整文档:https://www.fun123.cn/reference/blocks/control.html- 🏠App Inventor 2 中文网:https://www.fun123.cn