এনাম নামকরণ কনভেনশন - বহুবচন


267

আমি অনুরূপ পড়া সত্ত্বেও এই প্রশ্নটি জিজ্ঞাসা করছি তবে এনএম এবং সংখ্যক সম্পত্তির জন্য সি # নামকরণের কনভেনশনে আমি ঠিক কী চাই না want

আমি খুঁজে পেয়েছি যে বহুগুণে এনামের নাম রাখার প্রবণতা রয়েছে এবং তারপরে এগুলিকে একক হিসাবে ব্যবহার করতে পারি, উদাহরণস্বরূপ:

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}

অবশ্যই এটি কাজ করে এবং এটি আমার স্টাইল, তবে যে কেউ এই জাতীয় সম্মেলনে সম্ভাব্য সমস্যা খুঁজে পেতে পারে? যদিও "স্থিতি" শব্দটির সাথে আমার একটি "কুশ্রী" নামকরণ রয়েছে যদিও:

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

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

আমি সম্ভবত আমার সমস্ত এনাম বৈশিষ্ট্যগুলি ("স্ট্যাটাস" বলুন) "মাইস্ট্যাটাস" হিসাবে প্রকাশ করতে পারি না।

আমার প্রশ্ন: উপরে বর্ণিত আমার সম্মেলনে কেউ কি সম্ভাব্য সমস্যা খুঁজে পেতে পারেন? এটি সেরা অনুশীলনের বিষয়ে নয়।

প্রশ্ন পুনর্বিবেচনা:

ঠিক আছে, আমার ধারণা, আমার এইভাবে প্রশ্নটি করা উচিত: কেউ এনাম টাইপের নামকরণের জন্য কোনও ভাল জেনেরিক উপায় বের করতে পারে যখন এটি ব্যবহার করা হলে এনামের 'উদাহরণ' নামকরণটি বেশ সোজা হয়ে যাবে?


5
সর্বজনীন অর্ডারস্টেট ... - পাবলিক অর্ডারস্টেট অর্ডারস্ট্যাটাস {পেতে; সেট;}
ফ্রেজার

উত্তর:


333

মাইক্রোসফ্ট তার জন্য একক ব্যবহার করার পরামর্শ দিচ্ছে Enumযদি না Enumবিট ক্ষেত্রগুলি উপস্থাপিত হয় ( FlagsAttributeপাশাপাশি ব্যবহার করুন )। দেখুন পরিগণনা প্রকার নামকরণ নিয়মাবলী (Microsoft এর একটি উপসেট নামকরণ নির্দেশিকা )।

আপনার স্পষ্টির জবাব দেওয়ার জন্য, আমি নিম্নলিখিত দুটির মধ্যে কোনওটিই ভুল দেখছি না:

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass { 
    public OrderStatus OrderStatus { get; set; }
}

অথবা

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass {
    public OrderStatus Status { get; set; }
}

20
হ্যাঁ, এটি একটি সঠিক উত্তর। এই গাইডলাইনগুলি। নেট ফ্রেমওয়ার্কে ব্যবহৃত হয় যেমন এনওম ডেওওউইউক এবং পতাকাগুলি রেজিওসপশনগুলিতে।
আলেকজান্ডার জুইটবাম

1
হ্যাঁ, এটি প্রস্তাবিত অনুশীলন, আমি এটি স্বাগত জানাই। তবে এটি আমার প্রশ্নের উত্তর দেয় না।
ঠিক আছে

1
@ ওপরে আরও বিস্তৃত করতে, যদিও এটি দেখতে কুৎসিত মনে হচ্ছে, যদি আপনি কোনও পতাকা এনুম থেকে একক মান প্রয়োজন হয় তবে ক্ষেত্র / সম্পত্তি / যুক্তির জন্য একক রূপটি ব্যবহার করুন। আপনি যদি একাধিক পতাকা সেট করে সমর্থন করেন তবে বহুবচন ব্যবহার করুন। যদি আপনার এনাম কোনও পতাকা এনাম না হয় তবে টাইপের নাম এবং ক্ষেত্র / সম্পত্তি / যুক্তিগুলির জন্য একক ব্যবহার করুন।
জোনাথন ডিকিনসন

4
উত্তরের সাথে যুক্ত মাইক্রোসফ্ট নামকরণ কনভেনশন গাইডের নেট নেট সংস্করণটির লিঙ্কটি এখানে ।

