क्या डार्ट गणनाओं का समर्थन करता है? उदाहरण के लिए:
enum myFruitEnum { Apple, Banana }
डॉक्स की सरसरी खोज से पता चलता है कि नहीं।
क्या डार्ट गणनाओं का समर्थन करता है? उदाहरण के लिए:
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 डार्ट के साथ देशी Enum का सपोर्ट देखें 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.stnect, Status.paused]
value: Status.none, index: 0
मान: Status.running, index: 1
value: Status.stnect, index: 2
value: 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) { ... }
मेरे विचार में उपयोग के लिए और अधिक स्पष्ट है। एप्लिकेशन संरचना की प्रोग्रामिंग के लिए यह थोड़ा अधिक कठिन है, लेकिन कुछ मामलों में, यह बेहतर और स्पष्ट है।
भविष्य में गणना उपलब्ध होनी चाहिए। लेकिन जब तक एनम उतरा है आप कुछ ऐसा कर सकते हैं:
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
स्टेटमेंट पूर्णांक पर सबसे अच्छा काम करते हैं, क्योंकि तब उन्हें एक जंप टेबल पर संकलित किया जा सकता है।
हाँ! डार्ट में Enums करने के लिए वास्तव में बहुत उपयोगी है:
enum fruits{
BANANA, APPLE, ORANGE
}
बस टाइप करें क्लास फाइल।
आसान, तेज, अधिक शक्तिशाली और अधिक सहायक।
थोड़ी समस्या यह है कि यह कक्षा पांच अलग-अलग विकल्पों तक सीमित है और शून्य के रूप में काम करती है।