← Назад к вопросам

Что такое while в Dart?

1.6 Junior🔥 172 комментариев
#Dart

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

While в Dart

While — это цикл (loop), который повторяет блок кода пока выполняется определённое условие. Когда условие становится ложным, цикл прерывается.

Синтаксис While

while (условие) {
  // код, который будет повторяться
}

Порядок выполнения:

  1. Проверка условия
  2. Если условие истинно — выполнить код в блоке
  3. Повторить с пункта 1
  4. Если условие ложно — выход из цикла

Простой пример

int counter = 0;
while (counter < 5) {
  print('Counter: $counter');
  counter++;
}

// Вывод:
// Counter: 0
// Counter: 1
// Counter: 2
// Counter: 3
// Counter: 4

Практические примеры

Пример 1: Ввод данных пока не введено правильное значение

String? getUserInput() {
  String? input;
  while (input == null || input.isEmpty) {
    print('Пожалуйста, введите что-то:');
    input = stdin.readLineSync();
    
    if (input == null || input.isEmpty) {
      print('Ошибка: текст не может быть пустым!');
    }
  }
  return input;
}

Пример 2: Обработка списка

void printList(List<int> numbers) {
  int index = 0;
  while (index < numbers.length) {
    print('Элемент $index: ${numbers[index]}');
    index++;
  }
}

final numbers = [10, 20, 30, 40];
printList(numbers);

// Вывод:
// Элемент 0: 10
// Элемент 1: 20
// Элемент 2: 30
// Элемент 3: 40

Пример 3: Поиск элемента

int findElement(List<int> list, int target) {
  int index = 0;
  while (index < list.length) {
    if (list[index] == target) {
      return index;
    }
    index++;
  }
  return -1; // Не найдено
}

final numbers = [5, 12, 8, 23, 15];
print(findElement(numbers, 23)); // Вывод: 3
print(findElement(numbers, 100)); // Вывод: -1

Do-While цикл

Do-while отличается от while тем, что код в блоке выполняется сначала, а потом проверяется условие. Этот цикл выполнится минимум один раз:

do {
  // код, который будет повторяться
} while (условие);

Пример do-while

int count = 0;
do {
  print('Повтор: $count');
  count++;
} while (count < 3);

// Вывод:
// Повтор: 0
// Повтор: 1
// Повтор: 2

Управление циклом: break и continue

Break — выход из цикла

int i = 0;
while (i < 10) {
  if (i == 5) {
    break; // Выходим из цикла
  }
  print(i);
  i++;
}

// Вывод:
// 0
// 1
// 2
// 3
// 4

Continue — переход к следующей итерации

int i = 0;
while (i < 5) {
  i++;
  if (i == 3) {
    continue; // Пропускаем итерацию
  }
  print(i);
}

// Вывод:
// 1
// 2
// 4
// 5

While в Flutter приложениях

Пример: валидация пароля

class PasswordValidator {
  static String? validatePassword(String password) {
    int index = 0;
    bool hasUppercase = false;
    bool hasLowercase = false;
    bool hasDigit = false;

    while (index < password.length) {
      final char = password[index];
      
      if (char.contains(RegExp(r'[A-Z]'))) {
        hasUppercase = true;
      }
      if (char.contains(RegExp(r'[a-z]'))) {
        hasLowercase = true;
      }
      if (char.contains(RegExp(r'[0-9]'))) {
        hasDigit = true;
      }
      
      index++;
    }

    if (!hasUppercase) return 'Требуется заглавная буква';
    if (!hasLowercase) return 'Требуется строчная буква';
    if (!hasDigit) return 'Требуется цифра';
    
    return null; // Валидно
  }
}

While vs For

While используется, когда количество итераций неизвестно заранее:

// While — количество итераций неизвестно
while (userInput != 'exit') {
  userInput = stdin.readLineSync() ?? '';
}

// For — количество итераций известно
for (int i = 0; i < 5; i++) {
  print(i);
}

Опасность бесконечного цикла

Осторожнее с while! Забыли обновить условие — получите бесконечный цикл:

// ОПАСНО! Бесконечный цикл
while (true) {
  print('Это будет вечно...');
  // Нет break!
}

// ПРАВИЛЬНО
while (true) {
  print('Что-то делаем');
  if (someCondition) {
    break; // Выход
  }
}

While — фундаментальный инструмент для работы с циклами в Dart, незаменим для итерации с неизвестным количеством повторений.

Что такое while в Dart? | PrepBro