সি # ফাংশন পরামিতিগুলির জন্য কী নামকরণ কনভেনশন ব্যবহার করবেন


14

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

উদাহরণস্বরূপ,

void MyFunc(BaseClass myPara)
{
  DerivedClass _mypara = (BaseClass)myPara;
}

বা বিপরীতে

void MyFunc(BaseClass _myPara)
{
  DerivedClass mypara = (BaseClass)_myPara;
}

বা অন্য কোনও কনভেনশনাল


1
অন্য যে কোনও উত্তর আপনি নীচে পান না কেন, স্টাইলিস্টিক নিয়মগুলি বিশ্লেষণ ও প্রয়োগ করার জন্য একটি সামান্য সরঞ্জাম রয়েছে: সংরক্ষণাগার.এমএসএনএন.মাইক্রোসফট
প্যাট্রিক হিউজ

উত্তর:


11

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

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

আপনি যদি সত্যিই 2 টি আলাদা নাম ভাবতে না পারেন তবে আমি নামটিতে "হিসাবে" ব্যবহার করব ( কিছুদিন আগে এই বিষয়ে একটি প্রশ্ন ছিল )। উদাহরণস্বরূপ আপনি স্থানীয় ভেরিয়েবলের জন্য "মাইপারাএডেরিভড" ব্যবহার করবেন।

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


