首页 > 其他分享 >前端学习-Dart官方文档学习-005-控制流

前端学习-Dart官方文档学习-005-控制流

时间:2024-05-31 17:22:05浏览次数:26  
标签:case 控制流 while Dart break switch 005 var Day

官方文档链接

Loops循环

  • for loops
  • while and do while loops
  • break and continue
  • Branching, like if and switch
  • Exceptions, like try, catch, and throw

for、for-in、forEach

var callbacks = [];
for (var i = 0; i < 2; i++) {
  callbacks.add(() => print(i));
}
// The output is 0 and then 1
for (final c in callbacks) {
  c();
}

// 使用pattern
for (final Candidate(:name, :yearsExperience) in candidates) {
  print('$name has $yearsExperience of experience.');
}

// forEach
var collection = [1, 2, 3];
collection.forEach(print); // 1 2 3

while and do while

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

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

Break and continue

while (true) {
  if (shutDownRequested()) break;
  processIncomingRequests();
}

for (int i = 0; i < candidates.length; i++) {
  var candidate = candidates[i];
  if (candidate.yearsExperience < 5) {
    continue;
  }
  candidate.interview();
}

// If you're using an Iterable such as a list or set, how you write the previous example might differ:
candidates
    .where((c) => c.yearsExperience >= 5)
    .forEach((c) => c.interview());

Branches 分支

  • if statements and elements
  • if-case statements and elements
  • switch statements and expressions
  • Loops, like for and while
  • Exceptions, like try, catch, and throw

if、if-case

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

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

Switch

switch语句
var command = 'OPEN';
switch (command) {
  case 'CLOSED':
    executeClosed();
  case 'PENDING':
    executePending();
  case 'APPROVED':
    executeApproved();
  case 'DENIED':
    executeDenied();
  case 'OPEN':
    executeOpen();
  default:
    executeUnknown();
}

switch (command) {
  case 'OPEN':
    executeOpen();
    continue newCase; // Continues executing at the newCase label.

  case 'DENIED': // Empty case falls through.
  case 'CLOSED':
    executeClosed(); // Runs for both DENIED and CLOSED,

  newCase:
  case 'PENDING':
    executeNowClosed(); // Runs for both OPEN and PENDING.
}
switch 表达式
var x = switch (y) { ... };

print(switch (x) { ... });

return switch (x) { ... };

如何将switch语句转为表达式

// switch语句
// Where slash, star, comma, semicolon, etc., are constant variables...
switch (charCode) {
  case slash || star || plus || minus: // Logical-or pattern
    token = operator(charCode);
  case comma || semicolon: // Logical-or pattern
    token = punctuation(charCode);
  case >= digit0 && <= digit9: // Relational and logical-and patterns
    token = number();
  default:
    throw FormatException('Invalid');
}

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

Exhaustiveness checking(穷尽检查)

穷尽检查是一种在编程中用于确保所有可能情况都被处理的技术。在 Dart 中,通常用于处理枚举类型或联合类型。

// Non-exhaustive switch on bool?, missing case to match null possibility:
switch (nullableBool) {
  case true:
    print('yes');
  case false:
    print('no');
}

例如,在处理枚举类型时,可以使用switch语句来进行穷尽检查。确保在switch语句中处理了枚举的所有可能值,否则会产生编译错误或运行时异常。如果没有处理完所有的枚举值,Dart 编译器会给出相应的错误提示,强制要求进行完整的处理,从而实现穷尽检查。

enum Day { monday, tuesday, wednesday, thursday, friday, saturday, sunday }

void handleDay(Day day) {
  switch (day) {
    case Day.monday:
      // 处理周一的逻辑
      break;
    case Day.tuesday:
      // 处理周二的逻辑
      break;
    case Day.wednesday:
      // 处理周三的逻辑
      break;
    case Day.thursday:
      // 处理周四的逻辑
      break;
    case Day.friday:
      // 处理周五的逻辑
      break;
    case Day.saturday:
      // 处理周六的逻辑
      break;
    case Day.sunday:
      // 处理周日的逻辑
      break;
  }
}
sealed class Shape {}

class Square implements Shape {
  final double length;
  Square(this.length);
}

class Circle implements Shape {
  final double radius;
  Circle(this.radius);
}

double calculateArea(Shape shape) => switch (shape) {
      Square(length: var l) => l * l,
      Circle(radius: var r) => math.pi * r * r
    };

Guard clause

