নামকরণ কনভেনশন - সি ++ এবং সি # ভেরিয়েবলগুলিতে আন্ডারস্কোর


146

_varশ্রেণীর ক্ষেত্রে একটি পরিবর্তনশীল নাম দেখতে সাধারণ । আন্ডারস্কোর বলতে কী বোঝায়? এই সমস্ত বিশেষ নামকরণের সম্মেলনের জন্য কি কোনও রেফারেন্স রয়েছে?



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

26
@ মাইক - আপনার কম্বল বিবৃতি ঠিক সত্য নয়। আমি খুঁজে পেয়েছি যে এই কনভেনশনটি ব্যবহার করে দ্রুত পদ্ধতিগুলি স্ক্যান করা এবং শ্রেণীর সম্পর্কে ভাল ধারণা পাওয়া অনেক সহজ করে তোলে।
কেওসপ্যান্ডিয়ন

12
@ চাওসপ্যান্ডিয়ন: তারপরে এটি কম্বল স্টেটমেন্ট হিসাবে পড়বেন না। "কিছু" এর অর্থ "সব" নয়, এবং "সবসময়" এর অর্থ "সর্বদা" নয়, এবং সম্ভবত আপনি আমার অভিজ্ঞতার ব্যতিক্রম।
মাইক সিমুর

17
সি ++ এ, শীর্ষস্থানীয় আন্ডারস্কোরগুলি এড়িয়ে চলুন । অনেকগুলি প্রসঙ্গে (যেমন, বৈশ্বিক পরিমণ্ডলে, যখন মূলধনপত্র অনুসরণ করা হয় ইত্যাদি) সেগুলি প্রয়োগের জন্য সংরক্ষিত থাকে এবং আপনি আসলে তাদের উপর কিছু ম্যাক্রো পদদলিত হওয়ার ঝুঁকি নিয়ে থাকেন। সুতরাং আপনি যদি এগুলি চান তবে তাদের অনুসরণ করে আন্ডারস্কোর করুন
এসবিআই

উত্তর:


120

আন্ডারস্কোরটি কেবল একটি সম্মেলন; বেশি না. যেমন, এর ব্যবহার প্রতিটি ব্যক্তির কাছে সর্বদা কিছুটা আলাদা। প্রশ্নে দুটি ভাষার জন্য আমি কীভাবে তাদের বুঝতে পারি তা এখানে:

সি ++ এ, একটি আন্ডারস্কোর সাধারণত একটি প্রাইভেট সদস্য ভেরিয়েবলকে নির্দেশ করে।

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

আগে:

private string _name;
public string Name
{
    get { return this._name; }
    set { this._name = value; }
}

পরে:

public string Name { get; set; }

11
যে দলগুলি তাদের সম্পত্তিগুলি অপরিবর্তনীয় হতে চায় বাদে Ex
কেওসপ্যান্ডিয়ন

11
আন্ডারস্কোর দিয়ে শুরু করা শনাক্তকারীগুলি সংকলকটির জন্য সংরক্ষিত। উপসর্গের আন্ডারস্কোরগুলি ব্যবহার করে সংকলক চিহ্নগুলির সাথে দ্বন্দ্ব হতে পারে
থমাস ম্যাথিউজ

12
@ থমাস ম্যাথিউস - সি # তে নেই।
ইএমপি

11
@ চাওসপ্যান্ডিয়ন আমি ধরে নিচ্ছি যে আপনি "অপরিবর্তনীয়" বলতে যা বোঝায় তা আসলে "কেবল পঠনযোগ্য", যার ক্ষেত্রে কেউ ব্যবহার করতে পারে public string Name { get; private set; }। সত্য, এটি পুরোপুরি পরিবর্তনযোগ্য নয়, তবে এটি রয়েছে।
jdmichal

7
@ থমাস একটি শ্রেণীর প্রসঙ্গে, শনাক্তকারীগুলি আন্ডারস্কোর দিয়ে শুরু করে তারপরে সি ++ এ সংরক্ষিত মূলধনী অক্ষর দ্বারা শুরু হয় । _varসংরক্ষিত নেই
টাইলার ম্যাকহেনরি

84

সি ++ তে কোনও পরিবর্তনশীল নাম বা প্যারামিটার নামের আগে আন্ডারস্কোর ব্যবহার না করা ভাল অনুশীলন

আন্ডারস্কোর বা ডাবল আন্ডারস্কোর দিয়ে শুরু হওয়া নামগুলি সি ++ প্রয়োগকারীদের জন্য দেওয়া হয়। আন্ডারস্কোর সহ নামগুলি লাইব্রেরির কাজ করার জন্য সংরক্ষিত।

