এনামের 0 বা 1 দিয়ে শুরু করা উচিত?


136

কল্পনা করুন আমি নিম্নলিখিত এনুম সংজ্ঞায়িত করেছি:

public enum Status : byte
{
    Inactive = 1,
    Active = 2,
}

এনাম ব্যবহারের সেরা অনুশীলন কোনটি? এটি কি 1উপরের উদাহরণের মতো শুরু হওয়া উচিত বা এর দ্বারা শুরু 0(স্পষ্ট মান ছাড়া):

public enum Status : byte
{
    Inactive,
    Active
}

13
আপনার কি সত্যিই এগুলি স্পষ্টভাবে সংখ্যার প্রয়োজন?
ইয়াক

164
এনামগুলি এমনভাবে তৈরি করা হয়েছিল যাতে এর মতো জিনিসগুলি গুরুত্বপূর্ণ না হয়।
BoltClock

9
@ ড্যানিয়েল - আর্গ নং! আপনি যখন এনামের কথা ভাবছেন তখন কোনও বুলিয়ান ব্যবহারের চেয়ে বুলিয়ান কী করবে সে সম্পর্কে এনাম ব্যবহার করা ভাল ।
এএটি

22
@ ড্যানিয়েল কারণ ফাইলনোটফাউন্ডের মান, অবশ্যই
জৌবার্ক

5
xkcd.com/163 এনাম সূচকে অ্যারে করার চেয়ে আরও ভাল এনামের ক্ষেত্রে প্রযোজ্য।
বাম দিকের বাইরে

উত্তর:


161

ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইন :

✔️ সাধারণ এনামগুলিতে শূন্যের মান সরবরাহ করে।

মানটিকে "কিছুই নয়" বলার মতো বিবেচনা করুন। যদি এই জাতীয় মানটির জন্য এই জাতীয় মান উপযুক্ত না হয় তবে এনামের জন্য সর্বাধিক সাধারণ ডিফল্ট মান শূন্যের অন্তর্নিহিত মান নির্ধারণ করা উচিত।

ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইন / পতাকা এনাম ডিজাইনিং :

Zero শূন্যের পতাকা এনাম মানগুলি ব্যবহার করে এভিড না করুন যদি না মানটি "সমস্ত পতাকা মুছে ফেলা হয়" এবং পরবর্তী নির্দেশিকা অনুসারে যথাযথ নামকরণ করা হয়।

Flag পতাকা এনামগুলির শূন্যের নাম বলুন না। একটি পতাকা এনামের জন্য, মানটির সর্বদা অর্থ "সমস্ত পতাকা সাফ করা হয়।"


28
শীঘ্রই ব্যর্থ: যদি 'কোনওটিই' উপযুক্ত না হয় তবে লজিক্যাল ডিফল্ট মান না থাকে তবে আমি এখনও শূন্যের একটি মান (এবং এটি 'কিছুই না' বা 'অবৈধ' বলব) যা ব্যবহার করা হয়নি, কেবল তাই যদি সেই গণনার কোনও শ্রেণি সদস্য সঠিকভাবে আরম্ভ না করা হয় তবে অবিরাম মান সহজেই চিহ্নিত করা যায় এবং switchবিবৃতিতে এটি defaultবিভাগে চলে যায়, যেখানে আমি একটি নিক্ষেপ করি InvalidEnumArgumentException। অন্যথায় একটি প্রোগ্রাম অজ্ঞাতেই একটি গণনার শূন্য মান নিয়ে চলতে পারে, যা বৈধ হতে পারে এবং অযত্নে যেতে পারে।
অ্যালন গুরালেক

