কোডিং কনভেনশনস - নামকরণ এনামস


289

জাভাতে নামকরণের জন্য কোন সম্মেলন আছে?

আমার পছন্দ হ'ল একটি এনাম একটি প্রকার। সুতরাং, উদাহরণস্বরূপ, আপনার একটি এনাম আছে

Fruit{Apple,Orange,Banana,Pear, ... }

NetworkConnectionType{LAN,Data_3g,Data_4g, ... }

আমি এর নামকরণের বিরোধিতা করছি:

FruitEnum
NetworkConnectionTypeEnum

আমি বুঝতে পেরেছি যে কোন ফাইলগুলি এনাম রয়েছে তা বাছাই করা সহজ, তবে তারপরে আপনারও রয়েছে:

NetworkConnectionClass
FruitClass

এছাড়াও, ধ্রুবকগুলির জন্য একই বর্ণনা করার জন্য কোনও ভাল নথি আছে, সেগুলি তাদের কোথায় ঘোষণা করবেন ইত্যাদি?


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

13
@ আলেকজান্ডার পোগ্রেবন্যাক না, উত্তর আছে।
টম হাটিন -

উত্তর:


473

এনামগুলি ক্লাস হয় এবং ক্লাসগুলির সম্মেলনগুলি অনুসরণ করা উচিত। এনামের উদাহরণগুলি ধ্রুবক হয় এবং ধ্রুবকগুলির জন্য সম্মেলনগুলি অনুসরণ করা উচিত। সুতরাং

enum Fruit {APPLE, ORANGE, BANANA, PEAR};

ফ্রুটক্লাসের চেয়ে বেশি ফল লেখার কোনও কারণ নেই writing আপনি কেবল চারটি (বা পাঁচ) অক্ষর নষ্ট করছেন যা কোনও তথ্য যোগ করে না।

জাভা নিজেই এই পদ্ধতির প্রস্তাব দেয় এবং এটি তাদের উদাহরণগুলিতে ব্যবহৃত হয়


22
আমি আমার এনামগুলিকে সেইভাবে নামকরণ শুরু করেছিলাম, তবে পঠনযোগ্যতার জন্য আমি এখন ফ্রুট.এপিপিএল এর পরিবর্তে ফ্রুট.অ্যাপেল ব্যবহার করছি।

38
@ ওয়াল্টার কেন এনাম উদাহরণ তৈরি করাকে এমন মনে হবে যেন এটি পাঠের দক্ষতা বৃদ্ধি করে?
ডিজেক্লেওয়ার্থ

17
টেকনিক্যালি, enum দৃষ্টান্ত হয় ক্লাস। এজন্য তাদের পদ্ধতি থাকতে পারে।
টেড হপ

87
না, একটি এনাম উদাহরণ একটি উদাহরণ। একটি এনাম একটি শ্রেণি।
ডিজেক্লেওয়ার্থ

30
নামকরণের প্যাটার্নের ধারণা যা আমাকে ফলের টাইপ করে তোলে AP এছাড়াও, যদিও এটি খুব খারাপ অভ্যাস হবে তবে অ্যাপলকে একটি ধ্রুবক (পরিবর্তনযোগ্য) হতে হবে না। পূর্ণ জাভা ক্লাসে এনামগুলির প্রচারের সাথে আমি নিশ্চিত নই যে এমন কিছু জন্য বিকাশিত কনভেনশনগুলি ব্যবহার করা হবে যা সিতেও বিদ্যমান ছিল না (অবজেক্টস, এনামগুলি নয়) সর্বদা বোধ করি
বিল কে

76

এটি সম্ভবত আমাকে প্রচুর নতুন বন্ধু হিসাবে গড়ে তুলবে না, তবে এটি যুক্ত করা উচিত যে সি # লোকের একটি আলাদা নির্দেশিকা রয়েছে: এনাম উদাহরণগুলি "পাস্কেল কেস" (আপার / লোয়ার কেস মিশ্রিত)। দেখুন Stackoverflow আলোচনা এবং দুটিই MSDN পরিগণনা প্রকার নামকরণ নির্দেশিকা

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

সুতরাং, হ্যাঁ, আমি জাভা এনাম নামকরণ কনভেনশনটির মূল্য প্রশ্ন করার সাহস করি। "প্রোগ্রামিং জগতের অন্যান্য অর্ধেক" সত্যই অন্যরকম স্টাইল ব্যবহার করে তা আমার নিজের ধর্মকে সন্দেহ করা বৈধ বলে মনে করে।


7
টিআইএল যে কেবল জাভা বা সি # প্রোগ্রামারই প্রকৃত প্রোগ্রামার, এবং তাদের সংখ্যা সমান। # জারকাসম
মাইন্ডউইন

14
সি # হ'ল অন্যথায় দুর্দান্ত ভাষা, তবে এটি কেবল নির্বোধ। সমস্ত কিছু সি # তে বেশ প্যাস্কল কেস, যা মূলত নামকরণের সম্মেলন না করার মতোই; একটি নাম দেখে আপনি কিছুই অর্জন করতে পারেন না। এটি কোনও শ্রেণি, পদ্ধতি, সম্পত্তি ইত্যাদি কিনা আপনি তা বলতে পারবেন না
বেসিনেটর

