Sobes.tech
Назад к вопросам
Junior — Middle
100

Чем отличаются объекты Stream и Future в контексте асинхронного программирования?

Компании, где спрашивали
Другойкод

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Future — это результат одной асинхронной операции: он завершится один раз и либо вернёт значение, либо ошибку. Stream — это последовательность событий во времени: он может отдавать много значений, ошибки и сигнал завершения. В Flutter Future используют для одиночных запросов, а Stream — для обновлений, событий и непрерывных данных.

Определение:

Future представляет одно значение, которое станет доступно позже. Это удобно для операций вроде загрузки данных, чтения файла или выполнения запроса к API.

Stream представляет поток событий, которые приходят последовательно. Он подходит для случаев, когда данные могут обновляться много раз: ввод пользователя, изменения в базе, WebSocket, таймеры.

Пример использования:

// Future: один запрос
Future<String> loadUserName() async {
  await Future.delayed(const Duration(seconds: 1));
  return 'Alex';
}

// Stream: несколько значений во времени
Stream<int> counter() async* {
  for (var i = 1; i <= 3; i++) {
    await Future.delayed(const Duration(seconds: 1));
    yield i;
  }
}

loadUserName() вернёт одно значение один раз.
counter() будет выдавать значения 1, 2, 3 по мере их появления.

Пояснение кода:

Future<String>:

  • async делает функцию асинхронной.
  • await Future.delayed(...) имитирует ожидание операции.
  • return 'Alex' завершает Future единственным результатом.

Stream<int>:

  • async* объявляет генератор потока.
  • yield i отправляет очередное значение в поток.
  • После последнего yield поток завершается.

На практике Future обычно обрабатывают через await или .then(), а Stream — через listen(), StreamBuilder или await for.

Ключевые моменты:

  • Future = одно асинхронное значение в будущем.
  • Stream = много значений по мере их появления.
  • Future завершается один раз, Stream может эмитить события многократно.
  • Future чаще используют для запросов/загрузки данных, Stream — для подписок и обновлений.
  • У Stream есть события успеха, ошибки и завершения.
  • В Flutter для UI Stream часто удобно подключать через StreamBuilder, а Future — через FutureBuilder.