1
@ অ্যালন কেবলমাত্র আপনার জানা এনাম মানগুলি বৈধ এবং তারপরে সেটার এবং / অথবা কনস্ট্রাক্টরের অবৈধ মানগুলি পরীক্ষা করা ভাল বলে মনে হয়। এই পদ্ধতিটি আপনি অবিলম্বে জানেন যে কিছু অজানা সময়ের জন্য অবৈধ ডেটাযুক্ত কোনও অবজেক্টের অস্তিত্ব দেওয়ার পরিবর্তে কোনও কোড সঠিকভাবে কাজ করছে না এবং পরে এটি সন্ধান করবে। 'কোনওটিই' একটি বৈধ রাষ্ট্রের প্রতিনিধিত্ব না করা অবধি আপনার এটি ব্যবহার করা উচিত নয়।
wprl

@ সোলোবোল্ড: এটি এমন একটি শব্দের মত শোনাচ্ছে যেখানে আপনি কোনও কনস্ট্রাক্টরে এনাম শ্রেণির সদস্যকে আরম্ভ করতে ভোলেন না। বৈধতার কোনও পরিমাণই আপনাকে সহায়তা করবে না যদি আপনি আরম্ভ করতে বা ভুলেট করতে ভুলে যান। এছাড়াও, এমন সাধারণ ডিটিও ক্লাস রয়েছে যার কোনও নির্মাণকারী নেই, তবে পরিবর্তে অবজেক্ট ইনিশিয়ালাইজারের উপর নির্ভর করুন । এ জাতীয় বাগটি শিকার করা অত্যন্ত বেদনাদায়ক হতে পারে। তবুও, একটি অব্যবহৃত গণনা মান যুক্ত করা কুৎসিত এপিআই এর জন্য তৈরি করে। আমি জনসাধারণের ব্যবহারের জন্য তৈরি এপিআইয়ের জন্য এড়াতে চাই।
অ্যালন গুরালেনেক

@ অ্যালন এটি একটি ভাল বিষয়, তবে আমি যুক্তি দেব যে আপনাকে সেটার ফাংশনে এনামগুলিকে বৈধতা দেওয়া উচিত এবং যদি সেটারটি কখনও কল না করা হয় তবে গিটার থেকে নিক্ষেপ করা উচিত। এইভাবে আপনার ব্যর্থতার এক বিন্দু রয়েছে এবং আপনি সর্বদা একটি বৈধ মান রাখার জন্য মাঠে পরিকল্পনা করতে পারেন যা নকশা এবং কোডকে সহজ করে। যাইহোক আমার দুটি সেন্ট।
wprl

@ সোলোবোল্ড: 15 টি স্বয়ংক্রিয়-বাস্তবায়িত বৈশিষ্ট্যযুক্ত একটি ডিটিও শ্রেণীর কল্পনা করুন। এর শরীর 15 লম্বা লম্বা। এখন নিয়মিত বৈশিষ্ট্য সহ একই শ্রেণীর কল্পনা করুন। কোনও যাচাইয়ের যুক্তি যুক্ত করার আগে এটি সর্বনিম্ন 180 লাইন। এই শ্রেণিটি কেবলমাত্র ডেটা-ট্রান্সফারের উদ্দেশ্যে অভ্যন্তরীণভাবে ব্যবহৃত হয়। আপনি বরং কোনটি বজায় রাখবেন, একটি 15 লাইন শ্রেণি বা 180+ লাইনের বর্গ? Succinctness এর মান আছে। তবে এখনও, আমাদের উভয় শৈলী সঠিক, সেগুলি কেবল আলাদা different (আমার ধারণা এটি এটিই যেখানে আওপি ঝাঁকুনি দেয় এবং যুক্তির উভয় পক্ষেই জয়লাভ করে)।
অ্যালন গুরালেনেক

66

