Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 830новых вакансий за сутки·91 092вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 123
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 095
  • Облачные технологии14 051
  • QA вакансии3 444
  • Backend вакансии2 068
  • Инженер данных1 788
  • Продакт-менеджер1 248

Разработка

  • Android1 861
  • iOS1 696
  • Fullstack вакансии965
  • AI вакансии945
  • Frontend вакансии734
  • Mobile вакансии44

По стеку

  • Go8 640
  • Java6 537
  • Node.js2 013
  • .NET1 704
  • Kotlin1 619
  • Rust1 456
  • C#703
  • PHP680
  • C++566

DevOps и инфраструктура

  • Kubernetes7 740
  • DevOps вакансии6 038
  • Linux-инфраструктура5 481
  • Terraform / IaC4 255
  • CI/CD3 214
  • Мониторинг и Observability1 775
  • SRE565
  • Кибербезопасность445

Аналитика и данные

  • Data Scientist1 121
  • Бизнес-аналитик930
  • Аналитик данных838
  • Системный аналитик154

Другие направления

  • Проджект-менеджер605
  • UI/UX дизайн142
  • Ручное тестирование14

По регионам

  • Вакансии в США43 023
  • Вакансии в Европе23 282
  • Вакансии в Канаде4 294
  • Работа в России3 910

По формату

  • Удалённые вакансии72 436
  • Релокация в США43 022
  • Гибридная работа12 399
  • Офисная работа7 085

По уровню

  • Senior вакансии41 615
  • Middle вакансии20 102
  • Junior вакансии6 553

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML165 вакансий
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме DartВсе вопросы
DartMiddleКодинг

Что такое cascade operator (..) в Dart и как он работает?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Cascade operator (..) в Dart позволяет вызывать цепочку методов и присваивать свойства одного объекта без повторного указания его имени, возвращая исходный объект; null-aware вариант ?.. пропускает цепочку целиком, если объект равен null.

Синтаксис и семантика

Без cascade:

final paint = Paint();
paint.color = Colors.blue;
paint.strokeWidth = 2.0;
paint.style = PaintingStyle.stroke;

С cascade:

final paint = Paint()
  ..color = Colors.blue
  ..strokeWidth = 2.0
  ..style = PaintingStyle.stroke;

Оба фрагмента эквивалентны, но второй лаконичнее. Dart-компилятор сворачивает cascade в те же операции присваивания — никакого дополнительного overhead нет.

Что такое cascade operator

Cascade operator (..) — синтаксический сахар в Dart, позволяющий выполнять цепочку операций над одним объектом без повторного указания его имени. Результатом всего выражения остаётся исходный объект, а не результат последнего вызова метода.

Оператор .. передаёт левый операнд через каждый шаг цепочки и в конце возвращает его же. Это особенно удобно при конфигурировании объектов, построении билдеров и настройке виджетов Flutter.

Runnable пример

import 'dart:io';

class HttpRequestBuilder {
  String method = 'GET';
  String url = '';
  final Map<String, String> headers = {};
  String? body;

  void send() {
    stdout.writeln('$method $url');
    headers.forEach((k, v) => stdout.writeln('  $k: $v'));
    if (body != null) stdout.writeln('  body: $body');
  }
}

void main() {
  HttpRequestBuilder()
    ..method = 'POST'
    ..url = 'https://api.example.com/jobs'
    ..headers['Content-Type'] = 'application/json'
    ..headers['Authorization'] = 'Bearer token123'
    ..body = '{"title": "Flutter Developer"}'
    ..send();
}

Здесь send() вызывается как последний шаг цепочки, но переменная всё равно хранит ссылку на HttpRequestBuilder, а не на void.

Null-aware cascade (.?..)

Dart 2.12 добавил null-aware вариант ?... Если объект равен null, вся цепочка пропускается:

List<int>? maybeList;
maybeList
  ?..add(1)
  ..add(2);  // не выполнится, если maybeList == null

Cascade с коллекциями

final buffer = StringBuffer()
  ..write('Hello')
  ..write(', ')
  ..write('World')
  ..writeln('!');
print(buffer.toString()); // Hello, World!

final list = <String>[]
  ..add('dart')
  ..addAll(['flutter', 'firebase'])
  ..sort();
print(list); // [dart, firebase, flutter]

Отличие от method chaining

Method chaining (Builder pattern) требует, чтобы каждый метод возвращал this или новый объект. Cascade работает с любым объектом — даже если методы возвращают void или другой тип. Это делает его совместимым с существующими API без изменения их сигнатуры.

Подводные камни

  • Возвращаемое значение теряется. Если метод возвращает важный результат (например, индекс вставки или Future), он молча игнорируется в цепочке. Используйте cascade только с void-методами или сеттерами.
  • Смешивание cascade и присваивания. Выражение a = b..c() присваивает a объект b после вызова c(), а не результат c(). Приоритет операторов здесь неочевиден.
  • Cascade на temporary object без сохранения. Foo()..doSomething() создаёт объект, вызывает метод и сразу выбрасывает объект в GC — типичная ошибка, когда забывают присвоить результат переменной.
  • Глубокое вложение снижает читаемость. Несколько уровней вложенных cascade-выражений трудно читать и отлаживать; лучше разбить на именованные переменные.
  • Null-aware cascade и non-null ветки. После ?.. все следующие шаги тоже должны использовать .., а не ?..</code> — компилятор это не принудит, но поведение будет неожиданным, если объект оказался null на середине цепочки.
  • Проблемы с hot reload в Flutter. Cascade, использующийся для конфигурирования глобальных синглтонов или сервис-локаторов (например, GetIt), может приводить к повторной регистрации при hot reload — это выбрасывает исключение.
  • Отладка пошаговая затруднена. Отладчик в VS Code и IntelliJ не всегда позволяет поставить breakpoint на конкретный шаг cascade; часто приходится разворачивать цепочку в отдельные операторы для диагностики.
  • Несовместимость с const. Cascade нельзя применять к const-объектам, так как предполагает мутацию. Попытка использовать .. с const-значением приведёт к ошибке компиляции.

Частые вопросы на собеседовании

  • В чём разница между var, dynamic и явными типами в Dart?
  • Как работает null safety в Dart? В чём разница между ?, ! и ???
  • Что такое isolates в Dart и чем они отличаются от потоков (threads)?
  • В чём разница между Future и Stream в Dart?

Типичные ошибки

  • Сводить «cascade operator (..) в Dart и как он работает» к синтаксису и не объяснять Future и Stream.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии dart-17.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

Что проверяет интервьюер

  • Формулирует точную модель для «cascade operator (..) в Dart и как он работает» и подтверждает ее корректным примером.
  • Умеет связать ответ с isolate, тестированием и отладкой на устройстве.
  • Называет ограничения подхода dart-17, включая производительность, память и сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Dart →

Источники

  • https://dart.dev/language/operators
←Предыдущий вопросЧто такое `collection if` и `collection for` в Dart?Следующий вопрос→Расскажите о случае, когда особенности Dart повлияли на архитектурное решение, производительность или сопровождение проекта.

Связанные темы

Dartimplementation-reasoningMobile-Engineering