আপনার যদি সি ++ কোডিং স্ট্যান্ডার্ডে পড়া হয় তবে আপনি প্রথম পৃষ্ঠায় এটি দেখতে পাবেন:

"নামকরণকে ওভারগ্রিজিট করবেন না, তবে একটি নিয়মিত নামকরণ কনভেনশন ব্যবহার করবেন: কেবলমাত্র দুটি মাত্র ডস রয়েছে: ক)" আন্ডারহ্যান্ডড নামগুলি "কখনও ব্যবহার করবেন না যেগুলি আন্ডারস্কোর দিয়ে শুরু হয় বা যার মধ্যে ডাবল আন্ডারস্কোর থাকে;" (পি 2, সি ++ কোডিং স্ট্যান্ডার্ডস, হার্ব সটার এবং আন্দ্রে আলেকজান্ড্রেসকু)

আরও সুনির্দিষ্টভাবে, আইএসও কার্যনির্বাহী খসড়াটি আসল বিধিগুলি জানিয়েছে:

এছাড়াও, কিছু শনাক্তকারী সি ++ বাস্তবায়ন দ্বারা ব্যবহারের জন্য সংরক্ষিত এবং অন্যথায় ব্যবহৃত হবে না; কোন ডায়গনিস্টিক প্রয়োজন হয় না। (ক) প্রতিটি শনাক্তকারী যাতে ডাবল আন্ডারস্কোর __ থাকে বা আন্ডারস্কোর দিয়ে শুরু হয় তারপরে বড় হাতের অক্ষর ব্যবহার হয় কোনও ব্যবহারের জন্য প্রয়োগের জন্য সংরক্ষিত। (খ) আন্ডারস্কোর দিয়ে শুরু হওয়া প্রতিটি শনাক্তকারী গ্লোবাল নেমস্পেসে নাম হিসাবে ব্যবহারের জন্য প্রয়োগের জন্য সংরক্ষিত।

উপরোক্ত সীমাবদ্ধতার কোনওটিতে যদি আপনি দুর্ঘটনাক্রমে ঘুরে বেড়ান তবে আন্ডারস্কোর দিয়ে একটি প্রতীক শুরু করা এড়ানো ভাল অনুশীলন।

আপনি নিজেই এটি দেখতে পারেন যে কোনও সফ্টওয়্যার তৈরি করার সময় আন্ডারস্কোরগুলির কেন এমন ব্যবহার বিপর্যয়কর হতে পারে:

এটির মতো একটি সাধারণ হ্যালো ওয়ার্ল্ড। সিপি প্রোগ্রাম সংকলনের চেষ্টা করুন:

g++ -E helloWorld.cpp