ঠিক আছে, আমি অনুমান করি যে আমি বেশিরভাগ উত্তরের সাথে দ্বিমত পোষণ করছি যা স্পষ্টভাবে তাদের সংখ্যা না বলে বলে। আমি সর্বদা তাদের স্পষ্টভাবে সংখ্যায়িত করি, তবে এটি কারণ বেশিরভাগ ক্ষেত্রে আমি তাদের কোনও ডেটা স্ট্রিমের মধ্যে স্থির রাখি যেখানে তারা পূর্ণসংখ্যার মান হিসাবে সঞ্চিত থাকে। যদি আপনি স্পষ্টভাবে মানগুলি না যোগ করেন এবং তারপরে একটি নতুন মান যুক্ত করেন তবে আপনি সিরিয়ালাইজেশনটি ভেঙে ফেলতে পারেন এবং তারপরে পুরানো স্থায়ী অবজেক্টগুলিকে সঠিকভাবে লোড করতে সক্ষম হবেন না। আপনি যদি এই মানগুলির কোনও ধরণের অবিরাম স্টোর করতে চলেছেন তবে আমি স্পষ্টভাবে মানগুলি সেট করার পরামর্শ দেব।


9
+1, একমত হয়েছে তবে কেবলমাত্র সেই ক্ষেত্রে যেখানে আপনার কোডটি কোনও বাহ্যিক কারণে (যেমন: সিরিয়ালাইজেশন) পূর্ণসংখ্যার উপর নির্ভর করে। অন্য কোথাও আপনার কাঠামোর কাজটি করার অনুমতি দিয়ে আটকে থাকা উচিত। আপনি যদি অভ্যন্তরীণভাবে পূর্ণসংখ্যার মানগুলির উপর নির্ভর করেন তবে আপনি সম্ভবত কিছু ভুল করছেন (দেখুন: ফ্রেমওয়ার্কটি এটির কাজটি করে দিন)।
ম্যাথু শার্লে

3
আমি এনামের লেখাটি চালিয়ে যেতে চাই। ডাটাবেসটিকে আরও বেশি ব্যবহারযোগ্য ইমো করে তোলে।
ডেভ

2
সাধারণত সিরিয়ালায়িত হওয়ার পরেও আপনার স্পষ্টভাবে মানগুলি সেট করার দরকার নেই ... সবসময় শেষে নতুন মান যুক্ত করুন। এটি সিরিয়ালাইজেশন সমস্যাগুলি সমাধান করবে। অন্যথায় আপনার নিজের ডেটা স্টোরের সংস্করণ প্রয়োজন হতে পারে (উদাহরণস্বরূপ মূল্য পড়ার / লেখার সময় আচরণের পরিবর্তনের জন্য একটি সংস্করণ সম্বলিত একটি ফাইল শিরোনাম) (অথবা স্মৃতিসৌধের প্যাটার্ন দেখুন)
বিচওয়াক্কার

4
@ ডেভ: আপনি যদি এনাম টেক্সট পবিত্র বলে নথিটি না ব্যাখ্যা করেন তবে ভবিষ্যতের প্রোগ্রামার যদি কোনও নাম পরিষ্কার করার জন্য বা কোনও নামকরণের সম্মেলনের সাথে সামঞ্জস্য করার সিদ্ধান্ত নেন তবে আপনি ব্যর্থতার জন্য নিজেকে প্রস্তুত করেছেন।
সুপারক্যাট

1
@ পিএসটিজেডস: এটি আমার ধারণা অনুসারে একটি স্টাইলিস্টিক বাণিজ্য - ডিস্কের জায়গাগুলি সস্তা, যদিও এনামের মানগুলির মধ্যে নিয়মিত রূপান্তর করতে সময় অতিবাহিত হয় এবং ডিবি অনুসন্ধানের সময় তুলনামূলকভাবে ব্যয়বহুল (দ্বিগুণ তাই যদি আপনার কোনও ডেটাবেস বা এর অনুরূপ কিছুতে প্রতিবেদনের সরঞ্জাম সেটআপ থাকে) । আপনি যদি উদ্বেগের স্থানটি চিন্তিত হন তবে নতুন এসকিউএল সার্ভার সংস্করণগুলির সাথে আপনার কাছে একটি ডাটাবেস সংকুচিত থাকতে পারে, যার অর্থ "সামারইনামেক্সটওয়ালু" এর 1000 টি উপস্থিতি সবেমাত্র আর কোনও স্থান ব্যবহার করবে। অবশ্যই এটি সমস্ত প্রকল্পের জন্য কাজ করবে না - এটি একটি বাণিজ্য। আমি মনে করি ব্যান্ডউইথ সম্পর্কে উদ্বেগ অকাল অপ্টিমাইজেশনের মত গন্ধ, সম্ভবত!
ডেভ

