openplanning

Vòng lặp trong Dart

  1. Vòng lặp là gì?
  2. Vòng lặp for
  3. Vòng lặp for..in
  4. Vòng lặp while
  5. Vòng lặp do..while
  6. Lệnh break trong vòng lặp
  7. Lệnh continue trong vòng lặp
  8. Vòng lặp được dán nhãn

1. Vòng lặp là gì?

Trong các ngôn ngữ lập trình, vòng lặp cho phép một khối mã được thực thi lặp đi lặp lại nhiều lần.
Ngôn ngữ Dart cung cấp các loại vòng lặp sau:
  • for
  • for..in
  • while
  • do..while
Các câu lệnh (statement) breakcontinue có thể xuất hiện bên trong vòng lặp:
break
Khi bắt gặp lệnh break chương trình sẽ kết thúc vòng lặp ngay lập tức.
continue
Khi bắt gặp lệnh continue chương trình sẽ bỏ qua các dòng lệnh phía dưới của continue và thực thi bước lặp tiếp theo (Nếu điều kiện của vòng lặp vẫn đúng).

2. Vòng lặp for

Cú pháp của vòng lặp for:
for (initialValues; condition; updateValues) {
    // Statements to be executed repeatedly
}
  • InitialValues: Khởi tạo giá trị cho các biến liên quan trong vòng lặp.
  • condition: Điều kiện để thực hiện khối lệnh.
  • updateValues: Cập nhập giá trị mới cho các biến.
Ví dụ:
loop_for_ex1.dart
void main() {
  print('For loop example');
 
  for (var i = 0; i < 10; i = i + 3) {
    print('i= $i');
  }
}
Output:
For loop example
i= 0
i= 3
i= 6
i= 9
Ví dụ: 2 biến tham gia vào điều kiện của một vòng lặp for:
loop_for_ex2.dart
void main() {
  print('For loop example');

  for (var i = 0, j = 0; i + j < 10; i = i + 1, j = j + 2) {
    print('i = $i, j = $j');
  }
}
Output:
For loop example
i = 0, j = 0
i = 1, j = 2
i = 2, j = 4
i = 3, j = 6

3. Vòng lặp for..in

Vòng lặp for..in được sử dụng để lặp trên các phần tử của một Iterable.
Trong ngôn ngữ lập trình Dart, List là một lớp hậu duệ của Iterable, nó có tính năng tương tự như một mảng của các ngôn ngữ lập trình khác.
Ví dụ: Sử dụng vòng lặp for..in để lặp trên các phần tử của một List:
loop_for_in_list_ex1.dart
void main() {
  // Create a List:
  var names = ['Tom', 'Jerry', 'Donald'];
 
  for (var name in names) {
    print('name: $name');
  }
}
Output:
name: Tom
name: Jerry
name: Donald
Ví dụ: Sử dụng vòng lặp for..in để lặp trên các phần tử của một đối tượng Set.
loop_for_in_set_ex1.dart
void main() {
  // Create a Map object:
  // (key, value) <--> (Emloyee Number, Salary).
  var salaryMap = {'E01': 1200,
                   'E02': 1500,
                  'E03': 900};
  // The Set object.
  var keySet = salaryMap.keys;

  for (var key in keySet) {
    print('Employee Number: $key, salary: ${salaryMap[key]}');
  }
}
Output:
Employee Number: E01, salary: 1200
Employee Number: E02, salary: 1500
Employee Number: E03, salary: 900

4. Vòng lặp while

Cú pháp vòng lặp while:
while (condition)  {
    // Do something here..
}
Ví dụ:
loop_while_ex1.dart
void main() {
  print('While loop example');
  var x = 2;
  while (x < 10) {
    print('Value of x = $x');
    x = x + 3;
  }
  print('Done!');
}
Output:
While loop example
Value of x = 2
Value of x = 5
Value of x = 8
Done!

5. Vòng lặp do..while