আপনি পটভূমিতে যা ঘটবে তা দেখতে পাবেন। এখানে একটি স্নিপেট রয়েছে:

   ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
   try
     {
       __streambuf_type* __sb = this->rdbuf();
       if (__sb)
  {
    if (__sb->pubsync() == -1)
      __err |= ios_base::badbit;
    else
      __ret = 0;
  }

ডাবল আন্ডারস্কোর দিয়ে কত নাম শুরু হবে তা আপনি দেখতে পারবেন!

এছাড়াও যদি আপনি ভার্চুয়াল সদস্য ফাংশনগুলির দিকে তাকান, আপনি দেখতে পাবেন যে * _vptr হ'ল ভার্চুয়াল টেবিলের জন্য উত্পন্ন পয়েন্টার যা আপনার ক্লাসে এক বা একাধিক ভার্চুয়াল সদস্য ফাংশন ব্যবহার করার পরে স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়! তবে এটি অন্য গল্প ...

আপনি যদি আন্ডারস্কোরগুলি ব্যবহার করেন তবে আপনি সংঘাতের সমস্যার মধ্যে পড়তে পারেন এবং দেরি না হওয়া অবধি আপনার কোনও কারণ নেই ID


4
যে নামগুলি বিশ্বব্যাপী বা ফাইলের স্কোপ নয় এবং আন্ডারস্কোর এবং ছোট ছোট অক্ষর দিয়ে শুরু হয় তা কি ঠিক আছে? আমি সর্বদা এটি করি কারণ এটি নির্দিষ্ট ক্ষেত্রে যেমন খুব পরিষ্কার, যেমন: অকার্যকর এ :: সেট_সাইজ (ইন _ সাইজ) {আকার = _ সাইজ; }। আপনি এর মতো তুচ্ছ ব্যবহারের জন্য কী করবেন?
tukra

3
একটি ছোট মামলার চিঠি অনুসরণ করা ইনসকোরের অ-গ্লোবাল / ফাইল স্কোপে আমার বিশ্বাস। আপনি কি আমাকে দেখাতে পারেন যেখানে স্ট্যান্ডার্ডে এটি বলে না? আন্ডারস্কোর অনুসরণ করার সমস্যাটি আমি ইতিমধ্যে কখনও কখনও সদস্য ভারগুলির জন্য ব্যবহার করি। সুতরাং আমার 'ইনট সাইজ ()' ফাংশন থাকতে পারে; সদস্য var 'int আকার_;'; এবং যুক্তি 'ইন্ট _ সাইজ'। এটি জিনিসগুলিকে সুন্দরভাবে আচ্ছাদন করে এবং এর চেয়ে ভাল বিকল্প আমি দেখি না। এসটিএল নিয়ে কাজ করে এমন জেনারিকদের জন্য মূলধনযুক্ত ফুনাক্স সম্ভব নয়। সি # জনগণের মতো 'এই.সাইজ' শৈলীটি আমার কাছে ত্রুটি বলে মনে হচ্ছে যদি না আপনি সর্বদা এটি সদস্যের অ্যাক্সেসের জন্য ব্যবহার করেন যা কুৎসিত।
টুকরা

7
আমি বুঝতে পারি যে কিছু লোক আন্ডারস্কোর এবং একটি ছোট হাতের অক্ষর ব্যবহার করতে চান না কারণ তাদের আইনী কি তা পরিষ্কার রাখতে সমস্যা হতে পারে। কিছু লেখক এটি ব্যবহার না করার প্রস্তাব দিলেও সি ++ স্ট্যান্ডার্ড এটিকে অনুমতি দেয়। আমার জন্য, যেহেতু এটি সম্পূর্ণ আইনী এবং সংরক্ষিত নয়, তাই আমি এটিকে ঝুঁকিপূর্ণ মনে করার কোনও কারণ দেখতে পাচ্ছি না। আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ।
টুকরা

3
@ টুকরা: এটি সম্পূর্ণ আইনী নয়। সি ++ স্ট্যান্ডার্ড আপনাকে কেবলমাত্র স্থানীয় স্কোয়ারে একটি ছোট হাতের অক্ষর অনুসরণ করে একটি একক আন্ডারস্কোর ব্যবহার করার অনুমতি দেয়। শুভকামনা! :-)
কনস্টান্টিনোস গ্লেনোস

4
দুঃখিত। আমি ভেবেছিলাম যোগ্যতার পুনরাবৃত্তি করা আমাদের অতীতে প্রয়োজন ছিল। আন্ডারস্কোর দিয়ে শুরু হওয়া একটি সি ++ শনাক্তকারীকে তার পরে ফাইল স্কোপ ব্যতীত অন্য সুযোগে অনুমোদিত হয় allowed এটি ফাংশন, ফাংশন প্রোটোটাইপস, শ্রেণি, স্ট্রাক্ট, ইউনিয়ন, এনাম এবং আপনি যে কোনও নামের জায়গাতে রেখেছেন তাতে সুরক্ষিত এবং আইনী। যদি আপনি আপনার সমস্ত কোডকে নেমস্পেসে রাখার সাধারণ অভ্যাসটি অনুসরণ করেন তবে আপনি সম্পূর্ণ নিরাপদ।
tukra

45

আসলে _varকনভেনশনটি ভিবি থেকে আসে না সি # বা সি ++ (এম _, ... অন্য জিনিস)।

প্রোপার্টি ঘোষণার সময় এটি ভিবি-র সংবেদনশীলতা কাটিয়ে উঠেছে।

উদাহরণস্বরূপ, এই জাতীয় কোড ভিবিতে সম্ভব নয় কারণ এটি বিবেচনা করে userএবং Userএকই শনাক্তকারী হিসাবে

Private user As String

Public Property User As String
  Get
    Return user
  End Get
  Set(ByVal Value As String)
    user = value
  End Set
End Property

সুতরাং এটিকে কাটিয়ে উঠতে, কেউ কেউ কনভেনশন ব্যবহার করে বেসরকারী ক্ষেত্রে '_' যুক্ত করার জন্য এসেছিল

Private _user As String

Public Property User As String
  Get
    Return _user
  End Get
  Set(ByVal Value As String)
    _user = value
  End Set
End Property

