はじめに
Google I/O 2023が先日行われ、その中で注目すべき発表がありました。それは、Dart3の正式リリースです。Dartのメジャーアップデートは5年ぶりで、様々な新機能や改善が実施されました。その中でも今回注目したいのは、まさに"スイッチ"を入れる新機能、"switch式"です。
今までにswitch文で困ったことはありませんか?特に、enumを用いて変数に値を代入したいときには、このswitch式が非常に便利です。この記事では、その使い方を詳しく解説します。これからswitch式を使おうと考えている方、もしくはすでに使っていて少し混乱している方の役に立てれば幸いです。
使えるようになった!switch式のパワー
実際のプログラムでイメージを掴んでみましょう。以下のようなコード、書いてみたくなりますよね?
final favoriteAnimal = switch(selectedAnimalType){
case AnimalType.dog:
'いぬ';
break;
case AnimalType.cat:
'ねこ';
break;
case AnimalType.bird:
'とり';
break;
}
ですが、このような書き方は従来のswitch文ではできませんでした。しかしDart3のリリースにより、switch式が導入されたことでこのような書き方ができるようになりました!
switch式を用いると、上記のコードは以下のように一新されます。
final favoriteAnimal = switch(selectedAnimalType){
AnimalType.dog => 'いぬ',
AnimalType.cat => 'ねこ',
AnimalType.bird => 'とり',
}
単に変数への値の代入が容易になるだけでなく、コード自体も圧倒的にシンプルで読みやすくなりました。煩雑だったcaseやbreakといった記述を省くことができ、アロー関数を用いた直感的な表現が可能になったのです。
文から式へ:switch式の原理
ではなぜ従来はできなかった変数への代入ができるようになったのでしょうか?
それは、switchが文から式へと変わったからです。
文と式はプログラムをする上での基礎となる2つの概念です。
厳密には違うかもしれませんが、文とはif文やswitch文などの事を指し、アクションを実行する
もので、式とは値を評価
するものと理解していいと思います。
例えばif文ですが、これは条件分岐し、条件に応じたアクションを実行するものです。
これに対し、式では式自体が評価され、評価された値に変化するというような理解です。
switch式の頼もしい味方:網羅性チェック
switch式にはもう一つ素晴らしい特徴があります。それが「網羅性チェック」です。
switch式では、switchで分岐したいケースの処理を記述しているかをチェックし、カバーしていない場合はコンパイル時にエラーを出力してくれます。
そのため、enumに新たな値を追加した場合switch式にも処理を追加しない場合はエラーとなります。
条件の組み合わせ:AND条件、OR条件、デフォルトケースの書き方
switch式での&条件はor条件は以下のようにそれぞれ&&と||を使用して記載でき、デフォルトケースは_(アンダーバー)で記載します。
final favoriteAnimal = switch (selectedAnimalType) {
AnimalType.dog && AnimalType.cat => 'いぬ & ねこ',
AnimalType.bird || AnimalType.hippo => "とり or かば",
_ => "デフォルトケース",
};
まとめ:switch式が開く新たな可能性
switch式を使用することで、パターンに応じた変数の代入やflutterでのwidget表示が非常に簡単になり、コードの可読性も向上します。
今回紹介した以外にもクラスを用いたパターンマッチやdart3で導入されたrecordを用いたパターンマッチなどでも使用できるため様々な場面で利用ができそうです。
参考記事