在 Dart 中,Guard clause(卫语句)指的是在函数开头用来判断一些明显非法情况并立即退出的语句。例如常见的指针判空操作,函数参数的校验等。它的主要作用是增强代码的健壮性,减少嵌套的条件表达式,使代码更易于理解和维护。
当guard子句的计算结果为false时,执行将继续执行下一个case,而不是退出整个switch。

// Switch statement:
switch (something) {
  case somePattern when some || boolean || expression:
    //             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guard clause.
    body;
}

// Switch expression:
var value = switch (something) {
  somePattern when some || boolean || expression => body,
  //               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guard clause.
}

// If-case statement:
if (something case somePattern when some || boolean || expression) {
  //                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Guard clause.
  body;
}

标签:case,控制流,while,Dart,break,switch,005,var,Day
From: https://www.cnblogs.com/ayubene/p/18224123

相关文章

  • Dart语言基础
    简介基于Dart语言,跨平台(移动端-Android-iOS/Web-各种浏览器/桌面-Windows-Mac/嵌入式平台-Linux-Fuchsia和高性能(GPU图形渲染技术)可达到120fps(胜任游戏)flutter中文文档Dart概述Dart强类型的,面向对象的编程语言运行方式一种是原生虚拟机,另一种是Dart转成js代码运行在浏览器Da......
  • flutter - [01] Dart概述
    题记部分 一、什么是dartdart是由谷歌开发的计算机编程语言,可以被用于web、服务器、移动应用和物联网等领域的开发dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火,直到Flutter出现后,被人们重新重视。要学习Flutter,必须首先得学习Dart。dart官网:htt......
  • Gym-100520A Andrew Stankevich Contest 45 A 题解
    AnalogousSetsGym-100520ASol1.集合生成函数将可重集合\(M\)映射为生成函数:\[F(M)=\sum_{m\inM}(\#m)\cdotx^m\]如果\(M\)的元素在\(\mathbbN\)上取值,那么,\(F(M)\)是多项式。2.\(\theta\)算子\[\theta(F)=x\cdotF'\]其中\(F'=\frac{dF}{dx}\)......
  • 前端学习-Dart官方文档学习-003-模式匹配
    官方文档链接简介匹配和解构//匹配consta='a';constb='b';switch(obj){//Listpattern[a,b]matchesobjfirstifobjisalistwithtwofields,//thenifitsfieldsmatchtheconstantsubpatterns'a'and'b'.c......
  • 【Qt秘籍】[005]-Qt第一次实战-运行
    一、如何创建文件?        当我们打开QtCreator,你会发现整个界面类目繁多。现在,让我们直接开始新建一个项目。1.点击左上角的“文件”==>点击“新建文件或项目”2.如图,选择“Application”==>“QtWifgetsapplication”==>“Choose...” 3.如图,选择填写名称和......
  • 前端学习-Dart官方文档学习-002-类型
    官方文档链接基本类型Dart支持以下类型:Numbers(int,double)Strings(String)Booleans(bool)Records((value1,value2))Lists(List,alsoknownasarrays)Sets(Set)Maps(Map)Runes(Runes;oftenreplacedbythecharactersAPI)Symbols(Symbol)Thevaluenu......
  • 【FOC】FOC控制流程图
    图1经典FOC控制流程图图2MatlabFOC控制流程图说明如下:以电流闭环控制为例,也就是让电机始终保持一个恒定力矩(力矩与电流成正比)。从上图可以看到最左边的Iq_Ref和Id_Ref两个变量经过PID控制器进行反馈调节,其中涉及到几个变换模块,包括:Clarke变换、Park变换以及反Park......
  • Python(四)——基础控制流程语句:简单用户登录和输出10以内的奇偶数
    例子1:编写一小段代码,输入正确的账号和密码实现登陆操作。利用input函数判断用户名和密码是否正确,正确输出“欢迎您!“,用户名默认admin,密码默认为123代码实现:username=input("请输入用户名:")password=input("请输入密码:")ifusername=="admin":ifpassword=="123......
  • 2005-2022年各省恩格尔系数数据(含原始数据+计算过程+计算结果)
    2005-2022年各省恩格尔系数数据(含原始数据+计算过程+计算结果)1、 时间:2005-2022年2、 来源:统计年鉴、住户调查年鉴、国家统计局3、 范围:31省4、 指标:食品消费支出(2013-2022)、居民人均消费支出(2013-2022)、城镇居民人均消费支出(2005-2012)、城镇居民食品消费支出(2005-......
  • 2005-2022年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(
    2005-2022年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(无缺失)1、时间:2005-2022年2、来源:国家统计局、统计年鉴3、范围:31省4、指标:全体居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出5、缺失情况:无缺失6、指标解释:居民人均......