যেহেতু অনেকগুলি কনভেনশন। নেট এবং সি # এটি ভিবি.এনইটি কনভেনশনের মধ্যে কিছুটা অভিন্নতা বজায় রাখার জন্য, তাই তারা একই ব্যবহার করছে।

আমি কি আমি বলছিলাম রেফারেন্স পাওয়া যায়নি: http://10rem.net/articles/net-naming-conventions-and-programming-standards---best-practices

নেতৃস্থানীয় আন্ডারস্কোর সহ উটের কেস। VB.NET এ সর্বদা "সুরক্ষিত" বা "ব্যক্তিগত" নির্দেশ করুন, "ডিম" ব্যবহার করবেন না। "এম_" এর ব্যবহারকে নিরুৎসাহিত করা হয়েছে, যেমন একটি পরিবর্তনশীল নাম ব্যবহার করা হয় যা কেবলমাত্র ক্ষেত্রে থেকে সম্পত্তি থেকে পৃথক হয়, বিশেষত সুরক্ষিত ভেরিয়েবলগুলি যা সম্মতি লঙ্ঘন করে, এবং আপনি যদি ভিবি.এনইটি তে প্রোগ্রাম করেন তবে আপনার জীবনকে ব্যথা করে তুলবে আপনার সদস্যদের অ্যাক্সেসর / মিউটর বৈশিষ্ট্য থেকে আলাদা কিছু নাম রাখতে হবে। এখানে থাকা সমস্ত আইটেমগুলির মধ্যে, শীর্ষস্থানীয় আন্ডারস্কোরটিই কেবলমাত্র বিতর্কিত। আমি ব্যক্তিগতভাবে এটি আমার ব্যক্তিগত ভেরিয়েবলের জন্য সোজা আন্ডারস্কোর-কম উটের ক্ষেত্রে বেশি পছন্দ করি যাতে আমাকে "এটির" দিয়ে ভেরিয়েবলের যোগ্যতা অর্জন করতে না হয়। কনস্ট্রাক্টরগুলিতে বা অন্য কোথাও যেখানে আমার নামকরণের সংঘর্ষ হবে সেগুলির সাথে পরামিতিগুলি থেকে আলাদা করতে। ভিবি.এনইটি কেটের সংবেদনশীলতার সাথে, এটি আরও বেশি গুরুত্বপূর্ণ কারণ আপনার অ্যাক্সেসরের বৈশিষ্ট্যগুলিতে আন্ডারস্কোর ব্যতীত আপনার ব্যক্তিগত সদস্যের ভেরিয়েবলগুলির সাধারণত একই নাম থাকবে। এম_ যতদূর যায়, এটি সত্যিই কেবল নন্দনতত্ত্ব সম্পর্কে। আমি (এবং আরও অনেকগুলি) মি_ কুরুচিপূর্ণ দেখতে পাই, কারণ দেখে মনে হচ্ছে ভেরিয়েবল নামের কোনও ছিদ্র রয়েছে। এটা প্রায় আপত্তিকর। আমি এটি সর্বদা ভিবি 6 এ ব্যবহার করতাম তবে এটি কেবল কারণ ভেরিয়েবলগুলির একটি শীর্ষস্থানীয় আন্ডারস্কোর না থাকতে পারে। আমি এটিকে দূরে যেতে দেখে খুশি হতে পারি না। মাইক্রোসফ্ট m_ (এবং সরল _) এর বিপরীতে সুপারিশ করে যদিও তারা তাদের কোড উভয়ই করেছে। এছাড়াও, সরাসরি "মি" দিয়ে উপসর্গ করা ঠিক ঠিক আছে। অবশ্যই যেহেতু তারা মূলত সি # তে কোড করে, তাই তাদের ব্যক্তিগত সদস্য থাকতে পারে যা কেবলমাত্র সম্পত্তি থেকে পৃথক হয়। ভিবি লোকেরা অন্য কিছু করতে হবে। ভাষা-ভাষা বিশেষ ক্ষেত্রে চেষ্টা করার চেষ্টা করার পরিবর্তে, আমি সমস্ত ভাষার জন্য নেতৃস্থানীয় আন্ডারস্কোর প্রস্তাব করি যা এটি সমর্থন করবে। আমি যদি চাই আমার ক্লাসটি পুরোপুরি সিএলএস-অনুগত হয়, আমি কোনও সি # সুরক্ষিত সদস্য ভেরিয়েবলের উপসর্গটি ছেড়ে দিতে পারি। বাস্তবে, তবে আমি কখনই এ নিয়ে চিন্তিত হই না কারণ আমি সমস্ত সম্ভাব্য সুরক্ষিত সদস্য ভেরিয়েবলগুলি ব্যক্তিগত রাখি এবং পরিবর্তে সুরক্ষিত অ্যাক্সেসর এবং মিউটর সরবরাহ করি। কেন: সংক্ষেপে, এই সম্মেলনটি সহজ (একটি চরিত্র), পড়তে সহজ (আপনার চোখ অন্য নেতৃস্থানীয় চরিত্রগুলি দ্বারা বিভ্রান্ত হয় না), এবং কার্য-স্তরের ভেরিয়েবল এবং শ্রেণি-স্তরের বৈশিষ্ট্যগুলির সাথে সংঘর্ষের নামকরণকে সফলভাবে এড়িয়ে চলে lass শ্রেণির-স্তরের বৈশিষ্ট্যগুলি । আমি সমস্ত ভাষার জন্য নেতৃস্থানীয় আন্ডারস্কোর প্রস্তাব করি যা এটি সমর্থন করবে। আমি যদি চাই আমার ক্লাসটি পুরোপুরি সিএলএস-অনুগত হয়, আমি কোনও সি # সুরক্ষিত সদস্য ভেরিয়েবলের উপসর্গটি ছেড়ে দিতে পারি। বাস্তবে, তবে আমি কখনই এ নিয়ে চিন্তিত হই না কারণ আমি সমস্ত সম্ভাব্য সুরক্ষিত সদস্য ভেরিয়েবলগুলি ব্যক্তিগত রাখি এবং পরিবর্তে সুরক্ষিত অ্যাক্সেসর এবং মিউটর সরবরাহ করি। কেন: সংক্ষেপে, এই সম্মেলনটি সহজ (একটি চরিত্র), পড়তে সহজ (আপনার চোখ অন্য নেতৃস্থানীয় চরিত্রগুলি দ্বারা বিভ্রান্ত হয় না), এবং কার্য-স্তরের ভেরিয়েবল এবং শ্রেণি-স্তরের বৈশিষ্ট্যগুলির সাথে সংঘর্ষের নামকরণকে সফলভাবে এড়িয়ে চলে lass শ্রেণির-স্তরের বৈশিষ্ট্যগুলি । আমি সমস্ত ভাষার জন্য নেতৃস্থানীয় আন্ডারস্কোর প্রস্তাব করি যা এটি সমর্থন করবে। আমি যদি চাই আমার ক্লাসটি পুরোপুরি সিএলএস-অনুগত হয়, আমি কোনও সি # সুরক্ষিত সদস্য ভেরিয়েবলের উপসর্গটি ছেড়ে দিতে পারি। বাস্তবে, তবে আমি কখনই এ নিয়ে চিন্তিত হই না কারণ আমি সমস্ত সম্ভাব্য সুরক্ষিত সদস্য ভেরিয়েবলগুলি ব্যক্তিগত রাখি এবং পরিবর্তে সুরক্ষিত অ্যাক্সেসর এবং মিউটর সরবরাহ করি। কেন: সংক্ষেপে, এই সম্মেলনটি সহজ (একটি চরিত্র), পড়তে সহজ (আপনার চোখ অন্য নেতৃস্থানীয় চরিত্রগুলি দ্বারা বিভ্রান্ত হয় না), এবং কার্য-স্তরের ভেরিয়েবল এবং শ্রেণি-স্তরের বৈশিষ্ট্যগুলির সাথে সংঘর্ষের নামকরণকে সফলভাবে এড়িয়ে চলে lass শ্রেণির-স্তরের বৈশিষ্ট্যগুলি । আমি কখনই এই সম্পর্কে উদ্বিগ্ন হব না কারণ আমি সমস্ত সম্ভাব্য সুরক্ষিত সদস্য ভেরিয়েবলগুলি ব্যক্তিগত রাখি এবং পরিবর্তে সুরক্ষিত অ্যাক্সেসর এবং মিউটর সরবরাহ করি। কেন: সংক্ষেপে, এই সম্মেলনটি সহজ (একটি চরিত্র), পড়তে সহজ (আপনার চোখ অন্য নেতৃস্থানীয় চরিত্রগুলি দ্বারা বিভ্রান্ত হয় না), এবং কার্য-স্তরের ভেরিয়েবল এবং শ্রেণি-স্তরের বৈশিষ্ট্যগুলির সাথে সংঘর্ষের নামকরণকে সফলভাবে এড়িয়ে চলে lass শ্রেণির-স্তরের বৈশিষ্ট্যগুলি । আমি কখনই এই সম্পর্কে উদ্বিগ্ন হব না কারণ আমি সমস্ত সম্ভাব্য সুরক্ষিত সদস্য ভেরিয়েবলগুলি ব্যক্তিগত রাখি এবং পরিবর্তে সুরক্ষিত অ্যাক্সেসর এবং মিউটর সরবরাহ করি। কেন: সংক্ষেপে, এই সম্মেলনটি সহজ (একটি চরিত্র), পড়তে সহজ (আপনার চোখ অন্য নেতৃস্থানীয় চরিত্রগুলি দ্বারা বিভ্রান্ত হয় না), এবং কার্য-স্তরের ভেরিয়েবল এবং শ্রেণি-স্তরের বৈশিষ্ট্যগুলির সাথে সংঘর্ষের নামকরণকে সফলভাবে এড়িয়ে চলে lass শ্রেণির-স্তরের বৈশিষ্ট্যগুলি ।


