👨‍💻

Dartで(swiftみたいに)enumにメソッド持たせたい

2024/01/21に公開

Dartで(swiftみたいに)enumにメソッド持たせたい

siwftのenumだと、enum内にそのままfunc() を定義できて便利。
これと対応する表現のDart実装メモ。

refs: https://github.com/kevmoo/dart_side

Come to the Dart side..
May the Dart be with you...
Dart Vader...

SwiftのEnumの例

enum ProgrammingLanguage {
   case swift
   case dart   
   
   func whichOS() -> String {
      switch(self) {
      case .swift:
         return "iOS";
      case .dart:
         return "Android";
      }
   }
}

// 利用コード
let language: ProgrammingLanguage = .swift
print(language.whitchOS()) // "iOS"

DartでのEnumの実装

enum ProgrammingLanguage {
   swift,
   dart,   
}

// 「extension on ~」を利用して、enumを拡張する
// 下記のように、Extension名を省略すると、スコープをこのファイル内(private)絞れるらしい
// extension on ProgrammingLanguage {
extension ProgrammingLanguageExtension on ProgrammingLanguage {
   String whichOS() {
      switch(this) {
         case ProgramingLanguage.swift:
	    return "iOS";
	    break;
         case ProgramingLanguage.dart:	 
	    return "Android";
	    break;
      }
   }
}

// 利用コード
final ProgrammingLanguage language = ProgrammingLanguage.swift;
print(language.whichOS()); // "iOS"


最後に

Swiftだと、enum内部に定義できるので直感的かつ、手軽さがある。
Dartだと、多少の手間はあるが、同じことができるのでありがたい。

Come to the Dart side.( https://github.com/kevmoo/dart_side)

Discussion