Open3
現場で役立つシステム設計の原則 × Dart 自分用メモ
現場で役立つシステム設計の原則
CHAPTER2
場合分けのロジックを整理する
- プログラムを複雑にする「場合分け」のコード
- Javaの列挙型を使えばもっとかんたん
if分を使わない実装を目指す。
上記をDartで書いてみる。
Javaでは列挙型もクラスです。区分ごとの値をインスタンス変数として保持したり、区分ごとのロジックをメソッドとして記述できたりします。
Dartのenhanced enumsを使えば、interface自体不要になる。
enhanced enumsを使う場合
void main() {
// e.g. 画面のドロップダウンリストで選択された区分名から対応する区分オブジェクトを探す
final selectedFeeTypeName = 'adult';
final fee = Fee.values.byName(selectedFeeTypeName);
print(fee);
assert(fee.yen.value == Yen(100).value);
assert(Fee.adult.compareTo(Fee.child) == 50);
}
/// 円の値オブジェクト
class Yen {
const Yen(this.value);
final int value;
}
/// enhanced enums
enum Fee implements Comparable<Fee> {
adult(yen: Yen(100), label: '大人'),
child(yen: Yen(50), label: '子供'),
senior(yen: Yen(80), label: 'シニア'),
;
const Fee({
required this.yen,
required this.label,
});
final Yen yen;
final String label;
int compareTo(Fee other) => yen.value - other.yen.value;
}