6

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

অন্যান্য উত্তরগুলির অবস্থা হিসাবে, এটি শ্রেণীর সদস্যের ভেরিয়েবলগুলি সনাক্ত করতে সি ++ এ ব্যবহৃত হত। যাইহোক, সজ্জাকার বা সিনট্যাক্স হিসাবে এটির কোনও বিশেষ অর্থ নেই। সুতরাং আপনি যদি এটি ব্যবহার করতে চান তবে এটি সংকলন করবে।

আমি সি # আলোচনা অন্যকে ছেড়ে দেব।


5

_var এর কোনও অর্থ নেই এবং কেবল এটি সহজেই পৃথক করা যায় যা ভেরিয়েবলটি একটি ব্যক্তিগত সদস্যের পরিবর্তনশীল purpose

সি ++ এ, _ভার কনভেনশন ব্যবহার করা খারাপ রূপ, কারণ শনাক্তকারীর সামনে আন্ডারস্কোর ব্যবহারের নিয়ম রয়েছে। _var গ্লোবাল আইডেন্টিফায়ার হিসাবে সংরক্ষিত রয়েছে, যখন _ ভার (আন্ডারস্কোর + মূলধনপত্র) যে কোনও সময় সংরক্ষিত থাকে। এই কারণেই সি ++ এ, আপনি পরিবর্তে লোক_ কনভেনশন ব্যবহার করছেন see