3
এছাড়াও, বুলিয়ান কার্যত একটি এনাম, উদাহরণগুলি সত্য এবং মিথ্যা, ছোট হাতের অক্ষরে। হ্যাঁ, সমস্ত ক্যাপগুলি কুৎসিত।
ফ্লোরিয়ান এফ

@ ফ্লোরিয়ানএফ, বুলিয়ান ক্লাসের সাথে প্রাথমিক ধরণের বুলেটিয়ানকে বিভ্রান্ত করবেন না ( ডকসস.অরাকলস / জাভাসে / / / ডকস / এপি / জাভা / ল্যাং / বুলিয়ান এইচটিএমএল )। ক্লাসটি বড় হাতের কনভেনশন ব্যবহার করে
IvoC

24

ইতিমধ্যে উল্লিখিত হিসাবে, এনাম দৃষ্টান্তগুলি ওরাকল ওয়েবসাইটের ডক্স অনুসারে বড় হাতের হওয়া উচিত ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html )।

যাইহোক, ওরাকল ওয়েবসাইটে ( http://www.oracle.com/technetwork/java/javaee/downloads/index.html ) জাভাএই t টি টিউটোরিয়ালটি দেখার সময় , আমি "ডিউকের বইয়ের দোকান" টিউটোরিয়াল এবং ক্লাসে হোঁচট খেয়েছি ( tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java), আমি নিম্নলিখিত এনাম সংজ্ঞা পেয়েছি:

private enum PropertyKeys {
    alt, coords, shape, targetImage;
}

সম্মেলন অনুসারে, এটিকে দেখতে এমন হওয়া উচিত:

public enum PropertyKeys {
    ALT("alt"), COORDS("coords"), SHAPE("shape"), TARGET_IMAGE("targetImage");

    private final String val;

    private PropertyKeys(String val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return val;
    }
}

সুতরাং এটি এমনকি ওরাকল-এ থাকা ছেলেরা মাঝে মাঝে সুবিধার্থে বাণিজ্য সম্মেলন করে।


13

আমাদের কোডবেসে; আমরা সাধারণত ক্লাসে এনামগুলিকে ঘোষণা করি যেগুলি তাদের।

সুতরাং আপনার ফলের উদাহরণস্বরূপ, আমাদের একটি ফলের শ্রেণি থাকবে এবং এর ভিতরে ফলমূল নামে একটি এনুম।

কোডে এটি উল্লেখ করা দেখে মনে হচ্ছে: Fruit.Fruits.Apple, Fruit.Fruits.Pearইত্যাদি etc.

ধ্রুবকরা একই লাইনটি অনুসরণ করে, যেখানে তারা হয় সেগুলি শ্রেণিতে সংজ্ঞায়িত হয় যার সাথে তারা প্রাসঙ্গিক (যাতে কিছু ভালো হয় Fruit.ORANGE_BUSHEL_SIZE); অথবা যদি তারা "কনস্ট্যান্ট ম্যানেজার" (বা সমতুল্য; মত ConstantManager.NULL_INT) নামে শ্রেণিতে সিস্টেম-ওয়াইড (অর্থাত্ ইনটগুলির জন্য একটি সমান "নাল মান") প্রয়োগ করে । (পার্শ্ব নোট; আমাদের সমস্ত ধ্রুবকগুলি আপার ক্ষেত্রে রয়েছে)

সর্বদা হিসাবে, আপনার কোডিং মানগুলি সম্ভবত আমার থেকে পৃথক; তাই ওয়াইএমএমভি।


5
আমি যুক্ত করতে চাই যে দেখে মনে হয় যে অবজেক্ট ফ্যাক্টরিগুলি আজকাল বহুবচন ব্যবহার করে নামকরণ করা হয়েছে, উদাহরণস্বরূপ Listsএবং Maps। আমার মতে এটি একটি ভাল সম্মেলন এবং আমি এর আরও ব্যাপক ব্যবহারকে পুরোপুরি সমর্থন করি।
ইসকো

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

8
Fruit.Fruits.Appleআমার কাছে খুব ভার্জোজ, আক্ষরিকভাবে DRY নীতিটি ভঙ্গ করা :-) আমি উদাহরণ পছন্দ করব Fruit.Type.APPLE
পিয়েটার তারেক

2
আমি এই পদ্ধতির পছন্দ করি না। এটি যেভাবে নামকরণ করা হয়েছে, একটি অ্যাপল হয় হ'ল একটি ফল or আমি পিটারের টাইপ উদাহরণটি পছন্দ করি। অন্ততপক্ষে এটি স্ব নথিভুক্ত করছে যে অ্যাপল হ'ল এক ধরণের ফল। যদিও এই পুরো ফলের উদাহরণে এক ধরণের পচা গন্ধ পাওয়া যায় ...
মার্ক পিটারস