15

একটি এনাম একটি মান ধরণের এবং এটির ডিফল্ট মান (উদাহরণস্বরূপ কোনও শ্রেণিতে এনুম ক্ষেত্রের জন্য) 0 হবে যদি স্পষ্টভাবে শুরু না করা হয়।

সুতরাং আপনি সাধারণত একটি সংজ্ঞায়িত ধ্রুবক হিসাবে (যেমন অজানা) থাকতে চান।

আপনার উদাহরণস্বরূপ, আপনি যদি Inactiveডিফল্ট হতে চান , তবে এর মান শূন্য হওয়া উচিত। অন্যথায় আপনি একটি ধ্রুবক যোগ করার কথা বিবেচনা করতে পারেন Unknown

কিছু লোক আপনাকে পরামর্শ দিয়েছিল যে আপনি আপনার ধ্রুবকগুলির জন্য স্পষ্টভাবে মান উল্লেখ করবেন না। বেশিরভাগ ক্ষেত্রে সম্ভবত ভাল পরামর্শ, তবে কিছু ক্ষেত্রে রয়েছে যখন আপনি এটি করতে চান:

  • পতাকা enums

  • এনামগুলি যার মানগুলি বহিরাগত সিস্টেমগুলির সাথে আন্তঃব্যবস্থায় ব্যবহৃত হয় (যেমন সিওএম)।


আমি খুঁজে পেয়েছি যে পতাকাগুলি যখন এনামগুলি স্পষ্টভাবে মানগুলি সেট না করে তখন অনেক বেশি পাঠযোগ্য । - এছাড়াও কম উপায় ত্রুটি প্রবণতা আপনার জন্য বাইনারি গণিত করতে দেয়। (অর্থাত্‍ [Flags] enum MyFlags { None = 0, A, B, Both = A | B, /* etc. */ }আরও বেশি পঠনযোগ্য, এর চেয়ে বেশি [Flags] enum MyFlags { None = 0, A = 1, B = 2, Both = 3, /* etc */ })
ব্রেইনস্লাগস 83

1
@ ব্রেইনস্লাগস ৩৩ - আমি দেখতে পাচ্ছি না যে এটি সাধারণ ক্ষেত্রে কীভাবে সহায়ক [Flags] enum MyFlags { None=0, A, B, C } হবে - উদাহরণস্বরূপ ফলস্বরূপ ফলস্বরূপ ফলস্বরূপ ফলস্বরূপ ফলস্বরূপ ফলস্বরূপ ফলস্বরূপ ফলস্বরূপ ফলস্বরূপ ফল পাওয়া [Flags] enum MyFlags { None=0, A=1, B=2, C=3 }যাবে।
জো

14

এটি পরিবর্তন করার কোনও নির্দিষ্ট কারণ না থাকলে, তাদের ডিফল্ট মানগুলির সাথে এনামগুলি ছেড়ে দিন, যা শূন্য থেকে শুরু হয়।

public enum Status : byte
{
    Inactive,
    Active
}

6

আমি বলব সর্বোত্তম অনুশীলন হ'ল তাদের সংখ্যা না দেওয়া এবং এটি অন্তর্নিহিত হতে দিন - যা 0 থেকে শুরু হবে its যেহেতু এর অন্তর্নিহিত ভাষাটির পছন্দটি যা সর্বদা অনুসরণ করা ভাল :)


6

আমি 0 দিয়ে একটি বুলিয়ান টাইপ এনাম শুরু করব।

