当前位置:首页 > 后端开发 > 正文内容

Flutter/Dart第12天:Dart操控流详解

邻居的猫1个月前 (12-09)后端开发1745

Dart操控流主要由循环分支组成:

  • Dart官方文档-循环:https://dart.dev/language/loops
  • Dart官方文档-分支:https://dart.dev/language/branches

重要说明:本博客依据Dart官网文档,但并不是简略的对官网进行翻译,在掩盖中心功用状况下,我会依据个人研制经历,参加自己的一些扩展问题和场景验证。

循环

Dart可经过循环来操控逻辑流,它支撑3种句子:for循环,whiledo while循环,breakcontinue

一起,也能够经过非循环来操控逻辑流,包含:分支(如:ifswitch)和反常(trycatchthrow)等

for循环

for循环能够运用在迭代中,规范用法如下代码样例:

var message = StringBuffer('Dart is fun');
for (var i = 0; i < 5; i++) {
  message.write('!');
}

for-in循环常用于无需重视迭代的索引,如下代码样例,包含了闭包列表和迭代:

var callbacks = [];
for (var i = 0; i < 2; i++) {
  callbacks.add(() => print(i));
}

for (final c in callbacks) {
  c();
}
// 解构:01

相同的,for-in循环还能够运用目标形式(Pattern形式详解:https://ntopic.cn/p/2023100501),解构迭代的元素:

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

关于迭代类型(Dart可迭代调集详解:https://ntopic.cn/p/2023092701),forEach()办法也能够完成循环:

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

while和do while循环

while循环do while循环最大的差异:while先检测循环条件,然后履行循环逻辑;do while默许先履行1次循环逻辑,然后检测循环条件,以决议后续是否持续履行循环逻辑。

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

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

break和continue循环操控

breakcontinue在循环中的最大差异:break中止整个循环,而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();
}

// 若`candidates`是可迭代列表,则上面的逻辑可改写如下:
candidates
    .where((c) => c.yearsExperience >= 5)
    .forEach((c) => c.interview());

分支

Dart也可经过分支来操控逻辑流:if句子和元素,if-case句子和元素,switch句子和switch表达式等。

相同的,咱们也能够经过其他方法来操控逻辑流:如循环(便是本文的第1节)和反常(trycatchthrow)等

if/else分支

if句子能够有else可选项子句,if后边的括号中的表达式核算值有必要是boolean类型,如下代码样例:

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

if-case形式

Dart中if句子后的case子句能够带一个形式(Pattern形式详解:https://ntopic.cn/p/2023100501):

if (pair case [int x, int y]) return Point(x, y);

上诉代码样例中,列表形式[int x, int y]首要匹配pair值,而且把列表第1和第2个int类型的元素解构并赋值给了xy变量。

假如形式未能成功匹配,则需求进入else分支:

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

switch句子和switch表达式

switch句子后边能够有多个case子句,每一个case子句都能够是一个形式(Pattern形式详解:https://ntopic.cn/p/2023100501)。

当没有case子句匹配时,就会履行default子句或许_通配符子句:

switch (command) {
  case 'OPEN':
    executeOpen();
    continue newCase; // 持续履行

  case 'DENIED':
  case 'CLOSED':
    executeClosed(); // `DENIED`和`CLOSED`均会履行

  newCase:
  case 'PENDING':
    executeNowClosed(); // `OPEN`和`PENDING`均会履行
}

在switch句子中,还能够运用形式,有如下几种用法:

var x = switch (y) { ... };

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

return switch (x) { ... };

switch表达式能够重写switch句子,如下为switch句子的代码样例:

// `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');
}

上诉代码样例,能够运用switch表达式重写如下:

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

switch表达式不同于switch句子的语法,包含以下几个方面:

  • Case可选项无需运用case最初。
  • Case可选项的逻辑是一个表达式,而不是一系列的句子。
  • Case可选项都有必要有逻辑,空可选性不代表隐性失利。
  • Case可选项形式,逻辑运用=>切割。
  • 多个Case可选项之间,运用,切割。
  • 默许可选项,只能运用_

Switch还能够运用在穷举检测中,便是一切的值都有对应的可选项被处理,以防止引发编译过错。默许可选项(default_)涵盖了一切其他状况,因而它能够保证穷举性。

case-when子句

case-when子句:case子句后边添加when子句。case-when子句能够用在if-caseswitch句子switch表达式中。

switch (pair) {
  case (int a, int b) when a > b:
    print('First element greater');
  case (int a, int b):
    print('First element not greater');
}

case-when子句核算任何一个boolean类型的值,值为true代表能够履行本Case可选项逻辑,为false持续履行下一个Case可选项,并不会退出整个Switch句子。


我的本博客原地址:https://ntopic.cn/p/2023101301


扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=271

分享给朋友:

“Flutter/Dart第12天:Dart操控流详解” 的相关文章

R言语遍历文件夹求取其间一切栅格文件的平均值

R言语遍历文件夹求取其间一切栅格文件的平均值

  本文介绍根据R言语中的raster包,遍历读取多个文件夹下的多张栅格遥感印象,别离批量对每一个文件夹中的多个栅格图画核算平均值,并将所得各个成果栅格别离加以保存的办法。   其间,本文是用R言语来进行操作的;假如期望根据Python言语完成相似的平均值求取操作,咱们能够参阅Python ArcP...

Flutter/Dart第10天:Dart高档特性Pattern形式的悉数类型(共15种)

Flutter/Dart第10天:Dart高档特性Pattern形式的悉数类型(共15种)

Dart官方文档:https://dart.dev/language/pattern-types 重要说明:本博客依据Dart官网文档,但并不是简略的对官网进行翻译,在掩盖中心功用情况下,我会依据个人研制经历,参加自己的一些扩展问题和场景验证。 和操作符相同,形式运算也遵从必定的优先级规矩,咱们能够...

安装python,从入门到环境配置

安装Python是一个简单的过程,但具体的步骤可能会因操作系统和版本而有所不同。下面我会提供在Windows、macOS和Linux上安装Python的基本步骤。请注意,Python 3和Python 2在安装和配置上有所不同,我这里主要介绍Python 3的安装方法。 Windows系统1. 下载...

python下载安装,轻松入门编程世界

python下载安装,轻松入门编程世界

Windows1. 访问 Python 官方网站下载页面:https://www.python.org/downloads/windows/2. 选择适合你系统的 Python 版本(例如 Python 3.10.0)并下载。3. 运行下载的安装程序,并按照提示进行安装。4. 确保在安装过程中勾选...

rust腐蚀多少钱,了解其经济影响

目前《Rust(腐蚀)》在Steam国区的售价为136元人民币。如果你不急于购买,可以留意Steam上的促销活动,有时会有折扣,最低曾达到25元人民币Rust腐蚀的代价:了解其经济影响在工业领域,Rust(铁锈)是一种常见的腐蚀现象,它不仅影响设备的性能和寿命,还会带来显著的经济损失。本文将探讨Ru...

delphi为什么没人用了,Delphi为何逐渐淡出开发者视野?

Delphi 是一种编程语言和集成开发环境(IDE),由 Borland(现在的 Embarcadero Technologies)开发,主要面向 Windows 平台。它在 1990 年代和 2000 年代初期非常流行,尤其是在桌面应用开发领域。随着时间的推移,Delphi 的使用逐渐减少,原因可...