Найти в Дзене
Kuprion

Dart: вспомним основы языка

Итак, давайте кратко разберёмся, что такое Dart и с чем его едят. Если вы уже когда-то открывали официальную документацию Dart, но это было давно (или не было вообще), то вот суть:
Dart - однопоточный компилируемый язык программирования со строгой типизацией. Это означает, что при написании кода мы явно указываем типы данных и соблюдаем правила, а большинство ошибок ловится ещё на этапе компиляции, а не в рантайме. String - строки, обычный текст.
Пишутся в одинарных или двойных кавычках, но сейчас чаще используют одинарные:
```
String name = 'Alice';
``` int - целые числа: ```
int age = 25;
``` double - числа с плавающей точкой (любой результат деления - double): ```
double price = 19.99;
``` bool - логические значения: ```
bool isActive = true;
``` Runes - работа с Unicode-символами (эмодзи, редкие символы). Используется редко. Symbol - служебный тип для метапрограммирования и отражения (в обычном коде почти не встречается). Object - базовый родительский класс почти для всего в Dart.
Оглавление
What is Dart?
What is Dart?

Итак, давайте кратко разберёмся, что такое Dart и с чем его едят.

Если вы уже когда-то открывали официальную документацию Dart, но это было давно (или не было вообще), то вот суть:
Dart - однопоточный компилируемый язык программирования со строгой типизацией.

Это означает, что при написании кода мы явно указываем типы данных и соблюдаем правила, а большинство ошибок ловится ещё на этапе компиляции, а не в рантайме.

Типы данных в Dart

String - строки, обычный текст.
Пишутся в одинарных или двойных кавычках, но сейчас чаще используют одинарные:

```
String name = 'Alice';
```

int - целые числа:

```
int age = 25;
```

double - числа с плавающей точкой (любой результат деления - double):

```
double price = 19.99;
```

bool - логические значения:

```
bool isActive = true;
```

Runes - работа с Unicode-символами (эмодзи, редкие символы). Используется редко.

Symbol - служебный тип для метапрограммирования и отражения (в обычном коде почти не встречается).

Object - базовый родительский класс почти для всего в Dart.

Null - отдельный тип, введённый вместе с null-safety в Dart 3.
Позволяет явно указать, что переменная может не иметь значения:

```
String name = 'Alice'; // ок
String name; // ошибка
String? name; // ок, может быть null
```

Коллекции

List - упорядоченный список элементов:

```
List<int> numbers = [1, 2, 3];
```

Set - множество уникальных значений, порядок не гарантирован:

```
Set<String> fruits = {'apple', 'banana'};
```

Map - словарь (ключ → значение):

```
Map<String, int> scores = {'Alice': 10};
```

Enum

enum - перечисление фиксированного набора значений:

```
enum Status { loading, success, error }
```

Удобно использовать для состояний, режимов и ограниченных наборов значений.

Асинхронность

Future и Stream используются для асинхронного программирования.
Это не многопоточность, а работа с отложенными и потоковыми данными:

```Future<String> loadData() async {
return 'data';
}
```

Специальные типы

Never - функция никогда не завершится корректно (например, всегда выбрасывает ошибку).

dynamic - тип неизвестен заранее (отключает проверку типов).

void - функция ничего не возвращает.

Переменные и late

Переменную нужно объявить до использования.
Если значение будет задано позже, используется late:

late String token;

void init() {
token = 'abc123';
}

late говорит компилятору: «переменная будет инициализирована позже».

Классы и ООП в Dart

Dart - объектно-ориентированный язык. Всё строится вокруг классов.

Пример простого класса:

```
class Car {
int wheels;
String color;

Car(this.wheels, this.color);

void drive() {
print('Машина едет');
}
}
```

Создание экземпляра класса:

```
var car = Car(4, 'red');
car.drive();
```

Наследование

Все классы (кроме Null) в итоге наследуются от Object.

Наследование осуществляется через extends:

```
class Truck extends Car {
int loadCapacity;

Truck(int wheels, String color, this.loadCapacity)
: super(wheels, color);
}
```

Важно:

  • при наследовании класс получает все поля и методы родителя;
  • методы можно переопределять, но «не наследовать что-то выборочно» нельзя.

Итог

Dart - строгий, понятный и предсказуемый язык.
Если разобраться с типами, null safety и базовым ООП, дальше вход во Flutter становится значительно проще.

Следующий логичный шаг - виджеты, состояние и архитектура Flutter-приложений, но об этом поговорим в следующий раз.