betacode

Циклы в Dart

  1. Что такое цикл?
  2. Цикл for
  3. Цикл for..in
  4. Цикл while
  5. Цикл do..while
  6. Инструкция break в цикле
  7. Инструкция continue в цикле
  8. Помеченные Loops

1. Что такое цикл?

В языках программирования циклы позволяют многократно выполнять блок кода.
Язык Dart предоставляет следующие типы циклов:
  • for
  • for..in
  • while
  • do..while
Инструкции (statement) break и continue могут появляться внутри цикла:
break
При обнаружении инструкции break программа немедленно завершит цикл.
continue
При обнаружении инструкции continue программа пропустит строки ниже инструкции continue и выполнит следующую итерацию (если условие цикла все еще верно).

2. Цикл for

Синтаксис цикла for:
for (initialValues; condition; updateValues) {
    // Statements to be executed repeatedly
}
  • InitialValues: Инициализируйте значения для связанных переменных в цикле.
  • condition: Условие для выполнения блока.
  • updateValues: Обновите новые значения переменных.
Например:
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
Например: Две переменные участвуют в условии цикла 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. Цикл for..in

Цикл for..in используется для перебора элементов объекта t Iterable.
В языке программирования Dart, List является потомком of Iterable, который обладает той же функцией, что и массив других языков программирования.
Например: Используйте for..in цикл для перебора элементов of 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
Например: Используйте for..in цикл для перебора элементов объекта 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. Цикл while

Синтаксис цикла while:
while (condition)  {
    // Do something here..
}
Например:
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. Цикл do..while

Цикл do..while используется для многократного выполнения сегмента программы. Особенностью do..while является то, что блок кода всегда выполняется хотя бы один раз. После каждой итерации (iteration), программа снова проверяет условие, если условие по-прежнему верно, будет выполнена следующая итерация.
Синтаксис цикла do..while:
do {  
   // Do something
}
while(condition);
Например:
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. Инструкция break в цикле

break - это инструкция, которая может появляться в блоке цикла. Это инструкция для безусловного завершения цикла.
Например:
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. Инструкция continue в цикле

continue - это инструкция, которая может появляться в цикле. При обнаружении инструкции continue программа пропустит строки ниже инструкции continue и начнет новую итерацию (если условие все еще выполняется).
Например:
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. Помеченные Loops

Dart позволяет вам поставить метку (Label) для цикла. Это способ назвать цикл, и он удобен при использовании нескольких вложенных циклов в программе.
  • Вы можете использовать инструкцию "break labelX", чтобы break цикл с надписью labelX.
  • Вы можете использовать инструкцию "continue labelX", чтобы continue цикл с меткой labelX.
Синтаксис для объявления цикла с метками.
// for loop with Label.
label1: for( ... )  {
    
}
// while loop with Label.
label2: while ( ... )  {

}
// do-while loop with Label.
label3: do  {
    
} while ( ... );
Например: Используйте помеченные циклы и инструкцию 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!
Например: Используйте помеченные циклы и инструкцию 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