1
@ থমাস এর সাথে আমার কখনই সমস্যা হয়নি, আমি কেন দেখতে পাচ্ছি না কেন এটি কাজ করবে না - এমন প্রসঙ্গটি দেখুন না যেখানে এটি দ্বিধাদ্বন্দী হবে যদিও এটি কোনও প্রকার বা পরিবর্তনশীল উল্লেখ করা হচ্ছে। অর্থাত্ OrderStatus == OrderStatus.Pendingবামের জন্য পরিবর্তনশীল হিসাবে এবং তারপরে ডানদিকে একটি গণনা হিসাবে স্বীকৃত
জেমস হারলি

39

আমি বহুবচনগুলিতে এনামের নামকরণ শুরু করেছি তবে পরে পরিবর্তিত হয়ে একবচন হয়েছি। তারা কোথায় ব্যবহৃত হয়েছে সে প্রসঙ্গে আরও বোধগম্য মনে হয়।

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

তুলনা করা:

Statuses myStatus = Statuses.Ready;

আমি প্রসঙ্গে আরও প্রাকৃতিক শোনার একক রূপটি পাই। আমরা একমত হয়েছি যে এনাম ঘোষণা করার সময়, যা এক জায়গায় ঘটে, আমরা "এটি ভাটিভারগুলির একটি দল" ভাবছি, তবে এটি ব্যবহার করার সময়, সম্ভবত অনেক জায়গাতেই, আমরা ভাবছি "এটিই যা কিছু হোক না কেন" ।


6
একটু দেরিতে প্রতিক্রিয়া (এবং সম্ভবত কিছুটা অফ-টপিক) তবে: আমি 0অজানা মানটির জন্য মানটি ব্যবহার করার পরামর্শ দেব , এইভাবে একটি অবিচ্ছিন্ন ভেরিয়েবলটি ডিফল্টরূপে হয় Unknown
সোভেনএল

সম্মত, @ সেভেনএল। সেই অনুযায়ী আপডেট করা উদাহরণ।
বব কাউফম্যান

আপনি কি সত্যিই [Flags]যদিও আপনার উদাহরণের জন্য একটি বৈশিষ্ট্য রাখবেন? "অসম্পূর্ণ" এবং "প্রস্তুত" উভয়েরই কোনও স্থিতি থাকার বিষয়টি বোঝায় না। যদি আপনার কাছে থাকে enum [Flags]Steps { First, Second, Third }, আপনি কি সত্যিই আপনার পরিবর্তনশীলটির নাম রাখবেন completedStep?
পাকম্যান

26

পরিস্থিতি কখনই বহুবচনের জন্য প্রযোজ্য নয়।

একটি enumকিছু বা অন্য কোনওটির একটি বৈশিষ্ট্য দেখায়। আমি একটি উদাহরণ দেব:

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

আপনার এক প্রকার থাকতে পারে তবে বহুবচন না করে একাধিক ক্ষেত্রে এটির চেষ্টা করুন:

Humour.Irony | Humour.Sarcasm

বরং

Humours { Irony, Sarcasm }

আপনার হাস্যরসের বোধ আছে, আপনার কোনও আবেগ নেই।


5
হাহাহা, ভাল, প্রোগ্রামাররা সর্বদা ব্যাকরণগতভাবে / রাজনৈতিকভাবে সঠিক হয় না। আপনার ক্ষেত্রে, আমি সম্ভবত "হিউমারটাইপস" ব্যবহার করি। খারাপ অভ্যাস আমার ধারণা।
ঠিক আছে

কি হবে যদি আমি কে বিদ্রূপ একটা ধারনা আছে বা বিদ্রূপ সম্বন্ধে একটি অনুভূতি থাকতে সব ব্যক্তিদের জন্য অনুসন্ধান করতে চান, আমি অনুসন্ধান রুটিন একটি দৃষ্টান্ত পাস হবে Humoursধারণকারী Humours.Irony | Huomours.Sarcasm??
চার্লস বেতানা

14

সাধারণভাবে, সর্বোত্তম অনুশীলনের সুপারিশটি একবচনীয়, কেবলমাত্র সেই জাতীয় এনামগুলিকে ব্যতীত [ফ্ল্যাগগুলি] এট্রিবিউট যুক্ত করা আছে, (এবং যার ফলে বিট ফিল্ড থাকতে পারে) যা বহুবচন হওয়া উচিত।