4

আপনি নিজের কোডিং গাইডলাইন তৈরি করতে পারেন। দলের বাকিদের জন্য কেবল একটি পরিষ্কার ডকুমেন্টেশন লিখুন।

_ফিল্ড ব্যবহার করে ইন্টেলিলেন্সকে কেবলমাত্র টাইপিং করে সমস্ত শ্রেণীর ভেরিয়েবল ফিল্টার করতে সহায়তা করে।

আমি সাধারণত ব্র্যাড অ্যাডামস নির্দেশিকা অনুসরণ করি তবে এটি আন্ডারস্কোর ব্যবহার না করার পরামর্শ দেয় recommend


2

সি # এর মাইক্রোসফ্ট নামকরণের মানটি বলছে যে ভেরিয়েবল এবং পরামিতিগুলির উচিত নিম্ন উটের কেস ফর্ম আইই: ব্যবহার করা উচিত paramName। মান এছাড়াও ক্ষেত্র একই ফর্ম অনুসরণ করতে কিন্তু এই এত দল স্বচ্ছতা উন্নত করতে একটি আন্ডারস্কোর উপসর্গ জন্য কল অস্পষ্ট কোড হতে পারে কল অর্থাৎ, _fieldName


2

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

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


যেহেতু হাঙ্গেরিয়ান স্বরলিপি প্রকারটি নির্দেশ করে তাই আমি মনে করি না যে আপনি এটিতে m / s প্রান্তটি সত্যিই বলতে পারেন।
জেরি নিকসন

@ জেরিনিক্সন-এমএসএফটি হাঙ্গেরীয় ধারণার ক্ষেত্রে আমরা কি ভেরিয়েবল ডেটা টাইপ এবং ভেরিয়েবল ভিজিবিলিটি টাইপটিকে একই জিনিস হিসাবে চিহ্নিত করি?
Necro

1

আমি আমার ক্লাসের সদস্য ভেরিয়েবলের জন্য _var নামকরণ ব্যবহার করি। আমি 2 টি প্রধান কারণ আছে:

1) পরে যখন আমি আমার কোডটি পড়ছি এটি ক্লাস ভেরিয়েবল এবং স্থানীয় ফাংশন ভেরিয়েবলগুলি ট্র্যাক রাখতে সহায়তা করে।

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


