Open1

「読みやすいコードのガイドライン」Dart ver

utamoriutamori

4-2-3 直和型への置き換え

Dartにおいて直和型はsealed classとして実現されている。

Kotlinとは違い、Dartはクラスのネストができないので、少し冗長な書き方になる。

単純にError Successといったクラス名にすると名前空間が重なりやすいので、プレフィックスをつけたほうが良い。

4-12
sealed class CoinStatusResponse {}

class CoinStatusResponseSuccess implements CoinStatusResponse {
  CoinStatusResponseSuccess(this.coninStatus);

  final CoinStatus coninStatus;
}

class CoinStatusResponseError implements CoinStatusResponse {
  CoinStatusResponseError(this.errorType);

  final ErrorType errorType;
}

enum CoinStatus { rich, poor }

enum ErrorType { network, server, client }

利用例

String makeStirng(CoinStatusResponse response) {
  return switch (response) {
    CoinStatusResponseSuccess(coninStatus: final status) => status.toString(),
    CoinStatusResponseError(errorType: final error) => error.toString(),
  };
}

Dart 代数的データ型