Dart4Flutter – 02 –控制流 和異常

黃馬發表於2018-06-22

Dart4Flutter -01 – 變數, 型別和 函式

Dart4Flutter – 02 –控制流 和異常

Dart4Flutter – 03 – 類和泛型

Dart4Flutter – 04 – 非同步和庫

Dart4Flutter -拾遺01 - flutter-dart環境搭建

flutter入門 - 狀態管理

Flutter 入門例項1

Dart4Flutter – 02 –控制流 和異常

控制流

If – else

if-else 和其他語言一樣比較簡單。

main(List<String> args) {
  var number = 57;
 
  if (number > 100) {
    print('Large Number');
  } else if (number < 100) {
    print('Small Number');
  } else {
    print('Number is 100');
  }
}
複製程式碼

可以用三元運算子代替if-else

main(List<String> args) {
  int age = 60;
 
  String status = age < 50 ? "Still young" : "Old Man";
}
複製程式碼

迴圈

和其他大多數語言一樣,dart也支援各種的迴圈,而且語法一樣。

For 迴圈

典型的for迴圈。

main(List<String> args) {
  for (int i = 0; i < 10; i++) {
    print('$i');
  }
}
複製程式碼

While 迴圈

典型的while迴圈

main(List<String> args) {
  int i = 0;
  while(i < 10) {
    print('$i');
    i++;
  }
}
複製程式碼

Do-while 迴圈

The classic for do while loop. 典型的do while迴圈。

main(List<String> args) {
  int i = 0;
  do {
    print('$i');
    i++;
  } while (i < 10);
}
複製程式碼

Switch

main(List<String> args) {
  int age = 50;
 
  switch(age) {
    case 10:
      print('Too Young.');
      break;
    case 20:
    case 30:
      print('Still Young!');
      break;
    case 40:
      print('Getting old.');
      break;
    case 50:
      print('You are old!');
      break;
  }
}
複製程式碼

異常處理

dart 使用經典的try-catch處理異常,使用關鍵字throw丟擲一個異常。

丟擲異常

首先,看看如何丟擲異常

main(List<String> args) {
  divide(10, 0);
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new IntegerDivisionByZeroException();
  }
  return a / b;
}
複製程式碼

當b變數的值為0的時候,丟擲一個內建的異常IntegerDivisionByZeroException。

你也可以在異常中攜帶一個字串資訊。

main(List<String> args) {
  divide(10, 0);
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new Exception('Divide by zero');
  }
  return a / b;
}
複製程式碼

捕獲和處理異常

現在看看重點的捕獲和處理異常。

某種型別的異常可以通過on關鍵字捕獲,如下:

main(List<String> args) {
  try {
    divide(10, 0);
  } on IntegerDivisionByZeroException {
    print('Division by zero.');
  }
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new IntegerDivisionByZeroException();
  }
  return a / b;
}
複製程式碼

如果你不知道丟擲異常的型別,或者不確定,可以使用catch塊處理任意型別的異常。

main(List<String> args) {
  try {
    divide(10, 0);
  } on IntegerDivisionByZeroException {
    print('Division by zero.');
  } catch (e) {
    print(e);
  }
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new Exception('Some other exception.');
  }
  return a / b;
}
複製程式碼

Finally

dart也提供了finally塊,即是否發生異常這個塊都會執行。

main(List<String> args) {
  try {
    divide(10, 0);
  } on IntegerDivisionByZeroException {
    print('Division by zero.');
  } catch (e) {
    print(e);
  } finally {
    print('I will always be executed!');
  }
}
 
divide(int a, int b) {
  if (b == 0) {
    throw new Exception('Some other exception.');
  }
  return a / b;
}
複製程式碼

結束

下一講 Dart4Flutter – 03 – 類和泛型

參考

thetechnocafe.com/just-enough…

相關文章