Vòng lặp do..while được sử dụng để thực thi một đoạn chương trình nhiều lần. Đặc điểm của do..while là khối lệnh luôn được thực thi ít nhất một lần. Sau mỗi bước lặp (iteration), chương trình lại kiểm tra lại điều kiện, nếu điều kiện vẫn còn đúng bước lặp tiếp theo sẽ được thực thi.
Cú pháp vòng lặp do..while:
do {  
   // Do something
}
while(condition);
Ví dụ:
loop_do_while_ex1.dart
void main() {
  var value = 3;
  do {
    print('Value = $value');
    value = value + 3;
  } while (value < 10);
}
Output:
Value = 3
Value = 6
Value = 9

6. Lệnh break trong vòng lặp

break là một lệnh có thể xuất hiện trong khối lệnh của một vòng lặp. Đây là lệnh kết thúc vòng lặp vô điều kiện.
Ví dụ:
loop_break_ex1.dart
void main() {
  print('Break example');
  var x = 2;
  while (x < 15) {
    print('----------------------');
    print('x = $x');
    // If y = 5 then exit the loop.
    if (x == 5) {
      break;
    }
    // Increase value of x by 1
    x = x + 1;
    print('x after + 1 = $x');
  }
  print('Done!');
}
Output:
Break example
----------------------
x = 2
x after + 1 = 3
----------------------
x = 3
x after + 1 = 4
----------------------
x = 4
x after + 1 = 5
----------------------
x = 5
Done!

7. Lệnh continue trong vòng lặp

continue là một lệnh có thể xuất hiện trong một vòng lặp. Khi bắt gặp lệnh continue chương trình sẽ bỏ qua các dòng lệnh phía dưới của continuevà bắt đầu một bước lặp mới (Nếu điều kiện vẫn đúng).
Ví dụ:
loop_continue_ex1.dart
void main() {
  print('Continue example');
  var x = 2;
  while (x < 7) {
    print('----------------------');
    print('x = $x');

    if (x % 2 == 0) {
      x = x + 1;
      continue;
    } else {
      x = x + 1;
      print('x after + 1 = $x');
    }
  }
  print('Done!');
}
Output:
Continue example
----------------------
x = 2
----------------------
x = 3
x after + 1 = 4
----------------------
x = 4
----------------------
x = 5
x after + 1 = 6
----------------------
x = 6
Done!

8. Vòng lặp được dán nhãn

Dart cho phép bạn dán một nhãn (Label) cho một vòng lặp. Đây là cách để đặt tên cho một vòng lặp và có ích khi bạn sử dụng nhiều vòng lặp lồng nhau trong một chương trình.
  • Bạn có thể sử dụng câu lệnh "break labelX" để break vòng lặp được dán nhãn labelX.
  • Bạn có thể sử dụng câu lệnh "continue labelX" để continue vòng lặp được dán nhãn labelX.
Cú pháp khai báo một vòng lặp với nhãn.
// for loop with Label.
label1: for( ... )  {
    
}
// while loop with Label.
label2: while ( ... )  {

}
// do-while loop with Label.
label3: do  {
    
} while ( ... );
Ví dụ: Sử dụng các vòng lặp được dán nhãn và lệnh break.
loop_break_labelled_ex1.dart
void main() {
  print('Labelled Loop Break example');
  var i = 0;
  label1:
  while (i < 5) {
    print('----------------------');
    print('i = $i');
    i++;
    label2:
    for (var j = 0; j < 3; j++) {
      print('  --> $j');
      if (j > 0) {
        // Exit the loop with label1.
        break label1;
      }
    }
  }
  print('Done!');
}
Output:
Labelled Loop Break example
----------------------
i = 0
  --> 0
  --> 1
Done!
Ví dụ: Sử dụng các vòng lặp được dán nhãn và lệnh continue.
loop_continue_labelled_ex1.dart
void main() {
  var i = 0;
  label1:
  while (i < 5) {
    print('outer i=  $i');
    i++;
    label2:
    for (var j = 0; j < 3; j++) {
      if (j > 0) {
        continue label2;
      }
      if (i > 1) {
        continue label1;
      }
      print('inner i= $i, j= $j');
    }
  }
}
Output:
outer i=  0
inner i= 1, j= 0
outer i=  1
outer i=  2
outer i=  3
outer i=  4