আন্ডারস্কোর করা বা আন্ডারস্কোর না করা, এটাই প্রশ্ন


130

বাইনারি সংস্করণটি অন্য কাঠামোর ভাষাগুলি গ্রাস করতে চলেছে যদি সি # তে আন্ডারস্কোর সহ বেসরকারী ক্ষেত্রগুলির উপসীকরণ না করাতে সমস্যা আছে? উদাহরণস্বরূপ যেহেতু সি # কেস সংবেদনশীল তাই আপনি কোনও ক্ষেত্রকে "foo" এবং সরকারী সম্পত্তি "ফু" বলতে পারেন এবং এটি দুর্দান্ত কাজ করে।

নামগুলি কেসিংয়ের মাধ্যমে কেবলমাত্র পৃথক করা হলে ভিবি.এনইটিটির মতো কেস-সংবেদনশীল ভাষায় এর কোনও প্রভাব পড়বে কি কোনও সিএলএস-সম্মতি (বা অন্যান্য) সমস্যা আছে?


18
আন্ডারস্কোর উপসর্গের মূল বিষয়টি, বিটিডাব্লু, কেস সংক্রান্ত সমস্যাগুলি মোকাবেলা করার নয়। কোড পড়ার সময় ক্ষেত্রগুলি এবং স্থানীয়দের সহজেই এবং দর্শনীয়ভাবে বলতে সক্ষম হবেন to আমি এটি সি # এবং ভিবিতে একইভাবে ব্যবহার করব।
নীল হুইট

2
@ নীলহিভিট: আচ্ছা, এটি ফাংশন পরামিতিগুলিকে সদস্য ভেরিয়েবলগুলির সাথে বিরোধ থেকে বাধা দেয়, যার জন্য তাদের প্রত্যেককে প্রিপেন্ডিং প্রয়োজন this, যা সফল হয়। সম্পাদনা: আমি মাত্র চার বছরের পুরানো মন্তব্যে প্রতিক্রিয়া জানিয়েছি ...
এড এস

কেবল স্পষ্টতার জন্য সরকারী মানটি _camelCase(কেবলমাত্র পঠনযোগ্য) github.com/dotnet/corefx/blob/master/Docamentation/…
ক্রিস মেরিসিক

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

উত্তর:


46

এর কোনও প্রভাব পড়বে না।

CLS-অনুবর্তী লাইব্রেরি লেখার জন্য সুপারিশ অংশ নয় দুই সর্বজনীন / সংরক্ষিত সত্ত্বা যে ক্ষেত্রে কেবলমাত্র ভিন্ন যেমন আপনি উচিত হয় না আছে

public void foo() {...}

এবং

public void Foo() {...}

আপনি যা বর্ণনা করছেন তা কোনও সমস্যা নয় কারণ লাইব্রেরির ব্যবহারকারীর কাছে ব্যক্তিগত আইটেম উপলব্ধ নেই


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

2
পিএস ব্যক্তিগতভাবে, আমি সি # তে আন্ডারস্কোর করি না। আমার জন্য এটি ব্যক্তিগত পছন্দ, ধর্মীয় বিশ্বাস নয়
বাইনারি ওয়ারিয়ার

1
আমি উভয়
উপায়েই করেছি

46
আমি আন্ডারস্কোর ব্যবহার করছি। আর্গুমেন্ট এবং স্থানীয় ভেরিয়েবলগুলি থেকে তাদের পার্থক্য করা আরও সহজ।
রিনাত আবদুল্লিন

4
আমি কেবলমাত্র ব্যক্তিগত ক্ষেত্রের জন্য _ ব্যবহার করি, তবে আমি প্রায় 3.5 টি অটোমোটিটির কারণে ব্যক্তিগত ক্ষেত্র কখনও পাই না। সাধারণত আমি ব্যক্তিগত সময়টি কেবলমাত্র তখনই করি যখন আমি অ-আদিম ধরণের উপর অলস লোডিংটি প্রয়োগ করি।
ক্রিস মেরিসিক

278

গুরুত্বপূর্ণ আপডেট (12 এপ্রিল, 2016):