1
আমিও এই পছন্দ করি না যদি 'ফল' শ্রেণি কোনও ফলের প্রতিনিধিত্ব করে (এবং এটি হওয়া উচিত) তবে 'ফল' কী উপস্থাপন করতে পারে? যদি ফল (শ্রেণি) সত্যই ফলের সাথে আচরণ করার জন্য একটি শ্রেণি হয় তবে এর নামকরণ করা উচিত "ফ্রুটহ্যান্ডলার" বা 'ফ্রুটম্যানেজার'
ডিজেক্লেওয়ার্থ

7

তারা এখনও ধরণের, তাই আমি ক্লাসের জন্য আমি সর্বদা একই নামকরণ সম্মেলনগুলি ব্যবহার করি।

আমি অবশ্যই একটি নাম "ক্লাস" বা "এনাম" লাগিয়ে নেব। আপনার যদি একটি FruitClassএবং একটি উভয় থাকে FruitEnumতবে অন্য কিছু ভুল এবং আপনার আরও বর্ণনামূলক নাম প্রয়োজন। আমি যে ধরণের কোডের মাধ্যমে উভয়ের প্রয়োজন হতে পারে সে সম্পর্কে চিন্তা করার চেষ্টা করছি এবং মনে হচ্ছে একটি হওয়া উচিতFruit হয় এনামের পরিবর্তে সাব টাইপের বেস ক্লাস । (যদিও এটি আমার নিজস্ব অনুমান, আমি যা কল্পনা করছি তার চেয়ে আপনার আলাদা পরিস্থিতি থাকতে পারে))

নাম ধ্রুবকগুলির জন্য আমি যে সর্বোত্তম রেফারেন্সটি পাই তা ভেরিয়েবল টিউটোরিয়াল থেকে আসে :

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



1

আমি যদি আমার $ 0.02 যুক্ত করতে পারি তবে আমি সি-তে এনাম মান হিসাবে প্যাসকেলকেস ব্যবহার করতে পছন্দ করি I

সি-তে, তারা মূলত বিশ্বব্যাপী, এবং পিয়ার সংযোগের বিপরীতে পিইআইপি সংযুক্ত হয়ে আসলেই ক্লান্তিকর হয়ে ওঠে।

বিশুদ্ধ বাতাসের শ্বাস.

আক্ষরিক অর্থে, এটি আমাকে শ্বাসকে আরও সহজ করে তোলে।

জাভাতে, যতক্ষণ না আপনি স্থায়ীভাবে অন্য শ্রেণি থেকে এগুলি আমদানি করেন ততক্ষণ কাঁচা এনাম নাম ব্যবহার করা সম্ভব।

import static pkg.EnumClass.*;

এখনই, আপনি অযোগ্য নামগুলি ব্যবহার করতে পারেন, আপনি ইতিমধ্যে ভিন্ন উপায়ে যোগ্যতা অর্জন করেছেন।

আমি জাভাতে কিছু সি কোড পোর্ট করা এবং জাভা কনভেনশন (যা আরও ভার্বোস, আরও লম্বা, এবং আরও কুরুচিপূর্ণ) এবং আমার সি স্টাইল বেছে নেওয়ার মধ্যে বর্তমানে 'ছেঁড়া' রয়েছে তা সম্পর্কে (ভাবছি)।

পিয়ার কানেক্টেড পিয়ারস্টেটে পরিণত হবে switch

পরের সম্মেলনের জন্য এখন অনেক কিছু বলার আছে এবং এটি দেখতে সুন্দর তবে কিছু "মূর্তিবাদী বাক্যাংশ" যেমন if (s == PeerAvailable)মনে হয় if (s == PeerState.AVAILABLE)এবং নস্টালজিকালি হয়ে যায় , এটি আমার কাছে অর্থের ক্ষতি।

আমি মনে করি স্পষ্টতার কারণে আমি এখনও জাভা স্টাইল পছন্দ করি তবে চিৎকার কোডটি দেখার জন্য আমার খুব কষ্ট হয়েছে।

এখন আমি বুঝতে পেরেছি যে পাস্কেলকেস ইতিমধ্যে জাভাতে ব্যাপকভাবে ব্যবহৃত হয়েছে তবে খুব বিভ্রান্তিকরভাবে এটি সত্যিই হবে না, কেবল জায়গা থেকে খুব দূরে।


0
enum MyEnum {VALUE_1,VALUE_2}

(প্রায়) বলার মতো

class MyEnum {

    public static final MyEnum VALUE_1 = new MyEnum("VALUE_1");
    public static final MyEnum VALUE_2 = new MyEnum("VALUE_2");

    private final name;

    private MyEnum(String name) {
        this.name = name;
    }

    public String name() { return this.name }
}

সুতরাং আমি অনুমান করি যে সমস্ত ক্যাপগুলি কঠোরভাবে আরও সঠিক, তবে এখনও আমি ক্লাস নাম কনভেনশনটি ব্যবহার করি কারণ আমি যেখানেই যেখানেই সমস্ত ক্যাপগুলি ঘৃণা করি

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