Dart, numaralandırmayı destekliyor mu? Örneğin:
enum myFruitEnum { Apple, Banana }
Belgelerin üstünkörü bir araştırması hayır diyor.
Dart, numaralandırmayı destekliyor mu? Örneğin:
enum myFruitEnum { Apple, Banana }
Belgelerin üstünkörü bir araştırması hayır diyor.
Yanıtlar:
1.8'den başlayarak , şu şekilde numaralandırmaları kullanabilirsiniz:
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'den önceki eski yaklaşım:
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);
}
Sınıftaki bu statik sabitler, derleme zamanı sabitleridir ve bu sınıf artık örneğin switch
ifadelerde kullanılabilir:
var a = Fruit.APPLE;
switch (a) {
case Fruit.APPLE:
print('Yes!');
break;
}
const
her zaman mümkün değildir (enum, yapılamayan niteliklerle oluşturulmuşsa const
). Bu yüzden const
cevabımda kullanmadım ( kodumda bazen enum kullanmama rağmen ).
List<Fruit> value
?
for (Fruit value in Fruit.values)
R41815 ile Dart yerel Enum desteği aldı, bkz. Http://dartbug.com/21416 ve şu şekilde kullanılabilir:
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]
değeri: Status.none, indeks: 0
değer: Status.running, indeks: 1
değer: Status.stopped, indeks: 2
değer: Status.paused, dizin: 3
çalışıyor: Durum.çalışıyor, 1
çalışıyor dizin: Durum.çalışıyor
Bir sınırlama, bir enum öğesi için özel değerler ayarlamanın mümkün olmaması, otomatik olarak numaralandırılmalarıdır.
Bu taslakta daha fazla ayrıntı https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf
Bu ve sorunuzun cevabı bu olabilir:
... for the technology preview it was decided to leave it out and just
use static final fields for now. It may be added later.
Yine de böyle bir şey yapabilirsiniz:
interface ConnectionState { }
class Connected implements ConnectionState { }
class Connecting implements ConnectionState { }
class Disconnected implements ConnectionState { }
//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }
bence kullanım için daha açık. Uygulama yapısını programlamak biraz daha zordur, ancak bazı durumlarda daha iyi ve nettir.
Numaralandırma gelecekte mevcut olmalıdır. Ancak Enum inene kadar aşağıdakilere benzer bir şey yapabilirsiniz:
class Fruit {
static final APPLE = new Fruit._();
static final BANANA = new Fruit._();
static get values => [APPLE, BANANA];
Fruit._();
}
bu yaklaşıma ne dersin:
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
. O zaman metinsel çıktı isteseydim, bunları çeviren bir haritam olurdu veya diğer dilleri de desteklemek istersem ayrı bir dil desteği alırdım. Ayrıca switch
ifadelerin en iyi tamsayılarda işe yaradığını düşünüyorum , çünkü o zaman bir atlama tablosuna derlenebilirler.
Evet! Dart'ta Enums yapmak aslında çok yararlıdır:
enum fruits{
BANANA, APPLE, ORANGE
}
Türler Sınıf Dosyasını kullanın.
kolay, hızlı, daha güçlü ve daha yararlı.
küçük sorun, bu sınıf beş Farklı Seçim ile sınırlı ve bir de boş olarak eylemler için.