এটি আমাদের নজরে আনা হয়েছিল যে। নেট কোরএফএক্স টিমের অভ্যন্তরীণ মানটি কেন কোনও অন্তর্দৃষ্টি না দিয়ে আন্ডারস্কোর-স্বরলিপি ব্যবহার করার জন্য জোর দেয়। তবে আমরা যদি # 3 নিয়ম এ ঘনিষ্ঠভাবে চেহারা এটা স্পষ্ট হয়ে একটি সিস্টেম আছে যে _, t_, s_উপসর্গ দাড়ায় যে কেন _প্রথম স্থানে নির্বাচিত করা হয়।

  1. আমরা _camelCaseঅভ্যন্তরীণ এবং ব্যক্তিগত ক্ষেত্রগুলির জন্য ব্যবহার করি এবং যেখানে সম্ভব সেখানে পঠনযোগ্য ব্যবহার করি। প্রিফিক্স উদাহরণ ক্ষেত্রগুলি সহ _, স্থির ক্ষেত্রগুলি সহ s_এবং স্ট্যাটিক ক্ষেত্রগুলি সহ থ্রেড করুন t_। যখন স্থির ক্ষেত্রগুলিতে ব্যবহৃত হয়, readonlyতার পরে আসবে static(অর্থাত static readonlyনা readonly static)।
  2. this.একেবারে প্রয়োজনীয় না হলে আমরা এড়াতে পারি ।

সুতরাং আপনি যদি ঠিক নেট নেটফেক্স টিমের মতো কিছু সমালোচনামূলক, মাল্টিথ্রেডেড, সিস্টেম লেভেল কোড নিয়ে কাজ করে থাকেন তবে তা দৃ S়ভাবে সুপারিশ করা হবে যে আপনি:

  • তাদের কোডিং মানগুলিতে মেনে চলুন এবং
  • আন্ডারস্কোর-স্বরলিপি এবং ব্যবহার করুন
  • এই উত্তর আর পড়বেন না

অন্যথায় দয়া করে পড়ুন ...

মূল উত্তর:

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

আন্ডারস্কোর-স্বরলিপি

  • পরামর্শ দেয় যে আপনি ব্যক্তিগত ক্ষেত্রের নামে "_" উপসর্গটি ব্যবহার করুন
  • এটি আরও বলেছে যে একেবারে প্রয়োজনীয় না হলে আপনার কখনই "এটি" ব্যবহার করা উচিত নয়

এই-স্বরলিপি

  • পরামর্শ দেয় আপনি সর্বদা "এটি" ব্যবহার করুন। কোনও উদাহরণ সদস্যকে অ্যাক্সেস করতে

কেন এই স্বরলিপি বিদ্যমান?

কারণ আপনি এইভাবে

  • ক্ষেত্র থেকে কোনও পরামিতি আলাদা করে বলুন যখন তারা একই নাম ভাগ করে নেয়
  • আপনি বর্তমান দৃষ্টান্তের প্রসঙ্গে কাজ করছেন তা নিশ্চিত করুন

উদাহরণ

public class Demo
{
   private String name;
   public Demo(String name) {
       this.name = name;
   }
}

আন্ডারস্কোর-স্বরলিপি কেন বিদ্যমান?

কিছু লোক "এটি" টাইপ করতে পছন্দ করে না তবে তাদের ক্ষেত্র এবং একটি পরামিতি আলাদা করার জন্য একটি উপায় প্রয়োজন, তাই তারা ক্ষেত্রের সামনে "_" ব্যবহার করতে রাজি হয়েছিল

উদাহরণ

public class Demo
{
   private String _name;
   public Demo(String name) {
      _name = name;
   }
}

কেউ ভাবতে পারেন এটি কেবল ব্যক্তিগত স্বাদের বিষয় এবং উভয় উপায় সমানভাবে ভাল / খারাপ। তবে কিছু দিক রয়েছে যেখানে এই স্বরলিপিটি আন্ডারস্কোর-স্বরলিপিটিকে পরাজিত করে:

নির্মলতা

  • আন্ডারস্কোর-নোটেশন ক্লটটারের নাম
  • এই স্বরলিপি নামগুলি অক্ষত রাখে

জ্ঞানীয় লোড

  • আন্ডারস্কোর-স্বরলিপিটি অসঙ্গত, এটি আপনাকে ক্ষেত্রগুলিকে একটি বিশেষ উপায়ে আচরণ করে তবে আপনি এটি অন্য সদস্যদের সাথে ব্যবহার করতে পারবেন না, প্রতিবার আপনার নিজের সম্পত্তি বা ক্ষেত্রের প্রয়োজন কিনা তা নিজেকে জিজ্ঞাসা করার দরকার পড়ে

  • এই স্বরলিপিটি সামঞ্জস্যপূর্ণ, আপনাকে ভাবতে হবে না, আপনি যে কোনও সদস্যকে উল্লেখ করতে সর্বদা "এটি" ব্যবহার করেন