1
হোভার ইন্টেলিজেন্স বা স্ক্যানের উপর নির্ভর করে স্থানীয়ভাবে কোনও ভেরিফ সংজ্ঞায়িত হয়েছে কিনা তা দেখার জন্য এটি বৃহত্তর পদ্ধতির ঝামেলা is আপনার উল্লেখযোগ্য কারণে স্ট্যাটিকসের জন্য "__" কেও পছন্দ করুন তবে এটি বর্তমানে অনুকূল নয়।
ক্রোকুসেক

1

যতদূর সি এবং সি ++ ভাষা সম্পর্কিত, নামের (আদি, মধ্য বা শেষ) কোনও আন্ডারস্কোরের কোনও বিশেষ অর্থ নেই। এটি কেবল একটি বৈধ পরিবর্তনশীল নামের অক্ষর। "সম্মেলনগুলি" কোডিং সম্প্রদায়ের মধ্যে কোডিং অনুশীলন থেকে আসে।

উপরে ইতিমধ্যে বিভিন্ন উদাহরণ দ্বারা ইঙ্গিত হিসাবে, _ শুরুর অর্থ সি ++ এর কোনও শ্রেণীর ব্যক্তিগত বা সুরক্ষিত সদস্য হতে পারে।

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

সুতরাং _ এই ক্ষেত্রে স্থানীয় "মেশিন" স্থানীয় হিসাবে ব্যবহৃত হত stuff সাধারণত _ ফাংশন () পোর্টেবল ছিল না। এতে আপনার বিভিন্ন প্ল্যাটফর্ম জুড়ে একই আচরণের আশা করা উচিত নয়।

এখন যেমন চলক নাম _ যেমন

int _foo;

মনস্তাত্ত্বিকভাবে ভাল, একটি _ শুরুর দিকে টাইপ করতে একটি বিজোড় জিনিস। সুতরাং আপনি যদি কোনও ভেরিয়েবলের নাম তৈরি করতে চান যা অন্য কোনও কিছুর সাথে সংঘর্ষের সম্ভাবনা কম থাকে, প্রাক-প্রসেসরের বিকল্পগুলির সাথে ডিল করার সময় আপনি _ এর ব্যবহার বিবেচনা করতে চান।

আমার মূল পরামর্শটি হ'ল আপনার কোডিং সম্প্রদায়ের কনভেনশনটি সর্বদা অনুসরণ করা, যাতে আপনি আরও কার্যকরভাবে সহযোগিতা করতে পারেন।


0

এর সহজ অর্থ হ'ল এটি শ্রেণিতে একটি সদস্য ক্ষেত্র।


0

কোনও নির্দিষ্ট একক নামকরণের সম্মেলন নেই, তবে আমি এটি ব্যক্তিগত সদস্যদের জন্য দেখেছি।


0

অনেকে আন্ডারস্কোর সহ প্রাইভেট ফিল্ড পছন্দ করতে চান। এটি কেবল একটি নামকরণের সম্মেলন।

সি # এর 'অফিসিয়াল' নামকরণের কনভেনশনগুলি ব্যক্তিগত ক্ষেত্রগুলির জন্য সহজ ছোট হাতের নাম (আন্ডারস্কোর নয়) লিখে দেয়।

আমি সি ++ এর জন্য স্ট্যান্ডার্ড কনভেনশন সম্পর্কে সচেতন নই, যদিও আন্ডারস্কোরগুলি বহুল ব্যবহৃত হয়।


0

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

যাইহোক, এগুলি কেবল সম্মেলন এবং আপনি তাদের সকলের জন্য একটিও উত্স পাবেন না। তারা স্টাইলের বিষয় এবং প্রতিটি প্রোগ্রামিং টিম, প্রকল্প বা সংস্থার নিজস্ব নিজস্ব (বা এমনকি কোনও নেই) রয়েছে।


0

এটি # সি তে ব্যবহার করার সম্পূর্ণ যুক্তিযুক্ত কারণ রয়েছে: যদি কোডটি অবশ্যই ভিবি.এনইটি থেকেও বর্ধিত হয়। (অন্যথায়, আমি না।)

যেহেতু ভিবি.এনইটি কেস সংবেদনশীল, তাই এই কোডটিতে সুরক্ষিত fieldসদস্য অ্যাক্সেস করার সহজ উপায় নেই :

public class CSharpClass
{
    protected int field;
    public int Field { get { return field; } }
}

