Какие особенности языка Dart ты знаешь?

«Какие особенности языка Dart ты знаешь?» — вопрос из категории Dart Core, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. Null Safety (по умолчанию): Типы не допускают null по умолчанию. Для nullable-типов используется суффикс ?.

String name = 'Alice'; // Не может быть null
String? nickname = null; // Может быть null

2. Операторы для работы с null:

  • ?? (оператор если-null): String displayName = nickname ?? name;
  • ?. (условный доступ): int? length = nickname?.length;
  • ! (оператор утверждения non-null): String sureName = nickname!; // Может выбросить исключение

3. Функции как объекты первого класса и лямбда-выражения:

void printMessage(String msg) => print(msg);
Function logger = printMessage;

// Лямбда
final multiply = (int a, int b) => a * b;

4. Mixins для повторного использования кода: Позволяют добавлять функциональность в классы без использования наследования.

mixin ValidationMixin {
  bool isValidEmail(String email) => email.contains('@');
}

class UserForm with ValidationMixin {}

5. Асинхронность через Future и async/await:

Future<String> fetchUserData() async {
  final response = await http.get(Uri.parse('https://api.example.com/user'));
  return response.body;
}

6. Генераторы для ленивых последовательностей:

Iterable<int> getRange(int start, int end) sync* {
  for (int i = start; i <= end; i++) {
    yield i;
  }
}

7. Изоляты (Isolates) для параллелизма: Вместо потоков Dart использует изоляты с разделяемой памятью, что исключает состояние гонки.