Skip to content

Dart 流程控制

条件判断

if...

dart
void main() {
  if (条件) {           
    // ...
  }
}

if...else...

dart
void main() {
  if (条件) {           
    // ...
  } else {
    // ...
  }
}

if...else if...

对于值的匹配判断时建议使用switch...case...

dart
void main() {
  if (条件1) {          
    // ...
  } else if (条件2) {
    // ...
  } else if (条件3) {
    // ...
  }
}

if...else if...else...

对于值的匹配判断时建议使用switch...case...

dart
void main() {
  if (条件1) {          
    // ...
  } else if (条件2) {
    // ...
  } else if (条件3) {
    // ...
  } else {
    // ...
  }
}

switch...case...

dart
void main() {
  switch (数据) {                       
    case 值1:
      // ...
      break;
    case 值2:
    case 值3:
      // ...
      break;
    default:
      // 条件都不满足时执行 ...
  }
}

对于处理根据数据的匹配判断直接返回对应值时,则建议使用switch 表达式


switch 表达式

用于处理根据数据的匹配判断直接返回对应值,可读性优于switch...case...语句

dart
void main() {
  final 返回值变量 = switch (数据) {    
    值1 => 对应的返回值,
    值2 => 对应的返回值,
    // ...
    _ => 默认返回值,
  }
}
例子:利用switch表达式简化switch...case...语句
dart
void printDayNumber(String day) {
  final num = switch (day) {
    'Monday' => 1,
    'Tuesday' => 2,
    'Wednesday' => 3,
    'Thursday' => 4,
    'Friday' => 5,
    'Saturday' => 6,
    'Sunday' => 7,
    _ => 10,
  };
  print(num);
}

void main() {
  printDayNumber('Monday');         // 1
  printDayNumber('Wednesday');      // 3
  printDayNumber('WTF');            // 10
}

循环遍历

while...

dart
void main() {
  while (条件) {             
    // ...
  }
}

避免死循环

为了避免出现重复不停的死循环,建议使用一个循环计控制器变量并将其作为循环的判断条件

js
var 循环计控制器变量 = 初始值;                    

void main() {
  while (基于循环计时器变量的判断条件) {           
    // ...
    // 更新循环计时器变量
  }
}

do...while...

无论判断条件是否成立都会先执行一边,然后再判断是否需要重复

dart
void main() {
  do {                      
    // ...
  } while (条件) {
    // ...
  }
}

for...

dart
void main() {
  for (let 循环计时器变量 = 初始值; 判断循环计时器; 更新循环计时器) {   
    // ...
  }
}

for...in...

异常处理

try...catch...

dart
void main() {
  try {                         
    // ...
  } catch (e) {
    // ...
  }
}

try...catch...finally

dart
void main() {
  try {                         
    // ...
  } catch (e) {
    // ...
  } finally {
    // ...
  }
}

try...on...

dart
void main() {
  try {                         
    // ...
  } on 异常类 {
    // ...
  }
}

try...on catch...

dart
void main() {
  try {                         
    // ...
  } on 异常类 {
    // ...
  } on Exception catch (e) {
    // ...
  } catch (e) {
    // ...
  }
}

try...on catch...finally

dart
void main() {
  try {                         
    // ...
  } on 异常类 {
  // ...
  } on Exception catch (e) {
    // ...
  } catch (e) {
    // ...
  } finally {
    // ...
  }
}

throw

dart
void main() {
  throw 异常类();               
  throw 异常类("自定义信息");
}