58
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

Google I/O 2023が先日行われ、その中で注目すべき発表がありました。それは、Dart3の正式リリースです。Dartのメジャーアップデートは5年ぶりで、様々な新機能や改善が実施されました。その中でも今回注目したいのは、まさに"スイッチ"を入れる新機能、"switch式"です。

今までにswitch文で困ったことはありませんか?特に、enumを用いて変数に値を代入したいときには、このswitch式が非常に便利です。この記事では、その使い方を詳しく解説します。これからswitch式を使おうと考えている方、もしくはすでに使っていて少し混乱している方の役に立てれば幸いです。

使えるようになった!switch式のパワー

実際のプログラムでイメージを掴んでみましょう。以下のようなコード、書いてみたくなりますよね?

sample.dart
final favoriteAnimal = switch(selectedAnimalType){
    case AnimalType.dog:
        'いぬ';
        break;
    case AnimalType.cat:
        'ねこ';
        break;
    case AnimalType.bird:
        'とり';
        break;
}

ですが、このような書き方は従来のswitch文ではできませんでした。しかしDart3のリリースにより、switch式が導入されたことでこのような書き方ができるようになりました!
switch式を用いると、上記のコードは以下のように一新されます。

sample.dart
final favoriteAnimal = switch(selectedAnimalType){
    AnimalType.dog => 'いぬ',
    AnimalType.cat => 'ねこ',
    AnimalType.bird => 'とり',
}

単に変数への値の代入が容易になるだけでなく、コード自体も圧倒的にシンプルで読みやすくなりました。煩雑だったcaseやbreakといった記述を省くことができ、アロー関数を用いた直感的な表現が可能になったのです。

文から式へ:switch式の原理

ではなぜ従来はできなかった変数への代入ができるようになったのでしょうか?
それは、switchが文から式へと変わったからです。
文と式はプログラムをする上での基礎となる2つの概念です。
厳密には違うかもしれませんが、文とはif文やswitch文などの事を指し、アクションを実行するもので、式とは値を評価するものと理解していいと思います。

例えばif文ですが、これは条件分岐し、条件に応じたアクションを実行するものです。
図1.png

これに対し、式では式自体が評価され、評価された値に変化するというような理解です。
図2.png

switch式の頼もしい味方:網羅性チェック

switch式にはもう一つ素晴らしい特徴があります。それが「網羅性チェック」です。
switch式では、switchで分岐したいケースの処理を記述しているかをチェックし、カバーしていない場合はコンパイル時にエラーを出力してくれます。
そのため、enumに新たな値を追加した場合switch式にも処理を追加しない場合はエラーとなります。

条件の組み合わせ:AND条件、OR条件、デフォルトケースの書き方

switch式での&条件はor条件は以下のようにそれぞれ&&と||を使用して記載でき、デフォルトケースは_(アンダーバー)で記載します。

sample.dart
final favoriteAnimal = switch (selectedAnimalType) {
    AnimalType.dog && AnimalType.cat => 'いぬ & ねこ',
    AnimalType.bird || AnimalType.hippo => "とり or かば",
    _ => "デフォルトケース",
};

まとめ:switch式が開く新たな可能性

switch式を使用することで、パターンに応じた変数の代入やflutterでのwidget表示が非常に簡単になり、コードの可読性も向上します。
今回紹介した以外にもクラスを用いたパターンマッチやdart3で導入されたrecordを用いたパターンマッチなどでも使用できるため様々な場面で利用ができそうです。

参考記事

58
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?