কেবল একটি ডাবল-চেক (আমি সি # এর সাথে তেমন পরিচিত নই)। শীর্ষস্থানীয় আন্ডারস্কোরটি আসলে সি # তে "সঠিকভাবে" আইনী? সি এবং সি ++ তে, শীর্ষস্থানীয় (বা দ্বিগুণ) আন্ডারস্কোর সহ সনাক্তকারীগুলি সংরক্ষিত রয়েছে, সুতরাং যদিও তারা এক অর্থে আইনী তবে আপনার নিজের পরিচয়দাতাকে এর মতো সংজ্ঞায়িত করা উচিত নয়। csharp.comsci.us/etymology/phanfiers.html পরামর্শ দেয় সি # সমান হতে পারে (নীচে দেখুন, "সীমাবদ্ধতাগুলির শেষ") তবে আসলে "সংরক্ষিত" বলে না।
স্টিভ 314

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

9

প্রথমত ব্যবহার

void MyFunc(BaseClass _myPara)
{
} 

স্পষ্টত ভুল! প্রচুর সি # কোডিং মান হিসাবে সমস্ত ক্ষেত্রের নামগুলিতে একটি "_" উপসর্গ ব্যবহার করুন ! আপনার কোডটি অন্য প্রোগ্রামার দ্বারা বুঝতে সহজ হওয়া দরকার তাই কোড এমনভাবে লেখা উচিত নয় যা প্রচুর সি # প্রোগ্রামারকে বিভ্রান্ত করবে।

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


4

আপনি যদি তাদের কিছু দিয়ে উপসর্গ করতে চান তবে আপনার p_প্যারামিটার ব্যবহার করা উচিত : সাধারণভাবে আমি অনুমান করি আপনি যদি এটি করেন তবে সম্ভবত আপনি প্রচুর লোককে বিরক্ত করবেন। তবে সামঞ্জস্য বজায় রাখুন, কেবল এক জায়গায় এটি করবেন না কারণ আপনার একই নামটি দিতে চান এমন ভেরিয়েবলগুলির জন্য আপনার দুটি পৃথক নাম প্রয়োজন।

পরিবর্তনশীল নামকরণ সহ একটি ভাল সাধারণ নিয়ম এর মত হয়;

  • যদি কেবলমাত্র এক ধরণের অবজেক্টের নাম থাকে তবে এটির কার্যকারিতা অনুসারে:

    var builder = new PizzaBuilder();
  • যদি তাদের কার্যাবলী এবং বিশেষজ্ঞের দ্বারা আপনার একাধিক নাম থাকে:

    var pizzaBuilder = new PizzaBuilder();
    var milkShakeBuilder = new MilkShakeBuilder();
    

প্যারামিটারের জন্য পি_ (বা কেবল পি) একটি পুরানো কনভেনশন যা সি ++ এবং সি তে প্রচুর ব্যবহৃত হয়েছে এটি স্থানীয়_র জন্য l_ এবং সদস্য-ভেরিয়েবলের জন্য (সি ++) এম_তে যেতে ঝোঁক। আমি এটি পাস্কাল, মডিউলা 2 এবং অ্যাডাতেও দেখেছি, সুতরাং এটি কেবল সি-পরিবারের জিনিস নয়। এটা তোলে হয় ধরণ প্রেম-এটা-অর-ঘৃণা-এটা, যদিও। আমি প্রায় অবসেশাকরভাবে এটি ব্যবহার করেছি, আমার অজুহাত স্টিভ হেইস হিসাবে "হিসাবে" যুক্তিযুক্ত। উদাহরণস্বরূপ সেস্টার পদ্ধতিগুলি প্রায়শই হয় m_Whatever = p_Whatever;- দুটি শনাক্তকারীকে অর্থাত্ পৃথক নাম দেওয়া অসুবিধে হবে। তবে আমি প্রশ্ন করতে শুরু করেছি যে এই মামলাগুলি ধারাবাহিক সম্মেলনের ন্যায্যতার পক্ষে যথেষ্ট সাধারণ কিনা?
স্টিভ 314

4

সি # নামকরণের কনভেনশনগুলিতে আপনার থাকতে হবে:

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

এবং দয়া করে হানি হরেকশন থেকে দূরে থাকুন। এটি অর্থহীন এবং সি # কনভেনশন মেনে চলেন না।


তারা যদি স্থির হয় তবে ব্যক্তিগত ক্ষেত্রগুলি পাস্কেল-কেসড হয়।
সারা

2

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

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

public void Function(string p_Parameter1, string p_Parameter2)

... আরও পড়ার মতো হবে ...

public void Function(string parameter1, string parameter2)

... যেখানে প্যারামিটার 1 এবং 2 সম্পর্কিত ভেরিয়েবলের বর্ণনামূলক নাম।

এখানে লিঙ্কটি অবশ্যই দেখুন: লিংক


-3

আমি প্যারামিটার প্রত্যয়টিতে বিশ্বাস করি: স্ট্রিং এস_, ইন্ট আই_ ইত্যাদি

আমি আরও বিশ্বাস করি যে পারম নামগুলি যথাসম্ভব সংক্ষিপ্ত এবং জেনেরিক হওয়া উচিত।

এখন কারণগুলির জন্য:

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

সবকিছুর ট্রেড অফ রয়েছে এবং আপনি কিছু ব্যবহার করেন বা না করেন তা আপনার বর্তমান শৈলীতে কীভাবে ফিট করে তার উপর অনেক বেশি নির্ভর করবে।


6
-১: ক) আপনি উপসর্গ করছেন, প্রত্যয় নন; খ) এটা হাঙ্গেরীয় স্বরলিপি এবং পথ চলা উচিত do-না
পিটার কে।

1
সি # টাইপ কি নিরাপদ নয়?
পাইভি

1
@ পিটার কে। - এটি আমার মতো লাগে sএবং iসংক্ষিপ্ত নামের কারণ এটি কেবল একটি উদাহরণ। আইডাব্লু আমি একেবারেই হাঙ্গেরীয় বলে মনে করি না - আমি মনে করি আপনি একটি সংক্ষিপ্ত নামের ভুল ব্যাখ্যা করছেন যা কেবল ক্লাসিক string sবা int iআমি-একটি-ভাল-নামের জিনিস হিসাবে ভাবতে পারি না, তবে আন্ডারস্কোর প্রত্যয়গুলি আটকানো রয়েছে ।
স্টিভ 314

@ স্টিভ 314: আহ, আপনি ঠিক থাকতে পারেন! দেখা যাক মার্ক সাড়া দেয় কিনা।
পিটার কে।

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