আপডেট: নিম্নলিখিতটি দেখানো হয়েছে যে কোনও সুবিধা পয়েন্ট নয়

রক্ষণাবেক্ষণ

  • আন্ডারস্কোর-স্বরলিপিটি আপনাকে _রিফ্যাক্টর করার সময় নজর রাখা উচিত , বলুন কোনও ক্ষেত্রকে সম্পত্তিতে পরিণত করা (অপসারণ _) বা বিপরীতে (যুক্ত _)

  • এই স্বরলিপি যেমন সমস্যা নেই

স্বতসম্পূর্ণ

যখন আপনার উদাহরণের সদস্যদের তালিকাটি দেখতে হবে:

  • আন্ডারস্কোর-স্বরলিপি আপনাকে খুব বেশি সহায়তা করে না, কারণ আপনি যখন "_" টাইপ করেন তখন স্বতঃসমাপ্ত পপআপ আপনাকে ব্যক্তিগত ক্ষেত্রগুলি প্রদর্শন করে এবং সংস্থাগুলি থেকে পাওয়া সমস্ত প্রকারের সাথে উপস্থিত সদস্যদের সাথে মিশ্রিত সমস্ত সংযোগগুলি প্রদর্শন করে shows
  • এই-স্বরলিপিটি আপনাকে একটি পরিষ্কার উত্তর দেয়, "এটি" টাইপ করে আপনি যা দেখেন সেগুলিই সদস্যদের তালিকা এবং অন্য কিছুই নয়

অস্পষ্টতা

কখনও কখনও আপনাকে ইন্টেলিসেন্সের সাহায্য ছাড়াই কোডটি মোকাবেলা করতে হবে। উদাহরণস্বরূপ আপনি যখন কোড পর্যালোচনা করেন বা অনলাইনে সোর্স কোড ব্রাউজ করেন।

  • আন্ডারস্কোর-স্বরলিপিটি দ্ব্যর্থক: আপনি যখন কিছু দেখেন S

  • এই স্বরলিপিটি পরিষ্কার: আপনি যখন কিছু দেখেন S

সম্প্রসারণ পদ্ধতি

"এটি" ব্যবহার না করে আপনি নিজেই উদাহরণটিতে এক্সটেনশন পদ্ধতি ব্যবহার করতে পারবেন না।

  • আন্ডারস্কোর-স্বরলিপিটির প্রয়োজন হয় যে আপনাকে যে এক্সটেনশন পদ্ধতিগুলি করতে হবে তার সাথে আপনি "এটি" ব্যবহার করবেন না
  • এই-স্বরলিপি আপনাকে দ্বিধা থেকে বাঁচায়, আপনি সর্বদা "এটি", পিরিয়ড ব্যবহার করেন।

ভিজ্যুয়াল স্টুডিও সমর্থন

  • আন্ডারস্কোর-স্বরলিপিটির ভিজ্যুয়াল স্টুডিওতে অন্তর্নির্মিত সমর্থন নেই
  • এই স্বরলিপিটি প্রাকৃতিকভাবে ভিজ্যুয়াল স্টুডিও দ্বারা সমর্থিত:

    1. "এই." যোগ্যতা : সি-তে প্রবর্তিত হওয়ার জন্য অ-স্থিত পদ্ধতিতে ব্যবহৃত সমস্ত অ-স্থিতিশীল ক্ষেত্রগুলিকে পছন্দ করুনthis.

সরকারী সুপারিশ

অনেকগুলি সরকারী নির্দেশিকা রয়েছে যা স্পষ্টভাবে বলেছে "আন্ডারস্কোর ব্যবহার করবেন না" বিশেষত সি # তে


22
এটি একটি আশ্চর্যজনক উত্তর। এই সমস্ত তথ্য সংকলন করতে সময় দেওয়ার জন্য ধন্যবাদ।
টিগ্রান

5
সি ++ থেকে আসে না, কারণ ভাষা + এবং গ্রন্থাগার ব্যবহারের জন্য আন্ডারস্কোর দিয়ে সি ++ রিজার্ভ আইডেন্টিফায়ার হয়।
রব জি