আপনার সম্পাদিত প্রশ্নটি পড়ার পরে, আমার মনে হয় যে আপনি মনে করতে পারেন যে সম্পত্তিটির নাম বা পরিবর্তনশীল নামটি এনাম টাইপের নাম থেকে আলাদা হতে হবে ... এটি হয় না। নিম্নলিখিতটি পুরোপুরি ঠিক আছে ...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }

সত্য, আমি অনুমান করি যে আমার পদ্ধতিটি এনামগুলি ব্যবহার করার সময় নামগুলি ভাবার প্রয়োজন বর্জন করার একটি 'দ্রুত এবং অলস' উপায়।
ঠিক আছে

1
আপনার উত্তরের সমর্থনে: এমএসডিএন-তে, "সম্পত্তিগুলির নাম" বিভাগে টাইপ সদস্যদের নাম থেকে : property কোনও সম্পত্তি তার ধরণের একই নাম প্রদান করা বিবেচনা করুনউদাহরণ: public Color Color { get {...} set {...} }
ডেভিডআরআর

10

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

public enum PersonTypesEnum {
    smart,
    sad,
    funny,
    angry
}


public class Person {   
    public PersonTypesEnum PersonType {get; set;}
}

এনাম কী এবং এর উদাহরণ কী তা কেউ কখনও বিভ্রান্ত করবে না।


2
আমি এখানে একটি এনাম নামকরণ কনভেনশন সন্ধান করতে এসেছি, একটি ক্লাস করার পরে এবং এনাম একই নামকরণ করেছে - এবং এটি আরও স্পষ্ট করতে "কিছু" রাখতে চেয়েছিলাম। আমি এটি "ই" (অবশ্যই এনামদের জন্য) এর সাথে উপসর্গ করার কথা ভাবছিলাম যেমন আমরা "আমি" এর সাথে ইন্টারফেস উপসর্গ করি - তবে আমি আপনার সমাধান হিদারকে পছন্দ করেছি! সুন্দর!!!
স্কট

1
মাইক্রোসফ্টের ডিজাইনের গাইলাইনলাইনগুলি থেকে: "এনাম টাইপের নামে" এনাম "প্রত্যয় ব্যবহার করবেন না।" ডকস.মাইক্রোসফট.এইন
ডটনেট /

3
আমি যা বলেছিলাম তার প্রথম বাক্যটি সম্ভবত আপনি মিস করেছেন? এখানে, আমি এটি আপনার জন্য অনুলিপি এবং আটকানো যাক: "আমি এই কয়েকটি জায়গার মধ্যে একটি যা কনভেনশন এর বিরুদ্ধে যেতে যথেষ্ট নারাজ" " আমি তখন কেন তা ব্যাখ্যা করতে যাই।
হিথার

2
আমি "প্রতিটি সম্ভাব্য উপায়ে" নির্দেশিকাগুলির বিরুদ্ধে যাচ্ছি না। এটাই হাইপারবোল। আমি একক, নির্দিষ্ট উপায়ে নির্দেশিকাগুলির বিরুদ্ধে যাচ্ছি, যা আমার বক্তব্য যুক্তি দ্বারা সমর্থিত। আপনি যদি মতানৈক্য করতে চান, জরিমানা, আপনার মতবিরোধের কারণগুলি তালিকাভুক্ত করুন; আপনার হাইপারবোল অপ্রয়োজনীয় এবং আপনার অবস্থানটি অগ্রসর করে না।
হিথার

1
যদি কোনও নেমস্পেসের সংঘর্ষ সম্ভব হয় তবে আমি যুক্ত করে কোনও সমস্যা দেখছি না Enum? এটি লেখকের মতো নয় যে সমস্ত বার তাদের প্রকারের সাথে পোস্টফিক্সিংয়ের প্রস্তাব দিচ্ছে। কারণ সরবরাহ করার কারণে লেখকের আরও শক্তিশালী কেস রয়েছে, অন্যদিকে এম zero শূন্য সমর্থনযোগ্যতা সরবরাহ করে $
জয় গোবিন্দানি

7

আপনি যদি সোজা লেখার চেষ্টা করছেন তবে এখনও নিষিদ্ধ কোডটি:

    public class Person
    {
        public enum Gender
        {
            Male,
            Female
        }
        //Won't compile: auto-property has same name as enum
        public Gender Gender { get; set; }  
    }

