ধ্রুবকগুলির জন্য সি # নামকরণের সম্মেলন?


419
private const int THE_ANSWER = 42;

অথবা

private const int theAnswer = 42;

ব্যক্তিগতভাবে আমি মনে করি আধুনিক আইডিইগুলির সাথে আমাদের উটকেস নিয়ে যাওয়া উচিত কারণ ALL_CAPS অদ্ভুত লাগে। আপনি কি মনে করেন?


4
@ এম্মিকা: এই উদাহরণটিতে "দ্য" অর্থ কী? এটি কি "দ্য হিচিকারের গাইড গ্যালাক্সিতে" যেমন রয়েছে বা এটি কোনও সি ++ কোডিং মান থেকে শুরু করে? (যেমন ম্যাকিনটোসের জন্য পুরানো সি ++ কাঠামো, থিন্ক সি [এবং পরবর্তীকালে, সিম্যানটেক সি ++] পয়েন্টার / রেফারেন্স সদস্যদের জন্য "এটি" এবং স্কেলার সদস্যদের জন্য "" "উপসর্গটি ব্যবহার করেছিলেন)
পিটার মর্টেনসেন

5
@ পিটার, যেহেতু ধ্রুবকের মান 42, তাই আমি দৃ strongly়ভাবে বিশ্বাস করি এটি গ্যালাক্সির জন্য হিচিকার গাইডের একটি উল্লেখ ।
আলবিরিও

@ পিটারমোরটেনসেন এটি সৃজনশীল! তবে এর ইমপ্লয় এবং এর কাস্টমারের মতো নামগুলি তারা ভ্রান্ত হতে পারে।
ক্যামিলো মার্টিন

4
এমএসডিএন: ক্যাপিটালাইজেশন কনভেনশনস এমএসডিএন.মিক মাইক্রোসফট /en-us/library/vstudio/ms229043(v=vs.90).aspx
ক্যাপ্টেন সেনসেবল

আমি পছন্দ theAnswer। আগে হাঙ্গেরিয়ান স্বরলিপি ভক্ত ছিলাম, তবে যেহেতু আমি এটি ব্যবহার না করা শিখেছি, নামকরণের ক্ষেত্রে কোনও মেটা ইঙ্গিতকে কঠোরভাবে এড়িয়ে চলতে পছন্দ করি। একই ইন্টারফেস মত যায় IInterface। আমি পছন্দ Interfacable। তবে একটি দলে কাজ করার সময়, আমি নিয়মগুলি মেনে
চলি

উত্তর:


484

প্রস্তাবিত নামকরণ এবং বড় হাতের কনভেনশন ব্যবহার করা পি ascal সি asing ধ্রুবক জন্য (মাইক্রোসফট নামে একটি টুল আছে StyleCop - যদিও এটি একটি সামান্য বিট দস্তাবেজ সব পছন্দের নিয়মাবলী এবং মেনে চলার জন্য আপনার উৎস পরীক্ষা করতে পারবেন যে খুব পায়ুসংক্রান্ত অনেক মানুষের কাণ্ডকীর্তি জন্য রক্ষাকর) । যেমন

private const int TheAnswer = 42;

পাস্কাল মূলধন কনভেনশন মাইক্রোসফ্টের ফ্রেমওয়ার্ক ডিজাইনের গাইডলাইনগুলিতেও নথিভুক্ত করা হয়েছে ।


51
আসলে, স্টাইলকপ "মাইক্রোসফ্টের পণ্য নয়," তবে "মাইক্রোসফ্টের খুব অনুরাগী বিকাশকারী দ্বারা সন্ধ্যাকালীন একটি সরঞ্জাম (সন্ধ্যা ও সাপ্তাহিক ছুটির দিনে)"। ( বিশদগুলির জন্য ব্লগস.এমএসএনএন / সোর্সানালাইসিস / অর্চিভ / ২০০৮/০7/২০/২ এবং ব্লগস.এমএসডিএন / ভারারি / অর্চিভ / ২০০৮/০7/১৯/২ দেখুন )) বলা হচ্ছে, মাইক্রোসফ্টের কাঠামোর নামকরণ কনভেনশনগুলিতে ধ্রুবকগুলির জন্য পাস্কেল কেসিং ব্যবহার করা হয়, সুতরাং সরঞ্জামটি মাইক্রোসফ্ট প্রকাশিত ও অনুমোদন করে এমন মানটি কার্যকর করছে ।
বিডুকস

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