7
আপনি পারফরম্যান্স সমালোচনামূলক, মাল্টিথ্রেডেড, সিস্টেম লেভেল কোড এবং অন্যান্য কোডের মধ্যে কেন পার্থক্য করবেন? _camelCaseযদি আমার কোডটি পারফরম্যান্স / সিস্টেম লেভেল কোডের পারফরম্যান্স হয় তবে কীভাবে আমাকে সহায়তা করতে ব্যবহার করছেন ?
জন্মদিন

6
আন্ডারস্কোরগুলি ব্যবহারের সমালোচনা, মাল্টি-থ্রেডেড বা সিস্টেম-স্তরের কোড লেখার পারফরম্যান্সের কিছুই নেই। এটি গুরুত্বপূর্ণ বিষয়গুলির ধারাবাহিকতা এবং কোরিএফএক্স দল কেবল একটি দল যা একটি নির্দিষ্ট সম্মেলনে সম্মত হয়েছিল। নামকরণের সম্মেলনের তুলনা করে খুব সুন্দর বিশ্লেষণের সাহায্যে এটি একটি দুর্দান্ত উত্তর, তবে আমি বিশ্বাস করি যে যুক্ত অংশটি বলেছে যে "আন্ডারস্কোরগুলি আরও ভাল কারণ কোরএফএক্স টিম তাই বলে" সত্যই এর গুণমানকে কমিয়ে দেয়।
akafak Gür

5
আমার সমস্যাটি হ'ল আমি লজিক্যাল আনফারেন্স বুঝতে পারি। en.wikedia.org/wiki/Inferences তবে ওহে, আমি পেয়েছি এটি সবার জন্য নয়।
ব্যবহারকারী 603563

67

মাইক্রোসফ্ট স্টাইলকপ সহায়তা ফাইল থেকে নেওয়া:

প্রকারের নাম: ফিল্ডনামস মাষ্টনটব্যাগইন উইথইন্ডারস্কোর

চেকআইডি: SA1309

কারণ: সি # তে একটি ফিল্ডের নাম একটি আন্ডারস্কোর দিয়ে শুরু হয়।

বিধি বিবরণ:

কোনও ক্ষেত্রের নাম আন্ডারস্কোর দিয়ে শুরু হলে এই নিয়মের লঙ্ঘন ঘটে।

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

যদি ক্ষেত্র বা ভেরিয়েবলের নামটি উইন 32 বা সিওএমের সাথে যুক্ত কোনও আইটেমের নামের সাথে মেলে এবং যদি এইভাবে একটি আন্ডারস্কোর দিয়ে শুরু করতে হয় তবে ক্ষেত্র বা ভেরিয়েবলটি একটি বিশেষ নেটিমেথোডস শ্রেণীর মধ্যে রাখুন। নেটিভমেথডস ক্লাসটি এমন কোনও শ্রেণি যা নেটিমেথোডস-এ শেষ হওয়া একটি নাম ধারণ করে এবং উইন 32 বা সিওএম র‌্যাপারগুলির জন্য স্থানধারক হিসাবে লক্ষ্য করা যায়। স্টাইলকপ এই লঙ্ঘনটিকে অগ্রাহ্য করবে যদি আইটেমটি নেটিমেথোডস শ্রেণীর মধ্যে রাখা হয়।

একটি পৃথক নিয়মের বিবরণ নির্দেশ করে যে উপরোক্তগুলি ছাড়াও পছন্দের অনুশীলনটি হ'ল ছোট অক্ষরগুলি সহ ব্যক্তিগত ক্ষেত্রগুলি এবং বড় হাতের অক্ষর সহ পাবলিকগুলি শুরু করা।

সম্পাদনা করুন: অনুসরণ হিসাবে, স্টাইলকপের প্রকল্প পৃষ্ঠাটি এখানে অবস্থিত: https://github.com/DotNetAnalyzers/StyleCopAnalyzers । সহায়তা ফাইলের মাধ্যমে পড়া তারা বিভিন্ন স্টাইলিস্টিক বিধি কেন প্রস্তাব দেয় সে সম্পর্কে অনেক অন্তর্দৃষ্টি দেয়।


