一统天下 flutter - dart: 控制语句(if/else, switch/case, while/do-while, for)
一统天下 flutter - dart: 控制语句(if/else, switch/case, while/do-while, for)
示例如下:
lib\dart\statement.dart
/*
* dart 控制语句(if/else, switch/case, while/do-while, for)
*/
import 'package:flutter/material.dart';
import 'package:flutter_demo/helper.dart';
class DartStatement extends StatelessWidget {
const DartStatement({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
// if/else
sample1();
// switch/case
sample2();
// while/do-while
sample3();
// for/forEach
sample4();
return Column(
children: [
// for 语句可以用来生成 widget 集合
for (var i = 0; i < 10; i++)
MyText('text $i')
],
);
}
void sample1() {
var a = 1;
if (a > 1) {
log("a > 1");
} else if (a < 1) {
log("a < 1");
} else {
log("a == 1");
}
Object b = "webabcd";
// 判断类型成功之后,再使用时其就是被转换之后的
if (b is String) {
log("${b.length}");
}
// 判断类型成功之后,再使用时其就是被转换之后的
if (b is String && b.length == 7) {
log("ok");
}
String? c = currentTimestamp() % 999999 == 0 ? null : "webabcd";
// 判断为非空之后,再使用时其就是非空了
if (c != null) {
log("${c.length}");
}
// 判断为非空之后,再使用时其就是非空了
if (c != null && c.length == 7) {
log("ok");
}
}
void sample2() {
var a = 1;
switch (a) {
case 1:
log("a == 1");
break; // 没有 break 的话会编译时报错
default:
log("a != 1");
}
var b = 0;
switch (b) {
case 0: // 空 case 语句允许没有 break,结果就是强制执行下一个 case 语句中的表达式(不管下一个 case 语句的条件是否匹配),这种行为称之为 fall-through
case 1:
log("b == 1");
break;
default:
log("b != 1");
}
// 上面的执行结果为:
// b == 1
var c = 0;
switch (c) {
case 0:
log("c == 0");
continue myLabel; // 如果需要自行控制 fall-through 则可以通过 continue 跳转到指定的位置
case 1:
log("c == 1");
break;
myLabel:
case 2:
log("c == 2");
break;
default:
log("c != 1");
}
// 上面的执行结果为:
// c == 0
// c == 2
}
void sample3() {
int a = 1;
// while 循环(支持 break 和 continue)
while (a < 3) {
log("a: $a");
a++;
}
int b = 1;
// do-while 循环(支持 break 和 continue)
do {
log("b: $b");
b++;
} while (b < 3);
}
void sample4() {
var a = [1, 2, 3];
// for 循环(支持 break 和 continue)
for (var i = 0; i < a.length; i++) {
log("a:${a[i]}");
}
var b = 0;
// for 循环(括号中的各种表达式不需要的话可以省略)
for (;;) {
if (b >= a.length) {
break;
}
log("a:${a[b]}");
b++;
}
// for 循环(foreach 的方式)
for (var item in a) {
log("a:$item");
}
// 可迭代对象的 forEach 方法
// 迭代出的元素是 int 类型,每迭代一次就调用一次 myLog(int i) 方法,并为其传递迭代出的数据
a.forEach(myLog); // 注:不建议在 forEach 中使用匿名函数,比如像这样写 a.forEach((i) { log("$i"); }); 是不被推荐的
}
void myLog(int i) {
log("$i");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇
2012-03-22 稳扎稳打Silverlight(67) - 5.0被信任的应用程序之访问本地文件系统, 支持多窗口, 被信任的程序在浏览器中运行, Call Windows API