"ইনিয়েটিভ" এর অর্থ "নিষ্ক্রিয়" ব্যতীত অন্য কিছু নয় :)

এটি তাদের জন্য মান ধরে রাখে।


6

আমি বলব, এটি আপনি কীভাবে ব্যবহার করেন তার উপর নির্ভর করে। এনগ পতাকাঙ্কণের জন্য Noneমানটির জন্য 0 রাখা ভাল অনুশীলন :

[Flags]
enum MyEnum
{
    None = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    All = Option1 | Option2 | Option3,
}

যখন আপনার এনামটি কোনও ডাটাবেস সারণিতে ম্যাপ করা যায়, আমি এটি 1 দিয়ে শুরু করব profession পেশাদারভাবে লিখিত কোডের জন্য এটি বেশি গুরুত্বপূর্ণ নয়, তবে এটি পঠনযোগ্যতা উন্নত করে।

অন্যান্য ক্ষেত্রে আমি এটিকে ঠিক সেভাবেই রেখে দেব, তারা 0 বা 1 দিয়ে শুরু করে কিনা সেদিকে কোনও যত্ন নেই।


5

যদি না আপনার কাঁচা মানগুলি ব্যবহার করার উপযুক্ত কারণ থাকে তবে আপনার কেবলমাত্র অন্তর্নিহিত মানগুলি ব্যবহার করা উচিত এবং সেগুলি Status.Activeএবং এর সাথে উল্লেখ করা উচিত Status.Inactive

ক্যাচটি হ'ল আপনি কোনও ফ্ল্যাট ফাইল বা ডিবিতে ডেটা সঞ্চয় করতে বা অন্য কেউ তৈরি করেছেন এমন ফ্ল্যাট ফাইল বা ডিবি ব্যবহার করতে পারেন। যদি আপনি নিজেই এটি তৈরি করে থাকেন তবে এটি তৈরি করুন যাতে এনামের জন্য ব্যবহৃত নম্বরটি ফিট করে।

যদি ডেটা আপনার না হয় তবে অবশ্যই আপনি দেব যা একটি সংখ্যা স্কিম হিসাবে ব্যবহার করেছিলেন তা ব্যবহার করতে চাইবেন।

আপনি যদি এনামকে পতাকাগুলির সেট হিসাবে ব্যবহার করার পরিকল্পনা করে থাকেন তবে একটি সাধারণ কনভেনশন রয়েছে যা অনুসরণ করার মতো:

enum Example
{
  None      = 0,            //  0
  Alpha     = 1 << 0,       //  1
  Beta      = 1 << 1,       //  2
  Gamma     = 1 << 2,       //  4
  Delta     = 1 << 3,       //  8
  Epsilon   = 1 << 4,       // 16
  All       = ~0,           // -1
  AlphaBeta = Alpha | Beta, //  3
}

মানগুলি দু'জনের শক্তি হওয়া উচিত এবং বিট-শিফট ক্রিয়াকলাপ ব্যবহার করে প্রকাশ করা যেতে পারে। Noneস্পষ্টতই হওয়া উচিত 0, তবে Allস্পষ্টতই কম -1~0বাইনারি অবহেলা 0এবং এমন একটি সংখ্যার ফলাফল যা প্রতিটি বিট সেট করে 1, যা এর মানকে উপস্থাপন করে-1 । যৌগিক পতাকাগুলির জন্য (প্রায়শই সুবিধার জন্য ব্যবহৃত হয়) বিটওয়াইস বা অপারেটর ব্যবহার করে অন্যান্য মানগুলি মার্জ করা যেতে পারে |


3

কোনও নম্বর বরাদ্দ করবেন না। এটি ব্যবহার করার মতো বলে এটি ঠিক ব্যবহার করুন।


3

নির্দিষ্ট না হলে 0 থেকে শুরু হয়।

এটি সুস্পষ্ট হওয়া জরুরী কারণ এনামগুলি প্রায়শই সিরিয়ালযুক্ত এবং কোনও স্ট্রিং নয় বরং কোনও int হিসাবে সংরক্ষণ করা হয়।