7
এটি বেশিরভাগ ক্ষেত্রে একটি "সেরা অনুশীলন" ধরণের জিনিস। নিয়ম রাজ্যের অন্য কিছু দিয়ে prefixing যেখানে "এই" কোনো অ-স্ট্যাটিক সদস্য প্রয়োগ করা যেতে পারে সঙ্গে prefixing হিসাবে পারে ভাষা সিনট্যাক্স নিয়ম প্রযোজ্য কারণে না। "এই" কীওয়ার্ডটি লক্ষ্যযুক্ত গন্তব্যটিকে তুচ্ছ করে পরিষ্কার করে দেয়।
স্কট ডরম্যান

5
আমি কৃত্রিম উপায়ে কাছাকাছি আসার চেয়ে ভাষাটির উদ্দিষ্ট সমাধানের ("এটি") পক্ষেও সমর্থন করি।
galaktor

10
একই সফ্টওয়্যারটিতে একটি নিয়মও রয়েছে যা বলে যে কেবলমাত্র ক্ষেত্রে আপনার দুটি ক্ষেত্রের মধ্যে পৃথক হওয়া উচিত নয়। সুতরাং আপনি একটি সরকারী সম্পত্তি দ্বারা মোড়ানো একটি সুরক্ষিত পরিবর্তনশীল সঙ্গে কি করবেন?
লিলিথ নদী

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

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

27

যেহেতু আমরা একটি বেসরকারী ক্ষেত্রের কথা বলছি, এটি আপনার শ্রেণীর ব্যবহারকারীকে প্রভাবিত করে না।

তবে আমি ব্যক্তিগত ক্ষেত্রের জন্য একটি আন্ডারস্কোর ব্যবহার করার পরামর্শ দিচ্ছি, কারণ এটি কোড বোঝা আরও সহজ করে তুলতে পারে, যেমন:

private int foo;
public void SetFoo(int foo)
{
  // you have to prefix the private field with "this."
  this.foo = foo;

  // imagine there's lots of code here,
  // so you can't see the method signature



  // when reading the following code, you can't be sure what foo is
  // is it a private field, or a method-argument (or a local variable)??
  if (foo == x)
  {
    ..
  }
}

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


14
আমি কোনও ক্ষেত্র, সম্পত্তি বা পদ্ধতি অবলম্বন করি না কেন আমি সর্বদা 'এটি' দিয়ে উপসর্গ করি।
TheCodeJunkie

9
আমার জন্য, আন্ডারস্কোরটি "এটি" এর শর্টহ্যান্ড স্বরলিপি বাছাই করা।
এম

2
আর # তে, পরামর্শটি হল প্যারামিটারটিকে ফু না বলা। আপনি কেন সেটাকে ফু সেট করতে ব্যবহৃত হবে তা আপনি কেন এটিকে 'মান' বলবেন না?
চিন্তাভাবনা

17
@ মার্টিন: "এটি" এর শর্টহ্যান্ড হিসাবে আন্ডারস্কোরের সমস্যাটি হ'ল "এটি" পারার সময় অগত্যা সব শ্রেণীর সদস্যদের জন্য প্রয়োগ করা যায় না। আমি মনে করি কোডটি "এই" কীওয়ার্ডের সাহায্যে অনেক সহজ / ক্লিনার পড়বে। আপনার উদাহরণে, if (foo == x) সর্বদা পরামিতি ফুটিকে বোঝায়।
স্কট ডরম্যান

3
@ দ্য কোড কোডজুঙ্কি: আপনার কোড বেসে রিডান্ট্যান্ট চরিত্রগুলি পুরোপুরি চালিয়ে যায়।
এড এস

15

এমন পরিবেশে কাজ করার পরে যা থেকে খুব নির্দিষ্ট এবং খুব অর্থহীন শৈলীর নিয়ম ছিল আমি নিজের স্টাইলটি তৈরি করতে গিয়েছিলাম। এটি এমন এক ধরণের যা আমি পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে পিছনে ছিলে ছিঁলে।।।।।।।।।।।। আমি অবশেষে সিদ্ধান্ত নিয়েছি যে ব্যক্তিগত ক্ষেত্রগুলি সর্বদা _ফিল্ড হবে, স্থানীয় ভেরিয়েবলগুলি কখনই _ হবে না এবং এটি নিম্নতর হবে controls

আমি ঘৃণা করি this. কীওয়ার্ডকে এটি কেবলমাত্র আমার মতে খুব বেশি শব্দ শোনায়। আমি রিশার্পারের অপসারণ এটিকে অপ্রয়োজনীয় love শব্দ।