8
আমি এটি পছন্দ করি না, কারণ প্রথম অক্ষরটি সাধারণত ভেরিয়েবল বাহ্যিকভাবে দৃশ্যমান কিনা তা নির্দেশ করতে ব্যবহৃত হয়। কোডটিতে, TheAnswer আমার কাছে ব্যক্তিগত সম্পত্তি নয়, একটি সরকারী সম্পত্তি হিসাবে দেখায়। আমি প্রকৃতপক্ষে কনস্ট-অ্যানসওয়ার এবং কনস্টেঅনসওয়ারের মতো একটি উপসর্গ নিয়ে যেতে পছন্দ করব।
এফরিন

52
মানটি 42 না হওয়া বাদে আমি TheAnswer স্বরলিখনের সাথে যেতে চাই, সেক্ষেত্রে আমি অবশ্যই ALL_CAPS পদ্ধতির সাথে লেগে থাকি।
বেনোইটটার

4
একটি ব্যক্তিগত ক্ষেত্র উট কেস করা উচিত নয়, ঘটনাটি যদি কনস্টেন্ট হয়?
মার্কাস মায়ার

70

দৃশ্যত, আপার কেসটি যাবার উপায়। এটি সেভাবেই স্বীকৃত। স্বতন্ত্রতার জন্য এবং অনুমান করার কোনও সুযোগ না রেখে আমি ইউপিপিসিএসসিএসএর পক্ষে ভোট দিই!

const int THE_ANSWER = 42;

দ্রষ্টব্য : পৃষ্ঠার শীর্ষে এবং বুদ্ধিদীপ্ত উদ্দেশ্যে একই ফাইলের মধ্যে যখন ধ্রুবকগুলি ব্যবহার করা হয় তখন উচ্চতর কেস কার্যকর হবে; তবে, যদি তাদের একটি স্বাধীন শ্রেণিতে স্থানান্তরিত করা হয় তবে, উচ্চতর কেস ব্যবহার করা খুব একটা তাত্পর্যপূর্ণ করবে না, উদাহরণস্বরূপ:

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }

5
আমিও এটিকে পছন্দ করি কারণ পাস্কাল কেসিং কোনও সম্পত্তি রেফারেন্স সহ সহজেই বিভ্রান্ত হতে পারে।
বিসি

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

23
@ ইউজফুলবি "এসএনএকে। এই উত্তরটি ভুল। সি # তে কনসেটগুলির জন্য সঠিক ক্ষেত্রেটি হ'ল "শিরোনামক্যাস"।
BrainSlugs83

13
@ ব্রেনস্লাগস ৩৮, আমি মনে করি না যে এখানে সঠিক বা ভুল আছে; এটি অগ্রাধিকারে নেমে আসে এবং কোডটি কী আরও পরিষ্কার করে।
দরকারী

2
@ ব্যবহারযোগ্যবি সম্মত হন তবে এটি লেখার sensকমত্যের উপায়টি কী তা চিহ্নিত করা এখনও ভাল । আমি ইদানীং রুবি কোডটি প্রচুর পরিমাণে করছি, এবং আমার মনে হয় SCREAMING_SNAKE_CASE এর অর্থটি বোঝা যাচ্ছে: এটি খুব স্পষ্ট। যে এটি বিশেষ কিছু, এবং এটি কী তা জানতে আপনার এমনকি সংজ্ঞা / হোভারেও যেতে হবে না। আপনি তা অবিলম্বে জানবেন।
প্রতি লন্ডবার্গ

69

আসলে, এটা হয়

private const int TheAnswer = 42;

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


23

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

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

আমার উপসংহার: উটের আবরণ নিয়ে যান। সম্ভবত আমি আমার স্টাইলটিও পরিবর্তন করব ;-)

