Читать: 10 мин

Большой релиз Dart 3: что нового в языке от Google

Большой релиз Dart 3: что нового в языке от Google

Вышел Dart 3 с полной null-безопасностью, большими возможностями для записей, паттернов и модификаторов классов. В этой статье рассказываем подробнее об этих обновлениях.

Google представил сразу два релиза: Flutter 3.10 (читайте наш перевод) и Dart 3 с тремя ключевыми улучшениями:

  • 100% null-безопасность;
  • новые языковые возможности (записи, паттерны и модификаторы классов);
  • улучшенная поддержка платформ с нативным кодом и WebAssembly.

Рассмотрим эти улучшения подробнее.

100% null-безопасность

Версия Dart 3 обеспечивает 100% надежную null-безопасность и очистку основной библиотеки и инструментов. Null-безопасность помогает избежать ошибок из-за null во время работы, обеспечивает меньший размер скомпилированного исходного кода и повышает производительность. Большинство пакетов на pub.dev поддерживают null safety.

При полной null-безопасности если значение не равно null, то оно никогда не будет null. Теперь можно оптимизировать код так, как это было невозможно без null-безопасности.

«Это важная веха в развитии Dart. Теперь язык очищен от лишних проверок и более оптимизирован».
Юрий Петров, Flutter Team Lead, Friflex

Записи, паттерны и модификаторы классов

В Dart 3 появились новые возможности, которые делают его более выразительным при работе с records и patterns. Ожидается, что эти функции будут востребованы у всех пользователей Dart.

«Мне очень понравились новые возможности. Теперь стало удобнее создавать методы, которые должны возвращать два значения. Самый простой пример — функция, которая возвращает текущее положение пользователя в виде двух координат».
Юрий Петров, Flutter Team Lead, Friflex

Records позволяет создавать структурированные данные с красивым и лаконичным синтаксисом. Например, ниже функция считывает имя и возраст из JSON и возвращает два параметра в записи:

(String, int) userInfo(Map<String, dynamic> json) {
 return (json['name'] as String, json['height'] as int);
}

Patterns позволяют разбивать структурированные данные на отдельные элементы. Паттерны отлично работают в операторе switch, который тоже доработан в Dart 3. Также теперь не надо указывать оператор break.

switch (charCode) {
 case slash when nextCharCode == slash:
 skipComment();

 case slash || star || plus || minus:
 operator(charCode);

 case >= digit0 && <= digit9:
 number();

 default:
 invalid();
}

Patterns могут проверять исчерпываемость — это значит, что switch обрабатывает все случаи, которые возможны.

sealed class Animal { … }
class Cow extends Animal { … }
class Sheep extends Animal { … }
class Pig extends Animal { … }

String whatDoesItSay(Animal a) =>
 switch (a) { Cow c => '$c says moo', Sheep s => '$s says baa' };
«Switch теперь стал намного удобнее. Самое главное, что в case можно указывать дополнительные условия и использовать switch как возвращаемое значение с оператором return. Теперь будем ждать от разработчиков Dart возможность возвращать if и try/catch».
Юрий Петров, Flutter Team Lead, Friflex

Условия if тоже могут использовать паттерны:

final json = {'name': 'Michael', 'height': 180};

// Find Michael's height.
if (json case {'name': 'Michael', 'height': int h}) {
 print('Michael is $h cm tall.');
} else {
 print('Error: json contains no height info for Michael!');
}

Модификаторы классов будут полезны для опытных разработчиков, которые создают большие API или производительные приложения.

С помощью модификаторов классов можно добавлять ограничения:

  • interface class ограничивает создание расширений, но при этом можно создать реализацию;
  • base class ограничивает создание реализации, но при этом можно создать расширение. Все подклассы должны быть с модификатором base;
  • final class ограничивает создание реализации и расширений;
  • sealed class ограничивает создание реализации и расширений, но только если доступ к такому классу запрашивается из другого файла;
  • mixin class позволяет «миксовать» (смешивать) класс с другими.

Улучшенная поддержка WebAssembly

Разработчики Dart работали над компиляцией Dart в бинарный формат Wasm, чтобы ускорить загрузку в браузере и повысить производительность веб-приложений. Компиляция Dart в Wasm сейчас находится в стадии предварительного просмотра. Для этого нужен браузер, поддерживающий WasmGC.

Dart 3 доступен в Dart SDK и Flutter 3.10 SDK.

Подробнее о новых фичах Dart 3 Юрий Петров, Flutter Team Lead в Friflex, рассказывает в видео на ютуб-канале «Мобильный разработчик».

Поделиться:

Logo

Читайте также

01  
 
panda
Есть идея? Напишите нам! Заполнить бриф