Year বছরের আপডেট: আমি Dictionary<TKey,T>সমকালীন অ্যাক্সেসের নির্দিষ্ট ব্যবহারের জন্য অভ্যন্তরীণ বিশ্লেষণ করছিলাম এবং একটি স্থানীয় ক্ষেত্রকে স্থানীয় ভেরিয়েবল হিসাবে ভুলভাবে পড়তে পারি। স্থানীয় ক্ষেত্রগুলি অবশ্যই স্থানীয় ভেরিয়েবলগুলির মতো নামকরণের কনভেনশন হওয়া উচিত নয়। যদি কোনও আন্ডারস্কোর হত তবে এটি অবিশ্বাস্যভাবে সুস্পষ্ট হয়ে উঠত।


18
thisশব্দ বর্তমান বস্তুর আপনার নিশ্চিত রেফারেন্স। আন্ডারস্কোর দিয়ে আপনি এটি পাবেন না। ঘৃণা করার দরকার নেই this
জেসন এস

15
কেন একটি 'স্ট্যান্ডার্ড' আবিষ্কার? 'এই.' আপনাকে বলে যে অবজেক্টটি একটি উদাহরণ ভেরিয়েবল 'ক্লাস'। আপনাকে জানায় এটি একটি বর্গ ভেরিয়েবল। অন্য সব কিছুই একটি স্ট্যাক ভেরিয়েবল। আন্ডারস্কোরটি খারাপ ধারণার একই স্তূপের সাথে সম্পর্কিত যেখানে হাঙ্গেরিয়ান নোটেশন এখন ক্ষয় হয় omp
Quarkly

4
@ DRAirey1 এটি খুব সহজেই মিস করা যায় miss যখন আপনার এটি প্রয়োজন হয় এবং আপনি রাষ্ট্রের সাথে অদ্ভুত জিনিসগুলি শেষ করেন।
ক্রিস মেরিসিক

3
@ ক্রিসমারিসিক আপনার ব্যবহার সম্পর্কে আপনার মতামতকে অবশ্যই স্বাগত জানালেন _, তবে যখন এটি স্পষ্টভাবে নেই তখন এটিকে প্রতিষ্ঠিত মান হিসাবে চিহ্নিত করবেন না।
ক্রাশ করুন

3
"আমি আমার নিজস্ব স্টাইল তৈরি করতে গিয়েছিলাম" - এ আপনাকে হারিয়েছি।
rory.ap

12

আমি আন্ডারস্কোরটি পছন্দ করি কারণ এরপরে আমি ছোট পাতাগুলির নামটিকে এই জাতীয় পদ্ধতির পরামিতি হিসাবে ব্যবহার করতে পারি:

public class Person
{
    string _firstName;

    public MyClass(string firstName)
    {
        _firstName = firstName;
    }

    public string FirstName
    {
        get { return _firstName; }
    }
}

39
পাবলিক স্ট্রিং ফার্স্টনাম {get; ব্যক্তিগত সেট; }
জেসন

3
আপনি thisকীওয়ার্ডটি ব্যবহার করে এখনও প্যারামিটার হিসাবে ছোট হাতের অক্ষর ব্যবহার করতে পারেন । চলমান এবং সর্বদা বিতর্কিত "আন্ডারস্কোর বা না" বিতর্কের একটি নিঃশব্দ হওয়া:public MyClass(string firstName){ this.firstName = firstName; }
mateuscb

5
এটি ভবিষ্যতের, এখন ঠিক public string FirstName { get; }এবং
সেস্টার

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

9

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

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


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

23
আমার জন্য, এই। এই.ওয়ার্ডগুলি আপ্লুত করে যখন এই কোডটি দিয়ে দ্রুত স্ক্যান করে, এটি কেবল এটি পড়ার মতো কম হয়ে যায় thisএটি.আর এটি.ও থামার মতো এবং এটি.এই সব। এটি স্বীকৃতি জানাতে এবং এটি এইটিকে সত্য করে দিন some আমি অনেক অনিয়মিত এটি পছন্দ করেন _fieldFooবা _fieldBarতার চাইতে আমি ব্যবহার আপ বিশৃঙ্খল আছে this.fieldFooবা this.fieldBar। আমি this.উপসর্গটি একটি শীর্ষস্থানীয় আন্ডারস্কোরের চেয়ে অনেক বেশি ঝাঁকুনির মতো বলে মনে করি।
AggieEric

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