ডাটাবেসে সংরক্ষিত যে কোনও এনামের জন্য, আমরা বরাবরই রক্ষণাবেক্ষণের সময় স্থানান্তরিতকরণ এবং পুনর্নির্মাণ প্রতিরোধের বিকল্পগুলি স্পষ্টভাবে সংখ্যায়িত করি।

মাইক্রোসফ্টের মতে, প্রস্তাবিত কনভেনশনটি একটি অবিশ্রুত বা সবচেয়ে সাধারণ ডিফল্ট মান উপস্থাপনের জন্য প্রথম শূন্য বিকল্প ব্যবহার করে।

নীচে 0 এর পরিবর্তে 1 এ নম্বর শুরু করতে একটি শর্টকাট দেওয়া আছে।

public enum Status : byte
{
    Inactive = 1,
    Active
}

আপনি যদি এনাম মানগুলিতে বিট অপারেটর ব্যবহার করতে পতাকা মান নির্ধারণ করতে চান তবে শূন্য মানের থেকে সংখ্যায়ন শুরু করবেন না।


2

আপনি যদি 1 এ শুরু করেন তবে আপনি সহজেই আপনার জিনিসগুলির একটি গণনা পেতে পারেন।

{
    BOX_THING1     = 1,
    BOX_THING2     = 2,
    BOX_NUM_THING  = BOX_THING2
};

আপনি যদি 0 থেকে শুরু করেন, তবে অবিচ্ছিন্ন জিনিসগুলির জন্য প্রথমটি মান হিসাবে ব্যবহার করুন।

{
    BOX_NO_THING   = 0,
    BOX_THING1     = 1,
    BOX_THING2     = 2,
    BOX_NUM_THING  = BOX_THING2
};

5
দুঃখিত, জোনাথন আমি মনে করি, এই পরামর্শটি আমার মনে একটু "পুরাতন স্কুল" (ধরণের কনভেনশনটি নিম্ন-স্তরের-সি বছর থেকে আসে)। এনাম সম্পর্কে কিছু অ্যাডিয়োনাল ইনফোগুলি "এম্বেড" করার দ্রুত সমাধান হিসাবে এটি ঠিক তবে এটি বৃহত্তর সিস্টেমে কোনও ভাল অভ্যাস নয়। উপলভ্য মানের সংখ্যা ইত্যাদি সম্পর্কে আপনার যদি প্রয়োজন হয় তবে আপনার একটি এনাম ব্যবহার করা উচিত নয় এবং একটি বাক্স_নো_থিং 1 কী? আপনি কি তাকে BOX_NO_THING + 1 দেবেন? এনামগুলি যেগুলির জন্য ব্যবহার করা উচিত তা হিসাবে ব্যবহার করা উচিত: "স্পিকিং" নামগুলির দ্বারা নির্দিষ্ট (অন্তর্নিহিত) মান।
বিচওয়াককার

হুঁ। আপনি ধরে নিচ্ছেন যে এটি পুরাতন স্কুল কারণ আমি মাইক্রোসফ্ট বম্পি কেসভিথলং নামগুলির চেয়ে বরং সমস্ত ক্যাপ ব্যবহার করেছি। যদিও আমি সম্মত হই যে এনুম'এড জাইজনুমডেফসআইএনমাইইনাম সংজ্ঞা পৌঁছানো পর্যন্ত লুপের চেয়ে পুনরুক্তি ব্যবহার করা ভাল।
জোনাথন ক্লাইন আইইইইই

এটি সি # তে বিভিন্ন উপায়ে ভয়ঙ্কর অনুশীলন। এখন আপনি যখন সঠিকভাবে আপনার এনামগুলির একটি গণনা পেতে যান, বা আপনি যদি তাদের সঠিক উপায়ে গণনা করার চেষ্টা করেন, আপনি একটি অতিরিক্ত, নকল বস্তু পাবেন। এছাড়াও এটি অন্যান্য জিনিসগুলির সাথে .ToString () কলকে সম্ভাব্য অস্পষ্ট (আধুনিক সিরিয়ালাইজেশন স্ক্রু করা) কল করে।
BrainSlugs83

