当前位置: 首页 > news >正文

dart学习记录4(循环、分钟、错误处理)

1. for循环和for …in…

和大多数语言一样

void main() {
  for (int i = 0; i < 5; i++) {
    print(i);
  }
}
void main() {
  List<String> fruits = ['apple', 'banana', 'cherry'];
  for (String fruit in fruits) {
    print(fruit);
  }
}

2. while和do-while

和大多数语言一样

while (!isDone()) {
  doSomething();
}

do {
  printLine();
} while (!atEndOfPage());

3.Break和Continue

和大多数语言一样

4.标签(Labels)

语法:lablename :标识符后跟冒号,以将其放在语句之前以创建带标签的语句。循环和 switch 语句通常用作带标签的语句。带标签的语句可以在 break 或 continue 语句中被引用

  • break labelName; 终止带标签语句的执行。这在嵌套循环中打破特定外层循环时很有用
  • break labelName; 终止带标签语句的执行。这在嵌套循环中打破特定外层循环时很有用。
    示例
outerLoop:
for (var i = 1; i <= 3; i++) {
  for (var j = 1; j <= 3; j++) {
    print('i = $i, j = $j');
    if (i == 2 && j == 2) {
      break outerLoop;
    }
  }
}
print('outerLoop exited');
====================================
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
outerLoop exited

在上面的示例中,当 i == 2 且 j == 2 时,break outerLoop; 语句停止了内外两层循环。如果不使用标签,break只能打破内层的for循环。

outerLoop:
for (var i = 1; i <= 3; i++) {
  for (var j = 1; j <= 3; j++) {
    if (i == 2 && j == 2) {
      continue outerLoop;
    }
    print('i = $i, j = $j');
  }
}
================================
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3

在上面的示例中,当 i == 2 且 j == 2 时,continue outerLoop; 跳过了 i = 2 的剩余迭代。如果加标签直接continue 只能跳过j=2时的迭代,加了标签跳过了 i = 2 的剩余迭代。

5.if语句

和大多数语言一样

if (isRaining()) {
  you.bringRainCoat();
} else if (isSnowing()) {
  you.wearJacket();
} else {
  car.putTopDown();
}

6. If-case语句

类似于模式匹配 ,如果模式与值匹配,则分支将在模式定义的变量范围内执行

if (pair case [int x, int y]) {
  print('Was coordinate array $x,$y');
} else {
  throw FormatException('Invalid coordinates.');
}


var list = (3, 3.14, "hello");
  if (list case (int x , double y))
    print("x = $x, y = $y");		//判断为假,不会输出
    
  if (list case (int x , double y, String z))
    print("x = $x, y = $y, z = $z");	判断为真,输出

7.switch语句

dart中非空的 case 子句在完成后会跳转到 switch 的末尾,不需要 break 语句。其他有效的非空 case 子句结束方式包括 continue、throw 或 return 语句

switch (command) {
  case 'OPEN':
    executeOpen();
    continue newCase; // 继续执行 newCase 标签处。

  case 'DENIED': // 空 case 落入下一个。
  case 'CLOSED':
    executeClosed(); // 为 DENIED 和 CLOSED 运行,

  newCase:
  case 'PENDING':
    executeNowClosed(); // 为 OPEN 和 PENDING 运行。
  default:
  	executeUnknown();
}

8.switch表达式

case后接表达式

// 其中 slash、star、comma、semicolon 等是常量变量...
switch (charCode) {
  case slash || star || plus || minus: // 逻辑或模式
    token = operator(charCode);
  case comma || semicolon: // 逻辑或模式
    token = punctuation(charCode);
  case >= digit0 && <= digit9: // 关系和逻辑与模式
    token = number();
  default:
    throw FormatException('Invalid');
}

看起来牛逼一点的写法

token = switch (charCode) {
  slash || star || plus || minus => operator(charCode),
  comma || semicolon => punctuation(charCode),
  >= digit0 && <= digit9 => number(),
  _ => throw FormatException('Invalid'),
};

9.异常和断言

https://dart.dev/language/error-handling 没啥说的,看官方文档

相关文章:

  • 【AI News | 20250320】每日AI进展
  • MyBatis 执行流程详解:一级缓存与二级缓存深度解析
  • QT并发编程进阶--线程安全与同步技巧详解
  • css-grid布局
  • 日期类的实现
  • 基于复杂的商业和政策信息构建GraphRAG,并结合通义千问大模型进行问答的应用场景
  • 美团Leaf分布式ID实战:深入解析雪花算法原理与应用
  • 网络空间安全(38)Windows/Linux权限
  • 算法刷题记录——LeetCode篇(1) [第1~100题](持续更新)
  • yarn install 出现certificate has expired报错问题
  • 读博士论文(未完待续)
  • (九)Dart 中的 Map(映射)
  • FPGA设计中时间单位科普
  • VS Code使用过程记录
  • Redisson 分布式锁原理
  • MCP(1)
  • 深入解析 Redis 原理:架构、数据结构与高效存储
  • 动态规划(6.不同路径II)
  • Binder机制源码分析
  • 蓝桥杯关于字符串的算法题目(leetcode回文串的判断问题)
  • 上海高桥镇10个重点项目集中签约,总投资近20亿元
  • 国家消防救援局应急通信和科技司负责人张昊接受审查调查
  • 凤阳县鼓楼四周连夜搭起围挡,安徽省文物局已介入调查
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 河南通报部分未检疫生猪流入:立案查处,涉案猪肉被封存
  • 倒计时1天:走进“中国荔乡”茂名,探寻农交文旅商融合发展新模式