क्या डार्ट गणनाओं का समर्थन करता है?


91

क्या डार्ट गणनाओं का समर्थन करता है? उदाहरण के लिए:

enum myFruitEnum { Apple, Banana }

डॉक्स की सरसरी खोज से पता चलता है कि नहीं।


1
code.google.com/p/dart/issues/detail?id=88 - ऐसा प्रतीत नहीं होता है
Mat

हाँ। डार्ट एनम का समर्थन करता है
एमजे मोंटेस

जवाबों:


156

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;
}

1
उपयोग करना constहमेशा संभव नहीं होता है (यदि एनाम को उन विशेषताओं के साथ बनाया गया है जो नहीं हो सकते हैं const)। इसलिए मैंने अपने उत्तर में इसका उपयोग नहीं किया (हालांकि मैं कभी-कभी constअपने कोड में एनम का उपयोग करता हूं)।
अलेक्जेंड्रे अर्धिन

मैं इस उत्तर को स्वीकार करूंगा क्योंकि यह निश्चित रूप से एक स्विच स्टेटमेंट में
प्यूसिडो एनम

2
@KaiSellgren नोट मुझे लगता है कि स्टाइल गाइड अब बदल गया है, इसलिए सभी कैप के बजाय एनम वैल्यू कम ऊंट केस होना चाहिए। देखें dartlang.org/articles/style-guide/...
ग्रेग लोव

2
क्या है List<Fruit> value?
टॉम रसेल

1
आप शायद लिखने के लिए थे for (Fruit value in Fruit.values), अन्यथा डार्ट एक त्रुटि दिखाता है
ठीक है

9

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


4

यह और यह आपके प्रश्न के उत्तर हो सकते हैं:

... 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) { ... }

मेरे विचार में उपयोग के लिए और अधिक स्पष्ट है। एप्लिकेशन संरचना की प्रोग्रामिंग के लिए यह थोड़ा अधिक कठिन है, लेकिन कुछ मामलों में, यह बेहतर और स्पष्ट है।


मुझे लगता है कि इस उदाहरण के लिए, इंटरफ़ेस को छोड़ना और कक्षा का उपयोग करना बेहतर होगा। इंटरफ़ेस एक वैकल्पिक अमूर्त है और
BraveNewMath


2

इस दृष्टिकोण के बारे में कैसे:

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;
    }
  }
}

2
मैं ऐसा खुद नहीं करूंगा। मैं नाम को अपरकेस के रूप में रखूंगा Fruit.APPLE। तब यदि मुझे पाठ्य-सामग्री की आवश्यकता होती है, तो मेरे पास एक नक्शा होगा जो उन्हें या कुछ भाषा समर्थन को अलग-अलग अनुवाद करता है यदि मैं अन्य भाषाओं का भी समर्थन करना चाहता हूं। मुझे यह भी लगता है कि switchस्टेटमेंट पूर्णांक पर सबसे अच्छा काम करते हैं, क्योंकि तब उन्हें एक जंप टेबल पर संकलित किया जा सकता है।
काई सेलग्रेन


0

बस टाइप करें क्लास फाइल।

डार्ट-प्रकार

आसान, तेज, अधिक शक्तिशाली और अधिक सहायक।

थोड़ी समस्या यह है कि यह कक्षा पांच अलग-अलग विकल्पों तक सीमित है और शून्य के रूप में काम करती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.