1
@ অজিজিআরিক সেখানে মাথার পেরেকটি আঘাত করলেন। শুধু তাঁর বাক্যটি পড়ে আমার মাথা ব্যথা হয়! আমি এই ক্ষেত্রে কয়েক বছর ধরে এমএসের সুপারিশকে আঁকড়ে ধরার চেষ্টা করেছি এবং আমি thisসর্বত্র নীল শব্দগুলি পড়ার এত অসুস্থ হয়ে পড়েছি, আমি ঠিক সেখানেই এক উদ্বেগ-রাগের সিদ্ধান্ত নিয়েছি। এখন, আমি ধর্মীয়ভাবে thisকেবলমাত্র সম্পত্তির রেফারেন্সের জন্য ব্যবহার করি , বা যখন আমার স্পষ্টভাবে thisএবং এর মধ্যে পার্থক্য করতে হয় base। প্রত্যেকের নিজস্ব নিজস্ব, আমি অনুমান করি :-)
রিগার্ড স্টেইন

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

5

স্টাইল কপ সুপারিশ বা না, .NET ফ্রেমওয়ার্কে খনন করে সদস্য ভেরিয়েবলের জন্য প্রচুর "_" ব্যবহার দেখায়। স্টাইল কপের নির্মাতারা যেই পরামর্শ দিন না কেন, এমএসের বেশিরভাগ কর্মচারীই এটি ব্যবহার করছেন না। :) সুতরাং আমি আন্ডারস্কোর দিয়ে আটকাব। যেহেতু আমি ব্যক্তিগতভাবে আন্ডারস্কোরটি ব্যবহার করে তখন অনেক কম ভুল করি (উদাহরণস্বরূপ: var.ame = varName এর পরিবর্তে this.varName = varName ব্যবহার করা, এটি আমার মধ্যে সত্যই আটকে গেছে)


3
। নেট কোর স্টাইল গাইডের জন্য ইন্ডসকোরও প্রস্তাবিত
landoncz

3

আমি মনে করি যে বাইরের এবং বৃহত্তর শ্রেণির স্তরের ক্ষেত্রগুলি ভাষার ডিজাইনের ক্ষেত্রে ভুল। সি # এর সম্পত্তিগুলির নিজস্ব স্থানীয় সুযোগ থাকলে আমি এটিকে পছন্দ করতাম:

public int Foo
{
   private int foo;
   get
   {
      return foo;
   }
   set
   {
      foo = value;
   }
}

এর ফলে ক্ষেত্রগুলি সম্পূর্ণরূপে বন্ধ করা সম্ভব হবে।

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


সি # গ্যাংটি আপনার সাথে নতুন নতুন ব্যক্তিগত ইন্ট ফু-র সাথে সম্মত হয়েছে বলে মনে হচ্ছে; সেট;} সিনট্যাক্স চিনি।
ডানা

ওহ, নিশ্চিত; আমি এখানে যা বর্ণনা করছি তা ছাড়া সম্পূর্ণ অকার্যকর।
রবার্ট রসনি

আপনি যা বর্ণনা করছেন তা হ'ল "স্বয়ংক্রিয়ভাবে প্রয়োগ করা বৈশিষ্ট্য"। দুর্ভাগ্যক্রমে, ভিজ্যুয়াল বেসিক.নোটের সাথে, এটি সত্যই পর্দার আড়ালে একটি "লুকানো" _প্রিফিক্স ভেরিয়েবল ব্যবহার করে অর্থাত্ যদি আপনার একটি স্বয়ংক্রিয় প্রয়োগকৃত সম্পত্তি "পাবলিক প্রপার্টি ফু হিসাবে পূর্ণসংখ্যা হিসাবে" থাকে, তবে তারপরে সদস্যের ভেরিয়েবল ঘোষণাটি "ব্যক্তিগত _ফু'তে না থাকতে পারত পূর্ণসংখ্যা "

না, আমি স্বতঃ-প্রয়োগকৃত বৈশিষ্ট্যগুলি বর্ণনা করছি না, আমার উদাহরণে অন্তত নয়। আমি একটি স্কোপিং স্তর বর্ণনা করছি যা সি # বা ভিবিতে নেই। এটি সত্যিই দুর্ভাগ্য যে, ভিবি ব্যাকিং ফিল্ডগুলির নামগুলি ছত্রভঙ্গ করতে এমন একটি তুচ্ছ উপায় বেছে নিয়েছিল। সি # এর কুরুচিপূর্ণ যে আপনি দুর্ঘটনাক্রমে একই নামে কোনও পরিবর্তনশীল কখনই তৈরি করতে পারবেন না।
রবার্ট রসনি