সম্পাদনা:

আইএমও, হানিথির গন্ধের কিছু আসলেই একটি বৈধ যুক্তি নয়। প্রশ্নটি সর্বদা হওয়া উচিত: এটি সাহায্য করে, না আঘাত দেয়?

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


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

2
সংকলনের আগে আজকের আইডিইগুলি অনেকগুলি সমস্যায় পড়ে। আমি মনে করি না যে নাম অনুসারে ধ্রুবক সনাক্ত করা গুরুত্বপূর্ণ, অন্যথায় আপনার কেবল পঠনযোগ্য ভেরিয়েবলগুলির জন্য কোনও বিশেষ নাম যুক্ত করা উচিত নয়?
mmiika

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

7
@ টিম: আমি একমত, শেষ পর্যন্ত প্রিপ্রোসেসর ম্যাক্রো ভালোর চেয়ে আরও বেশি ক্ষতি নিয়ে এসেছিল। আমার সবচেয়ে প্রিয় পিপি ম্যাক্রো: "#DEFINE বেসরকারী পাবলিক" ;-)
ট্রেব

1
@ টিম: সি ++ স্ট্যান্ডার্ড টেম্পেট লাইব্রেরি ধ্রুবকদের যেমন নিম্নমানের স্ট্রাইড :: স্ট্রিং :: এনপোস ( সিপ্লিপ্লাসস / রেফারেন্স / স্ট্রিং / স্ট্রিং / এনপোস ) এর জন্য নিম্নতর কেস গ্রহণ করেছে । সুতরাং ALL_CAPS কেবলমাত্র ম্যাক্রোগুলি এবং প্রাক প্রসেসর নির্দেশিকাদের জন্য- যা এটি সি # তে আরও বেশি বোকা দেখায়।
রিচার্ড ডিঙ্গওয়াল

16

প্রথমত, হাঙ্গেরিয়ান নোটেশন একটি প্যারামিটারের ডেটা টাইপ বা ইচ্ছাকৃত ব্যবহার প্রদর্শনের জন্য একটি উপসর্গ ব্যবহার করার অনুশীলন। জন্য মাইক্রোসফট এর নামকরণ নিয়মাবলী হাঙ্গেরীয় স্বরলিপি করার কোন বলছেন http://en.wikipedia.org/wiki/Hungarian_notation http://msdn.microsoft.com/en-us/library/ms229045.aspx

এখানে বর্ণিত হিসাবে UPPERCASE ব্যবহার করা উত্সাহিত নয়: পাস্কাল কেস গ্রহণযোগ্য কনভেনশন এবং স্ক্রিমিং ক্যাপস। http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

মাইক্রোসফ্ট এখানে আরও জানিয়েছে যে বিদ্যমান স্কীমের সাথে মেলে কাজ করার জন্য UPPERCASE ব্যবহার করা যেতে পারে। http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

এটি বেশ পরিমাণে এটির যোগসাজস করে।


3
হ্যাঁ, হাঙ্গেরিয়ান স্বরলিপিটি সমস্ত ক্যাপ নয়।
স্নিবিট করে

13

