Dartは列挙をサポートしていますか?例えば:
enum myFruitEnum { Apple, Banana }
ドキュメントをざっと検索すると、いいえがわかります。
Dartは列挙をサポートしていますか?例えば:
enum myFruitEnum { Apple, Banana }
ドキュメントをざっと検索すると、いいえがわかります。
回答:
始まり1.8、あなたはこのような列挙型を使用することができます。
enum Fruit {
apple, banana
}
main() {
var a = Fruit.apple;
switch (a) {
case Fruit.apple:
print('it is an apple');
break;
}
// get all the values of the enums
for (List<Fruit> value in Fruit.values) {
print(value);
}
// get the second value
print(Fruit.values[1]);
}
1.8より前の古いアプローチ:
class Fruit {
static const APPLE = const Fruit._(0);
static const BANANA = const Fruit._(1);
static get values => [APPLE, BANANA];
final int value;
const Fruit._(this.value);
}
クラス内のこれらの静的定数はコンパイル時定数であり、このクラスは、たとえば次のswitch
ステートメントで使用できるようになりました。
var a = Fruit.APPLE;
switch (a) {
case Fruit.APPLE:
print('Yes!');
break;
}
const
できるとは限りません(列挙型が使用できない属性で作成されている場合const
)。そのため、回答では使用しませんでした(ただしconst
、コードで列挙型を使用することもあります)。
List<Fruit> value
?
for (Fruit value in Fruit.values)
r41815ダートが得たでネイティブ列挙型のサポートが見http://dartbug.com/21416と同様に使用することができます
enum Status {
none,
running,
stopped,
paused
}
void main() {
print(Status.values);
Status.values.forEach((v) => print('value: $v, index: ${v.index}'));
print('running: ${Status.running}, ${Status.running.index}');
print('running index: ${Status.values[1]}');
}
[Status.none、Status.running、Status.stopped、Status.paused]
値:Status.none、インデックス:0
値:Status.running、インデックス:1
値:Status.stopped、インデックス:2
値:Status.paused、インデックス:3
実行中:Status.running、1
実行中インデックス:Status.running
制限は、列挙型アイテムにカスタム値を設定することはおそらく不可能であり、それらは自動的に番号が付けられることです。
詳細については、このドラフトhttps://www.dartlang.org/docs/spec/EnumsTC52draft.pdfをご覧ください。
... for the technology preview it was decided to leave it out and just
use static final fields for now. It may be added later.
あなたはまだこのようなことをすることができます:
interface ConnectionState { }
class Connected implements ConnectionState { }
class Connecting implements ConnectionState { }
class Disconnected implements ConnectionState { }
//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }
私の意見では、どちらが使用するのがより明確です。アプリケーション構造のプログラミングは少し難しいですが、場合によっては、より適切で明確です。
列挙は将来利用可能になるはずです。しかし、Enumが着陸するまで、次のようなことができます。
class Fruit {
static final APPLE = new Fruit._();
static final BANANA = new Fruit._();
static get values => [APPLE, BANANA];
Fruit._();
}
このアプローチはどうですか?
class FruitEnums {
static const String Apple = "Apple";
static const String Banana = "Banana";
}
class EnumUsageExample {
void DoSomething(){
var fruit = FruitEnums.Apple;
String message;
switch(fruit){
case(FruitEnums.Apple):
message = "Now slicing $fruit.";
break;
default:
message = "Now slicing $fruit via default case.";
break;
}
}
}
Fruit.APPLE
。次に、テキスト出力が必要な場合は、それらを翻訳するマップ、または他の言語もサポートしたい場合は、いくつかの言語サポートを個別に用意します。また、switch
ステートメントは整数で最適に機能すると思います。整数を使用すると、ジャンプテーブルにコンパイルできるからです。