3

বেসরকারী ক্ষেত্রগুলির জন্য _ফিল নামটির স্বরলিপি ভাঙ্গা খুব সহজ । "এটি" ব্যবহার করে। স্বরলিপি ভাঙ্গা অসম্ভব। আপনি কীভাবে _ চিহ্নটি ভাঙ্গবেন? পালন:

private void MyMethod()
{
  int _myInt = 1; 
  return; 
}

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

রুবির সাথে এটির বিপরীতে যেখানে ভেরিয়েবলের @my_numberনামটি স্কোপের সাথে যুক্ত করে এবং অটুট।

সম্পাদনা: এই উত্তরটি নেতিবাচক হয়ে গেছে। আমি পাত্তা দিই না, থাকে।


11
এটি নামকরণ কনভেনশনের পক্ষে একটি যুক্তিসঙ্গত সমালোচনা নয় যে এটি বিকাশকারীদের পক্ষে এটি অনুসরণ না করা সম্ভব।
রবার্ট রসনি

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

6
@ কনরাড: আপনি যখন "পাঠকের অনুশীলন হিসাবে" বলছেন তখন আপনি কটূক্তি বলে মনে করেন। এটি গণিতের পাঠ্যপুস্তক নয়।
jcollum

3
এখন সামান্য কম নেতিবাচক :) :) আমরা বর্তমানের বিপরীতে থাকতে পারি, তবে আমি আন্ডারস্কোর সম্মেলনটিও অপছন্দ করি। আমার দৃষ্টিতে এটি হাঙ্গেরিয়ান স্বরলিপি এবং সত্য কথা বলতে আলাদা নয়, এটি আমার চোখকে রক্তক্ষরণ করে (পাঠযোগ্যতায় ব্যথা দেয়)। আমরা সি # দিয়ে হাঙ্গেরিয়ান নোটেশনটি ছুঁড়ে ফেলেছি এবং আপনার আইডিই না বিশ্বাসের এই শেষ শুল্কটি ছাড়িয়ে নেওয়ার সময় এসেছে।
টিম লং

1
আমি শুনেছি এমএস আসলে বলেছে যে আন্ডারস্কোরটি এর সি # স্টাইল গাইডে ব্যবহার করা উচিত নয়। ব্লগস.এমএসএনএন.মাইক্রোসফট.ব্র্যাডা / ২০০৫ / ০৫/১০ /২ //২ - বিভাগ ২.6 - দেখে মনে হচ্ছে ব্র্যাড আব্রাম অন্তত আমাদের সাথে একমত!
jcollum

1

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

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

(তবে, আমি সর্বদা আমার ব্যক্তিগত সদস্যদের একটি আন্ডারস্কোর দিয়ে প্রিফিক্স করি It এটি আমার কোডটি পড়লে আমার স্পষ্ট করে দিতেও সহায়তা করে যে কোনও নির্দিষ্ট ভেরিয়েবল সদস্য ক্ষেত্র)।


0

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


1
ওহ, এটা কি জ্ঞানী? আন্ডারস্কোর মানে ভিবিতে 'পরবর্তী লাইনে অবিরত থাকবে' না?
জেবিআরউইলকিনসন

1
আন্ডারস্কোরটি কোনও স্থান অনুসরণ করলেই হয়।
রব উইন্ডসর

প্রাথমিক অক্ষর লোয়ার কেস বা আপার কেস
হওয়ায়

0

এতে কোনও প্রভাব নেই। যখন আপনার কোডটি সংকলিত হয়, সংকলকটির জন্য যা গুরুত্বপূর্ণ তা হ'ল ক্ষেত্র / সম্পত্তির নাম স্থান এবং দৃশ্যমানতা। শনাক্তকারী নামকরণের সময় একটি আন্ডারস্কোর অন্য চরিত্রের মতোই তাত্পর্যপূর্ণ। আসল কৌশলটি হ'ল একটি সম্মেলন ব্যবহার করা যা আপনি এবং আপনার চারপাশের লোকেরা বুঝতে পারবেন।

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