কনস্ট্যান্টস (সি # প্রোগ্রামিং গাইড) এর নিবন্ধে মাইক্রোসফ্ট নিম্নলিখিত উদাহরণ দেয়:

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

সুতরাং, ধ্রুবকগুলির জন্য, এটি মাইক্রোসফ্ট ব্যবহারের প্রস্তাব দিচ্ছে বলে মনে হচ্ছেcamelCasing । তবে মনে রাখবেন যে এই ধ্রুবকগুলি স্থানীয়ভাবে সংজ্ঞায়িত হয় ।

যুক্তিযুক্তভাবে, বাহ্যিকভাবে দৃশ্যমান ধ্রুবকগুলির নামকরণ আরও আগ্রহের বিষয়। অনুশীলনে, মাইক্রোসফ্ট .NET বর্গ লাইব্রেরিতে ক্ষেত্র হিসাবে তার পাবলিক কনস্ট্যান্টগুলির নথি দেয় । এখানে কিছু উদাহরন:

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

তদুপরি, এর মূলধন কনভেনশন ডকুমেন্টে, মাইক্রোসফ্ট খুব সরাসরি বলে যে ক্ষেত্র শনাক্তকারীদের নামকরণের মাধ্যমে নাম দেওয়া উচিত PascalCasingএবং ম্যাসেজকিউ.ইনফিনেটটাইমআউট এবং ইউআইএনটি 32 এর জন্য নিম্নলিখিত উদাহরণগুলি দেয় : মিন :

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

উপসংহার: ব্যবহার করুন PascalCasingপ্রকাশ্য ধ্রুবক জন্য (যা হিসাবে নথিভুক্ত করা হয় constবা static readonlyক্ষেত্র)।

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


এই নিবন্ধটি লিখেছেন এমন বিকাশকারী স্পষ্টতই সি # এর জন্য মাইক্রোসফ্টের প্রস্তাবিত স্টাইলিং কনভেনশন অনুসরণ করেননি।
BrainSlugs83

2
এই উত্তরটি দ্বারা চিহ্নিত নিবন্ধটি পরিবর্তিত হয়েছে। কনসেন্টগুলি এখন সর্বজনীন এবং পাসক্যাসেল করা হয়েছে। এই দুটি পরিবর্তনই দেওয়া হয়েছে, এটি ব্যক্তিগত ধ্রুবকদের পাস্কেলকেসড বা উট কেস হওয়া উচিত কিনা তা উত্তর দিতে সহায়তা করে না।
Metalogic

12

হাঙ্গেরীয়দের হাঙ্গেরীয়দের কাছে ছেড়ে দাও।

উদাহরণস্বরূপ আমি এমনকি সুনির্দিষ্ট নিবন্ধটি ছেড়ে দিয়ে চলে যাব with

private const int Answer = 42;

সে উত্তর নাকি এটাই উত্তর?

* পাস্কালটিকে কঠোরভাবে সঠিক হিসাবে সম্পাদনা করা হয়েছে, তবে আমি ভাবছিলাম যে প্রশ্নটি জীবন, মহাবিশ্ব এবং সমস্ত কিছুর আরও উত্তর চেয়েছিল ।


2
এই নির্দিষ্ট ক্ষেত্রে এটি হল উত্তর। তবে কেবলমাত্র আমি এত বেশি ডিএডাম পড়তে পছন্দ করি।
Treb

হ্যাঁ, তবে প্রশ্ন কি? এবং অসুবিধার লাইনের জন্য আমাকে দুঃখিত হিসাবে খাওয়াবেন না;)
কবুতর

2
আহ, তবে যেহেতু আপনি ইতিমধ্যে উত্তরটি জানেন তাই আপনি প্রশ্নটি জানতে পারবেন না। তারা পারস্পরিক একচেটিয়া। (আপনারা ইতিমধ্যে এটি ইতিমধ্যে জানতেন !
ট্রেব

এটি ওপি-র প্রশ্নের সঠিক উত্তর। - আমি Theযদি পারতাম তবে মুছে ফেলার জন্য আমি আপনাকে দু'বার উজ্জীবিত করেছি। :-)
BrainSlugs83

কেউ কি হাঙ্গেরিয়ান, এই উত্তরটি কি বলে যে তাদের অন্য সম্মেলনটি ব্যবহার করার অনুমতি দেওয়া হয়েছে?
ক্যাপ্টেন প্রিনি 28:39


6

ALL_CAPS আমার বিশ্বাস সি এবং সি ++ কাজের পদ্ধতি থেকে নেওয়া হয়েছে। এই নিবন্ধটি এখানে শৈলীর পার্থক্য সম্পর্কে কীভাবে ব্যাখ্যা করেছে তা ব্যাখ্যা করে।

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

FxCop এবং মাইক্রোসফট StyleCop সফ্টওয়্যার সহায়তা করবে নির্দেশিকা দিতে এবং আপনার কোড পরীক্ষা যাতে সবাই একই ভাবে কাজ করে।

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