আপনার বিকল্পগুলি হ'ল:

  1. এমএস সুপারিশ উপেক্ষা করুন এবং এনাম নামের একটি উপসর্গ বা প্রত্যয় ব্যবহার করুন:

    public class Person
    {
        public enum GenderEnum
        {
            Male,
            Female
        }
        public GenderEnum Gender { get; set; }
    }
  2. এনাম সংজ্ঞাটিকে ক্লাসের বাইরে নিয়ে যান, পছন্দমতো অন্য শ্রেণিতে। এখানে উপরের একটি সহজ সমাধান:

    public class Characteristics
    {
        public enum Gender
        {
            Male,
            Female
        }
    }
    public class Person
    {
        public Characteristics.Gender Gender { get; set; }  
    }

2
হাইপোথিটিকাল পরিস্থিতি এবং একটি ভাল সমাধান নয়। কেন enumপ্রথম স্থানে নেস্টেড ব্যবহার করুন এবং এরপরে এটি অন্য কোনও শ্রেণিতে বাসা বাঁধেন যদি এর কারণে সমস্যা হয়?
জার্ট আর্নল্ড

1
জেন্ডারের ক্ষেত্রে, সম্পত্তির নাম Genderএবং এনাম হিসাবে নাম রাখা এর থেকে আরও অর্থবহ Sex। সুতরাং isac.Gender = Sex.Male..
নওফাল

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

আপনাকে এটিকে কোথাও থেকে সেট করতে হবে, সাধারণত ক্লাসের বাইরে বা ক্লাস তৈরির সময়, আপনি যদি এনামকে বাইরে পাঠাতে না চান তবে আপনার বাইরে এনামের সংজ্ঞা দেওয়া দরকার ale কেবলমাত্র মানুষের চেয়ে, আমি মনে করি এটি নেস্টেড না করা সর্বোত্তম সমাধান।
জিম ওল্ফ

2
আরেকটি, সম্ভবত আরও ভাল বিকল্পটি হ'ল উত্তর "সার্জ - অ্যাপ্লিকেশন অনুবাদক"।
কার্টিস ইয়ালাপ

6

সেরা অনুশীলন - একক ব্যবহার করুন। আপনার কাছে এনাম তৈরির আইটেমের একটি তালিকা রয়েছে। তালিকার কোনও আইটেম ব্যবহার করা অদ্ভুত লাগবে যখন আপনি বলবেন Versions.1_0। এটি আরও বেশি বোঝায় Version.1_0যেহেতু কেবলমাত্র 1Tre সংস্করণ রয়েছে।


5

কিছুটা দেরিতে আসছে ...

আপনার প্রশ্ন এবং আপনি উল্লেখ করা প্রশ্নের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে (যা আমি জিজ্ঞাসা করেছি ;-):

আপনি এনাম সংজ্ঞাটিকে ক্লাসের বাইরে রেখে দিয়েছেন, যা আপনাকে এনাম এবং সম্পত্তিটির জন্য একই নাম রাখতে দেয়:

public enum EntityType { 
  Type1, Type2 
} 

public class SomeClass { 
  public EntityType EntityType {get; set;} // This is legal

}

এই ক্ষেত্রে, আমি এমএস নির্দেশিকাগুলি অনুসরণ করব এবং এনামের জন্য একটি একক নাম ব্যবহার করব (পতাকাগুলির বহুবচন)। এটি সম্ভবত সবচেয়ে সহজ সমাধান।

আমার সমস্যাটি ( অন্য প্রশ্নে ) হ'ল এনামটি ক্লাসের ক্ষেত্রের মধ্যে সংজ্ঞায়িত করা হয়, এনামের নাম অনুসারে কোনও সম্পত্তি ব্যবহার করা বাধা দেয়।


0

অন্য থ্রেডে এন এবং নামকরণের সম্পত্তিটির জন্য নামকরণের কনভেনশনটিতে কেউ আমার দৃষ্টিভঙ্গিটি খুব ভাল ধারণা বলে উল্লেখ করেছে:

"আমি জানি যে আমার পরামর্শ। নেট নামকরণের কনভেনশনগুলির বিরুদ্ধে রয়েছে, তবে আমি ব্যক্তিগতভাবে 'ই' এর সাথে এনাম উপস্থাপন করি এবং 'এফ' দিয়ে পতাকাগুলি এনাম করি ('আমি' এর সাথে আমরা কীভাবে ইন্টারফেস উপসর্গ করি তার অনুরূপ)"।

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