こんにちは。エキサイトでアプリエンジニアをしている岡島です。エキサイトホールディングス Advent Calendar 2024の17日目を担当させていただきます。
最近Dart 3.6がリリースされたので、Dart 3.6について見ていきたいと思います。また、DartのCHANGELOGで、Dart 3.7.0で追加される言語機能が紹介されていたので、まとめていきたいと思います。
Dart 3.6の新機能
Announcing Dart 3.6. Welcome to Dart 3.6! Today is our last… | by Marya Belanger | Dart | Dec, 2024 | Mediumで紹介されていますが、日本語訳をしながらまとめていきたいと思います!
Pub workspaces機能
モノレポ環境での依存関係の管理を効率化する新機能です。
このPub workspacesの機能によって、グループ化されたパッケージ間の依存関係の競合が発生したときに解決する必要があり、パッケージの使用時に混乱することがなくなります。また、ワークスペース全体を単一の解析コンテキストとして扱われるようになり、Dart言語サーバーの消費メモリ量が大幅に削減され、IDEのパフォーマンスが向上するようです。
Pub workspacesを定義するには、ルートのpubspec.yaml
ファイルにworkspace
フィールドを追加し、関連するパッケージを記述します。
name: _ publish_to: none environment: sdk: ^3.6.0 workspace: - packages/helper - packages/client_package - packages/server_package
次に、リポジトリ内の任意の場所で実行pub get
して、マッピングと残りのファイル管理を完了します。pub ワークスペースを使用するには、すべてのワークスペースパッケージ(依存関係を除く)のSDKバージョン制約が^3.6.0
以上である必要があります。
pub.devのダウンロード数表示
pub.devでダウンロード数が確認できるようになりました。
ダウンロード数は、個々のパッケージページにおける以前の「人気スコア」に置き換わるものです。 週ごとのダウンロード数も時系列で示されます。
Digit Separators
長い数値リテラルの可読性を向上させるために、 アンダースコア(_)を数値の区切り文字として使用できるようになりました。
以下、例です。
1__000_000__000_000__000_000 0x4000_0000_0000_0000 0.000_000_000_01 0x00_14_22_01_23_45
Digit Separatorsは数字間でのみ有効であるため、 0._000_1
、1.2e_3
や100_
などは使用できないことに注意してください。
Digit Separatorsを使用するには、パッケージ内の最小SDKを^3.6.0
以上にする必要があります。
Dart 3.7で追加予定の機能
ここから先はhttps://github.com/dart-lang/sdk/blob/main/CHANGELOG.md#370に記載されている、Dart 3.7.0の言語機能について共有していきます。
ワイルドカード変数 (Wildcard Variables)
ローカル変数やパラメーターとして_
という名前を使用することで、 非バインディング変数を作成できるようになります。ワイルドカード変数はバインディングされないため、ワイルドカード変数を複数回宣言しても、名前衝突することなく、宣言できるようになります。
以下ワイルドカード変数を使用できる例:
Foo(_, this._, super._, void _()) {} main() { var _ = 1; int _ = 2; list.where((_) => true); }
その他、Nullへの型昇格やAnalyzerやDart formatの変更点がありますが、Dart 3.7の主な機能追加はワイルドカード変数のようです。
最後に
今回はDart 3.6がリリースされたので、こちらの記事を元に記事を書いてみました。このような言語機能追加のMotibationを読んでみると、確かにそうだと思う部分があり、勉強になりました。
最後まで読んでいただきありがとうございました。