0

প্রথমত, যদি না আপনি কোনও কারণে নির্দিষ্ট মান নির্দিষ্ট করে থাকেন (সংখ্যার মানটি অন্য কোথাও অর্থাত্ ডাটাবেস বা বাহ্যিক পরিষেবা) এর অর্থ হয় তবে তার পরে সংখ্যাসূচক মানগুলি নির্দিষ্ট করে না এবং সেগুলি সুস্পষ্ট হওয়া উচিত।

সর্বোপরি, আপনার সর্বদা একটি শূন্য মানের আইটেম থাকা উচিত (নন-ফ্ল্যাগ এনামগুলিতে)। সেই উপাদানটি ডিফল্ট মান হিসাবে ব্যবহৃত হবে।


0

এগুলি 0-এ শুরু করবেন না যতক্ষণ না তাদের কোনও কারণ, যেমন কোনও অ্যারে বা তালিকার সূচক হিসাবে তাদের ব্যবহার করা বা অন্য কোনও ব্যবহারিক কারণ (যেমন বিটওয়াইজ অপারেশনে এগুলি ব্যবহার করার মতো) রয়েছে)

আপনার enumযেখানে এটি প্রয়োজন ঠিক শুরু করা উচিত। এটিও ক্রমযুক্ত নয়। মানগুলি, যদি সেগুলি সুস্পষ্টভাবে সেট করা থাকে তবে কিছু অর্থপূর্ণ অর্থ বা ব্যবহারিক বিবেচনা প্রতিফলিত করা দরকার। উদাহরণস্বরূপ, enum"প্রাচীরের বোতলগুলির মধ্যে একটি" 1 থেকে 99 এর মধ্যে গণনা করা উচিত, যখন একটিenum উচিত, 4 টির পাওয়ার জন্য সম্ভবত 4 থেকে শুরু হওয়া উচিত এবং 16, 64, 256, ইত্যাদি দিয়ে চালিয়ে যাওয়া উচিত etc.

তদ্ব্যতীত, একটি শূন্য-মূল্যবান উপাদান যুক্ত করা enumকেবল তখনই করা উচিত যদি এটি কোনও বৈধ রাষ্ট্রের প্রতিনিধিত্ব করে। কখনও কখনও "কোনটিই নয়," "অজানা," "অনুপস্থিত," ইত্যাদি বৈধ মান হয় তবে অনেক সময় তা হয় না।


-1

আমি 0 এ আমার এনামগুলি শুরু করতে চাই, কারণ এটি ডিফল্ট, তবে আমি -1 এর মান সহ একটি অজানা মানও অন্তর্ভুক্ত করতে চাই। এটি তখন ডিফল্ট হয়ে যায় এবং কখনও কখনও ডিবাগিংয়ে সহায়তা করতে পারে।


4
ভয়াবহ ধারণা। মান ধরণের হিসাবে, এনামগুলি সর্বদা শূন্য থেকে শুরু করা হয়। যদি আপনার এমন কোনও মান রয়েছে যা অজানা বা অবিশ্রুত প্রতিনিধিত্ব করে তবে এটি 0 হওয়া দরকার You আপনি ডিফল্টকে -1 এ পরিবর্তন করতে পারবেন না, পুরো সিএলআর জুড়ে শূন্য-ফিলিং হার্ড-কোডড।
বেন ভয়েগট

আহ, আমি বুঝতে পারিনি। আমি যখন ডিক্যালার / ইনিশিয়েশন করি তখন আমি সাধারণত একটি এনাম মান / সম্পত্তির মান সেট করি। পয়েন্টারের জন্য ধন্যবাদ।
টমাস ম্যাকগুইননেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.