উদাহরণস্বরূপ, এটি ক্ষেত্র নয়, সম্পত্তি গেটটি অ্যাক্সেস করবে:

Public Class VBClass
    Inherits CSharpClass

    Function Test() As Integer
        Return Field
    End Function

End Class

হেক, আমি fieldছোট হাতের অক্ষরেও লিখতে পারি না - ভিএস 2010 কেবল এটি সংশোধন করে চলেছে।

VB.NET এ উদ্ভূত শ্রেণিতে সহজেই অ্যাক্সেসযোগ্য হওয়ার জন্য, আপনাকে অন্য নামকরণ কনভেনশন নিয়ে আসতে হবে। একটি আন্ডারস্কোরের উপরিভাগ নির্ধারণ করা সম্ভবত তাদের মধ্যে স্বল্পতম অনুপ্রবেশকারী এবং সর্বাধিক "historতিহাসিকভাবে গৃহীত"।


0

এখন এই হিসাবে "এটি" ব্যবহার করে স্বরলিপিটি C_ শ্রেণীর সদস্যের ভেরিয়েবলের জন্য গ্রহণযোগ্য oo এটি পুরানো "এম_" বা কেবল "__" স্বরলিপি প্রতিস্থাপন করে। এটি কোডটি আরও পঠনযোগ্য করে তোলে কারণ রেফারেন্সটি কী তা নিয়ে কোনও সন্দেহ নেই।


0

আমার অভিজ্ঞতা থেকে (অবশ্যই সীমাবদ্ধ), একটি আন্ডারস্কোর নির্দেশ করবে যে এটি একটি ব্যক্তিগত সদস্যের পরিবর্তনশীল। গলুম যেমন বলেছেন, এটি দলের উপর নির্ভর করবে যদিও।


0

পুরানো প্রশ্ন, নতুন উত্তর (সি #)।

সি # এর জন্য আন্ডারস্কোরগুলির আরেকটি ব্যবহার হ'ল এএসপি নেট কোরের ডিআই (নির্ভরতা ইনজেকশন)। readonlyকোনও ক্লাসের ব্যক্তিগত ভেরিয়েবলগুলি যা নির্মাণের সময় ইনজেকশন ইন্টারফেসের জন্য বরাদ্দ করা হয়েছিল সেগুলি একটি আন্ডারস্কোর দিয়ে শুরু করা উচিত। আমি অনুমান করি যে এটি কোনও বিতর্কটি কোনও শ্রেণীর প্রতিটি ব্যক্তিগত সদস্যের জন্য আন্ডারস্কোর ব্যবহার করা উচিত (যদিও মাইক্রোসফ্ট নিজেই এটি অনুসরণ করে) তবে এটি নিশ্চিত।

private readonly ILogger<MyDependency> _logger;

public MyDependency(ILogger<MyDependency> logger)
{
    _logger = logger;
}

-2

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

দৃষ্টান্ত ক্ষেত্র: m_fieldName
স্ট্যাটিক ফিল্ড: s_fieldName
জন / সুরক্ষিত / অভ্যন্তরীণ সদস্য: PascalCasedName ()
ব্যক্তিগত সদস্য: camelCasedName ()

এটি অপরিচিত কোডটি খুব দ্রুত পড়ার সময় লোকের কাঠামো, ব্যবহার, অ্যাক্সেসযোগ্যতা এবং সদস্যদের অবস্থান বুঝতে সহায়তা করে।


3
আসলে, মাইক্রোসফ্ট m_, s_ উপসর্গ ব্যবহার করার পরামর্শ দেয় না। ক্ষেত্রের নামের জন্য একটি উপসর্গ ব্যবহার করবেন না। উদাহরণস্বরূপ, স্ট্যাটিক বনাম অ স্থির ক্ষেত্রের পার্থক্য করতে g_ বা s_ ব্যবহার করবেন না। msdn.microsoft.com/en-us/library/ms229012.aspx
Zied

1
আমি যেমন বলেছি, রিফ্লেক্টরের সাথে তাদের উত্স কোডটি একবার দেখুন। তারা তাদের নিজস্ব প্রস্তাবনা কতটা সংকুচিত করে তা অবাক করে দেবেন। ;) আমার পোস্ট হিসাবে উল্লিখিত হয়েছে, এটি আপনার কোডের পঠনযোগ্যতা উন্নত করতে সহায়তা করে এবং আমার শেষ দলটি উপরে তালিকাভুক্ত নামকরণ কনভেনশনটি সত্যিই পছন্দ করেছে।
জ্রিস্টা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.