আমি কি ভেরিয়েবলের নামটি ব্যবহারের জন্য অনৈতিক যা কেবলমাত্র ক্ষেত্রে এর ধরণের চেয়ে আলাদা?


95

উদাহরণস্বরূপ, কোডটির এই অংশটি নিন:

var person = new Person();

বা আপনার জন্য পাইথনিস্টাস:

person = Person()

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

নাকি আমি এখানে কিছু মিস করছি? যদি তা হয় তবে আপনি যদি কোডের এমন কোনও উদাহরণ প্রদান করতে পারেন যা সমস্যার সৃষ্টি করে তবে এটি সহায়ক হবে।


আমি সবসময় এই সম্পর্কে ভাবছিলাম। সুন্দর প্রশ্ন!
উইলিয়াম ব্রেন্ডেল

18
একজন ব্যক্তিকে ফোন করা কেবল নিষ্ঠুর। "বব" এর সাথে দোষ কি?
স্যাম মেলড্রাম

17
চলুন ভেরার আগে ভুলে যাব না যে সেখানে ব্যক্তি ব্যক্তির জেন সৌন্দর্য ছিল = নতুন ব্যক্তি ();
জ্যামি আইদে

4
@ জামি আপনি স্ট্যাটিক টাইপিং জেন-এর মতো ডাকছেন?
orokusaki

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

উত্তর:


94

যারা আপনাকে এটি খারাপ বলার যুক্তি কী? আমি সব সময় এটা করি। কোনও প্রকারের একক ভেরিয়েবলের নাম দেওয়ার এটি সহজতম, অভিব্যক্তিক উপায়। আপনার যদি দুটি Personবস্তুর প্রয়োজন হয় তবে আপনি personঅর্থপূর্ণ বিশেষণগুলির মতো উপসর্গ করতে পারেন

fastPerson
slowPerson

অন্যথায় ঠিক

person

আমার সাথে ভাল আছে।


8
"আপনারা এগুলি খারাপ বলার কারণ কী?" - ডুনো এই কারণেই আমি এই বিষয়টি শুরু করেছি। :-)
জেসন বেকার

স্পষ্টতই আপনাকে কখনই অন্য কারও কোডে আসতে হয়নি। আমি জানি যে যখন আমাকে বহু বছরের পুরানো কোডটিতে কিছুটা পুরানো কোডটি অনুসন্ধানের জন্য ডেকে আনা হয়েছিল, যে দীর্ঘদিন ধরে এই সংস্থা ছেড়ে চলে গিয়েছিল - আমাকে যেভাবে র‌্যাম্প করার পথে আসে তা সমস্যা সমাধানের সময় নয়। যদি এই বাধাগুলির মধ্যে একটি যদি উদাহরণস্বরূপ এবং কোন শ্রেণি কী তা বোঝার চেষ্টা করা হয় তবে কোনও প্রোগ্রামারকে "var currentPerson = New person () বলতে বিরক্ত করা যায় না;" তাহলে তা অকেজো, সময় নষ্ট করা। ... এবং যখন আপনার গ্রাহকরা স্থির জন্য অপেক্ষা করছেন, সময়টির মূল বিষয়টি রয়েছে।
ডেভিড

4
@ ডেভিড - আপনি আমাকে ধরেছেন! আমি জানতাম যে ভ্যাকুয়ামে কোডিং করা তাড়াতাড়ি বা পরে তার কদর্য মাথাটি ফিরিয়ে আনবে :) গম্ভীরভাবে যদিও - এই নামকরণের সম্মেলনের ভিত্তিতে প্রকার এবং তাদের উদাহরণগুলির মধ্যে পার্থক্য করতে অক্ষম হয়ে আপনি বিভক্ত হয়ে পড়েছেন বলে বিশ্বাস করা আমার পক্ষে কঠিন।
অ্যান্ড্রু হার 18

4
@ ডেভিড - কোড বিশ্লেষণ সরঞ্জামটির জন্য সমস্যা হওয়া উচিত। এছাড়াও, সেইজন্যই এখানে কনভেনশন রয়েছে যেগুলি পাইথনের বড় হাতের অক্ষর দিয়ে শুরু হয়।
ইলিয়া n।

69

আমি পদ্ধতিতে স্বাক্ষর করে এই প্যাটার্নটি অনেক ব্যবহার করি। আমি যদি কোনও বিকল্প বর্ণনামূলক নাম দিতে না পারি তবে আইএমএইচও, এটিতে কোনও দোষ নেই।

ভুল যদি আপনার কাছে দুই প্রকারের ব্যক্তি এবং ব্যক্তি থাকে তবে তা খুব ভুল।


4
"যদি ভুল হয় তবে আপনার যদি দু'জন ব্যক্তি এবং ব্যক্তি থাকে তবে এটি খুব ভুল।" - এটি আমার কাছে মোটামুটি বোঝায়।
জেসন বেকার

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

4
আরে, কোনও এআইপিআইয়ের ক্ষেত্রে আপনি পাবলিক পদ্ধতির নাম বা বৈশিষ্ট্যগুলি সম্পর্কে পরিবর্তনশীল, ভেরিয়েবলের নাম নয়, কারণ পরবর্তী ক্লায়েন্টের কোডে প্রকাশিত হবে না। জেসনের প্রশ্নের বিষয়ে, আমিও এই নামকরণটি সর্বদা ব্যবহার করি। একেবারে ভুল কিছু নয়।
ফ্রেডরিক দ্য ফুল

4
ঠিক আমার বক্তব্য ফ্রেডেরিক কেন কেবল দুটি ধরণের যা কেবল বেইস কেসে আলাদা হয় তা খারাপ ধারণা ;-)
জোশবার্ক

4
এটি ভুল না হলেও, কোডটি পড়া আরও শক্ত করে তোলে। পঠনযোগ্যতাও গুরুত্বপূর্ণ।
J3r3myK

45

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

Person person = new Person(); // okay

int Int = 42; // pure evil

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

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

4
রাজি। একটি একক বর্ণের পরিবর্তনশীল নাম চিৎকার করে "আমি অস্থায়ী" " লুপ সূচকগুলি হ'ল আমি, জে, কে, অন্য যে কোনও একটি, বি, সি, এক্স, ওয়াই, জেড বা অন্য কোনও চিঠি হওয়া উচিত যা এল এবং ও এর মতো অন্য কোনও কারণে ভুল হতে পারে না।
দ্য টিকটিকি

ব্রাভো! 42 মাত্র অনেক বেশি। :)
বিশাল শেঠ

18

যদি কেউ বলে যে এটি মন্দ, তাদের জিজ্ঞাসা করুন এটি ভাল কিনা:

var abc = new Person();

4
@ ক্রিস: ঠিক! বা আরও ভাল: var temp = new Person();(অস্বীকৃতি: আমি জানি যে সত্যিই এক সময়ের জন্য অস্থায়ী ভেরিয়েবলগুলি ব্যবহারের জন্য জায়গাগুলি রয়েছে তবে আমি যখন এটি কারও কোডে দেখি না তবে লেখক কেবল ভারটিকে একটি উপযুক্ত নাম দেওয়ার পক্ষে ফিরে আসেননি এবং এটি হতে পারে পাশাপাশি "এবিসি" হতে হবে))
দিনাহ

15

ব্যক্তি যদি প্রসঙ্গে একটি সাধারণ ব্যক্তি হয় তবে "ব্যক্তি" সত্যই একটি ভাল নাম। অবশ্যই যদি ব্যক্তির কোডটিতে একটি নির্দিষ্ট ভূমিকা থাকে তবে ভূমিকাটি ব্যবহার করে তার নামকরণ করা ভাল।


9

আমি মনে করি আমি এ কথা বলার কারণে অবনমিত হব, কিন্তু ...

মহাকাব্য হত্যা এবং লোভের সাক্ষী হয়ে এক শতাব্দী পেরিয়ে এসে আমরা প্রোগ্রামাররা সত্যিকার অর্থে আশীর্বাদ লাভ করি যদি আমরা করতে পারি এমন অনৈতিক জিনিসগুলির একটি পরিবর্তনশীল নাম।


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

4
@ ডেভিড: ঠিক আবার। পথে আমার প্রথম পিতামহীর সাথে, আমি মনে করি এটি ট্রাইটি, তবে আমি কী ধরণের বিশ্বকে হাতছাড়া করছি তা যত্নশীল।
মাইক ডুনলাভে

8

আমি মনে করি না যে এটি অগত্যা "খারাপ", তবে স্পষ্টতই যদি আপনি এটিকে আরও প্রসঙ্গের জন্য যোগ্যতা অর্জন করতে পারেন তবে এটি কোন ধরণের ব্যক্তি (যেমন আপনি সম্ভবত অনেকগুলি সম্ভাব্য ব্যক্তির সাথে আচরণ করছেন) তবে অন্য কেউ এটি বাছাই করছে আপ ভাল বুঝতে পারে।


6

জেসন - আমি নিশ্চিত নই যে কে আপনাকে বলেছে যে এটি খারাপ। বেশ কয়েকটি লেখক এটিকে কোনও শ্রেণীর (বড় আকারের) উদাহরণ (ছোট কেস) প্রকাশের একটি স্ট্যান্ডার্ড উপায় হিসাবে ব্যবহার করেন ।

আমি এটি প্রায়শই ব্যবহার করি কারণ আমি দেখতে পেয়েছি যে লোয়ার-কেসড ভেরিয়েবলটি কেবল আমার কাছে যোগাযোগ করে যে এটি কেবল উদাহরণ নয় ক্লাসের নামও।

বিপরীতে কারও কাছে শক্ত যুক্তি না থাকলে আমি অবশ্যই এটি চালিয়ে যাব।


6

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

ব্যক্তি ব্যক্তি = নতুন ব্যক্তি ();

ব্যক্তি ব্যক্তি 2 = নতুন ব্যক্তি ();

এটি তখন "খারাপ" এর সাথে সীমানা বদ্ধ হবে। তবে, সেক্ষেত্রে দু'জনের মধ্যে পার্থক্য করার জন্য আপনার নিজের অর্গানাল ব্যক্তিকে রিফ্যাক্টর করা উচিত।

আপনার উদাহরণ হিসাবে, পরিবর্তনশীল নাম "ব্যক্তি" অবজেক্ট "ব্যক্তি" এর জন্য পুরোপুরি বর্ণনামূলক নাম। সুতরাং এটির সাথে যা কিছু আছে তাতে কোনও ভুল নেই।


3

আমি এটি কীটির জন্য নাম বলছি: যদি ভেরিয়েবল 2 টি কুকুরযুক্ত ব্যক্তিকে প্রতিনিধিত্ব করে তবে তাকে কল করুন personWith2Dogs। এটির ভেরিয়েবলের স্বল্প স্কোপ থাকে (লুপের মতো) তবে ব্যক্তি ভাল fine


3

আমি আমার কোডটিতে এটি প্রচুর ব্যবহার করি এবং এতে কোনও ভুল আছে বলে মনে করি না। এটি বলেছিল, আমি (সম্ভবত) কোনও স্ক্রিন বলার অপেক্ষা আর কোনও পদ্ধতিতে এটি ব্যবহার করব না এবং যদি ব্যক্তি শ্রেণীর একাধিক উদাহরণ থাকে। অবশ্যই তাদের নাম 1, ব্যক্তি 2, ব্যক্তি 3 রাখবেন না ... পরিবর্তে আরও কিছু বর্ণনামূলক কিছু ব্যবহার করুন, যেমন ব্যক্তি_ টো_ডেল, ব্যক্তি_তুল্য_বান, ব্যক্তি_পৃষ্ঠা_ ইত্যাদি etc.


3

অনৈতিক নয়, তবে একটি বিশ্বব্যাপী অনুসন্ধান উভয়ই খুঁজে পাবে Personএবং personযদি আপনি কেস-সংবেদনশীলতা সক্রিয় করতে ব্যর্থ হন। আমি বিশ্বব্যাপী অনুসন্ধান করা / সহজ প্রতিস্থাপন করতে একটি উপসর্গ পছন্দ করি তবে একেবারে হাঙ্গেরিয়ান বা দীর্ঘ / জটিল কিছু নয়। সুতরাং, আমি ...

Personক্লাস aPersonভেরিয়েবলের thePersonজন্য myPersonউদাহরণ ভেরিয়েবলের ourPersonজন্য কোনও প্যারামিটারের জন্য স্থানীয় ভেরিয়েবলের জন্য শ্রেণি / প্রকারের জন্য

বিরল উপলক্ষে, আমি pএকটি স্থানীয় প্রসঙ্গে ব্যবহার করতে পারি যেখানে আমার প্রচুর রেফারেন্স রয়েছে তবে এটি সাধারণত লুপ সূচক এবং এর মতো ক্ষেত্রেই প্রযোজ্য।


3

এটা নির্ভর করে.

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

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


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

আমি মনে করি না যে আমি এ জাতীয় কোনও সম্পাদনা করেছি, সুতরাং এটি সম্ভবত অন্য কেউ ছিল। বিটিডাব্লু, এটি "পোলিশ"।
ডেভিড থর্নলি

2

এই লোকেরা সঠিক যুক্তিগুলি কী ব্যবহার করে?

যদি তারা আপনাকে কোনও পরিবর্তনশীল নাম হিসাবে ব্যক্তি ব্যবহার করতে না দেয় তবে আপনি 'এ' উপসর্গ যুক্ত করার কথা বিবেচনা করতে পারেন।

aPerson = Person()

4
আমার মতে এটি আরও খারাপ হবে। এটি পড়া আরও শক্ত এবং এটি কোনও অতিরিক্ত তথ্য সরবরাহ করে না।
জোছিম সাউর

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

এটি আইনের চিঠিগুলি অনুসরণ করবে, তবে স্পিরিট নয়।
জোছিম সৌর

4
+1, আমি প্যারামিটারগুলির জন্য পিয়ারসন এবং আমি পরিচালনা করছি এমন স্থানীয়দের জন্য মাই পার্সন ব্যবহার করি।
অ্যামি বি

2

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

উদাহরণস্বরূপ আমি ক্লাস ইত্যাদির জন্য উদাহরণস্বরূপ, ভেরিয়েবল এবং আপারকামেলকেস জন্য লোয়ার ক্যামেলকেস ব্যবহার করি

কোডিং মানগুলির এই সমস্যাটি সরিয়ে নেওয়া উচিত।

আমি যখন সফল ওপেন সোর্স প্রোগ্রামগুলি দেখি তবে তাদের প্রায়শই কোডিং মান থাকে

http://drupal.org/coding- স্ট্যান্ডার্ডস

http://help.joomla.org/content/view/826/125/

http://wiki.rubyonrails.org/rails/pages/ কোডিং স্ট্যান্ডার্ডস

http://lxr.linux.no/linux/ ডকুমেন্টেশন / কোডিং স্টাইল

কোডিং মানগুলির সাথে সম্মত হওয়া আপনার পক্ষে এটি শেষ লড়াই হওয়া উচিত।

আসলে উইকিপিডিয়া এন্ট্রিটি দেখুন ( http://en.wikedia.org/wiki/CamelCase থেকে )

প্রোগ্রামিং এবং কোডিং স্টাইল

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

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

একটি বহুল ব্যবহৃত জাভা কোডিং স্টাইল হুকুম দেয় যে আপারকামেলকেস ক্লাসের জন্য ব্যবহার করা যেতে পারে এবং নিম্নের ক্যামেলকেস উদাহরণ এবং পদ্ধতিগুলির জন্য ব্যবহার করা যায় [[১৯] এই ব্যবহারটি স্বীকৃতি দিয়ে, কিছু আইডিই, যেমন গ্রহন, ক্যামেলকেসের উপর ভিত্তি করে শর্টকাটগুলি প্রয়োগ করে implement উদাহরণস্বরূপ, অলপিসের বিষয়বস্তু সহায়তা বৈশিষ্ট্যে, একটি ক্যামেলকেস শব্দের ঠিক উপরের অক্ষরগুলি টাইপ করা যেকোন ম্যাচিং ক্লাস বা পদ্ধতির নাম প্রস্তাব করবে (উদাহরণস্বরূপ, "এনপিই" টাইপ করুন এবং সামগ্রী সক্রিয়করণ "নালপয়েন্টারএক্সেপশন" পরামর্শ দিতে পারে)।

প্রোগ্রামিংয়ের জন্য মূল হাঙ্গেরীয় স্বরলিপিটি উল্লেখ করে যে "ব্যবহারের ধরণ" (ডেটা টাইপ নয়) এর জন্য একটি ছোট হাতের সংক্ষিপ্ত বিবরণটি আপারকামেলকেসে নামের অবশিষ্টাংশ সহ সমস্ত চলক নামের উপসর্গ করা উচিত; যেমন এটি নিম্নচিকিত্সার একটি রূপ। জাভাতে ফাইলের নামের জন্য এবং অ্যামিগা ব্যক্তিগত কম্পিউটারের জন্য ক্যামেলকেস হ'ল অফিশিয়াল কনভেনশন।

মাইক্রোসফ্ট .NET প্যারামিটার এবং নন-পাবলিক ফিল্ডের জন্য লোয়ার ক্যামেলকেস এবং অন্য ধরণের সনাক্তকারীদের জন্য আপারকামেলকেস (ওরফে "পাস্কাল স্টাইল") প্রস্তাব দেয় s [20]

পাইথন ক্লাসের নামগুলির জন্য আপারকামেলকেস প্রস্তাব দেয় [[21]

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

ক্যামেলকেসের নামের মধ্যে আপার কেস সংক্ষিপ্তকরণ (প্রধানত সংক্ষিপ্ত শব্দ এবং সূচনা) অন্তর্ভুক্ত করার জন্য একটি একক সম্মেলন নেই। পদ্ধতির মধ্যে পুরো সংক্ষিপ্ত বিবরণটি আপার ক্ষেত্রে (যেমন "UseHTTPConnication" তে) ফেলে রাখা এবং উপরের ক্ষেত্রে কেবল প্রথম অক্ষর রেখে দেওয়া (যেমন "UseHttpConnection") অন্তর্ভুক্ত।

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


2

একটি শক্তিশালী যুক্তি তৈরি করা সম্ভব যে এই জাতীয় পদ্ধতির নামগুলি কেবল নিরীহ নয় তবে ভাল মানের কোডের সূচক হতে পারে।

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

  • সাধারণ উদ্দেশ্যমূলক গণনার একটি সূচককে সাধারণ-উদ্দেশ্য পদ্ধতিতে নিচে নামানো হচ্ছে: আপনি যদি কোনও ব্যবসায়ের পদ্ধতিতে ডেটা স্ট্রাকচারের মধ্যবর্তী কারসাজি করেন, উদাহরণস্বরূপ ব্যবহারকারীদের একটি অ্যারেটি নকল করতে হয়, আপনার সুযোগে পরিবর্তনশীল থাকতে হবে users[]এবং মত নাম সহ deduplicatedUsers[]। আপনি যদি কোনও ইউটিলিটি পদ্ধতিতে প্রতিলিপিটি সরান, আপনি সেই পদ্ধতিটি Utils.dedup(array)কল করতে পারেন এবং আপনি নকল অ্যারে deduplicatedArrayবা ঠিক বলতে পারেন result

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

  • "স্থানীয় অস্পষ্টতা ঠিক আছে" এর নীতিটি দেখুন - http://www.wall.org/~larry/n Natural.html ।


2

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

সুতরাং আপনি যদি নিজের ঠিকানা বই অ্যাপ্লিকেশনটিতে একটি নতুন পরিচিতি তৈরি করতে চান তবে আপনি ভেরিয়েবলটি কল করতে চাইতে পারেন newContact

এবং যদি আপনি Personকোনও নাম সেট না করে অবজেক্টের আচরণ যাচাই করার জন্য আপনার কোডটি ইউনিট পরীক্ষা করছেন তবে আপনি সেগুলি unnamedPersonবা অনুরূপ কিছু কল করতে চাইতে পারেন ।

এটিকে কল করা সহজভাবে আপনার personকোডটিকে স্ব-ডকুমেন্টিং করার একটি বড় সুযোগকে ভুলে যায়।


নামহীন! :)) var বেনামী = নতুন ব্যক্তি (); বা আরও ভাল: var আপনি_ জ্ঞান_ও = নতুন ব্যক্তি (); :))
ভাদিম ফেরদারের

@Vadim Ferderer: var he_who_must_not_be_named = new Person();? :-)
প্ল্যাটিনাম আজুর

2

আপনি যদি ভিবি 6 তে প্রোগ্রামিং করেন তবেই। যে ক্ষেত্রে , আপনি কি করছেন অবৈধ, কিন্তু অনৈতিক নয়।


1

আমি এটিও করি এবং কেন এটি 'অনৈতিক' হওয়া উচিত তা আমিও বুঝতে পারি না। যদিও আমি বুঝতে পারি যে এটি কখনও কখনও বিভ্রান্তিকর হতে পারে তবে আজ আমাদের কাছে আইডিই রয়েছে ইন্টেলিজেন্স এবং সিনট্যাক্স হাইলাইট করে যা নিশ্চিত করবে যে (যদি আপনি কোনও ভুল করেন এবং আপনার শ্রেণীর পরিবর্তে আপনার পরিবর্তনশীল উল্লেখ করেন, এবং বিপরীতে) আপনি আপনার ত্রুটি বেশ দ্রুত দেখুন। এবং আমাদের সংকলকটিও রয়েছে। :)


1

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


1

আমি মনে করি আপনি যে 'নিয়ম' এর কথা ভাবছেন তা আদিম ধরণের এবং ক্লাসের যেখানে শ্রেণীর নামটি একটি খারাপ পরিবর্তনশীল নাম তৈরি করে সেগুলি আরও বেশি উদ্দেশ্যে করা।

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

Decimal _decimal = item.BaseCost + item.Tax;

পরিবর্তে, আরও বর্ণনামূলক নামের পরামর্শ দেওয়া হবে, যেমন '_টোটাল', বা '_কাস্ট'।


1

এই ধরণের জিনিসটির সাথে আমি খুঁজে পেয়েছি যে আপনি যদি একই সাথে কোনও ব্যক্তিগত সদস্য এবং একটি সরকারী সম্পত্তি চান।

যদি এগুলি কেবলমাত্র ক্ষেত্রে পৃথক হয়, তবে এটি কেস-সংবেদনশীল ভাষায় যেমন সি # তে ভাল কাজ করবে, তবে ভিবি.নেটে নয়।

সুতরাং, উদাহরণস্বরূপ, ভিবিতে, আমি লিখতাম

Private _name As String

কিন্তু

Public Property Name() As String
    Get
        Return _name
    End Get
    Set(ByVal Value As String)
        _name = Value
    End Set
End Property

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


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

হ্যাঁ, আমি এখানে চিত্রিত করছি। একটি স্থানীয় ভেরিয়েবলের সংজ্ঞা দেওয়া যেমন 'ডেম ব্যক্তিকে নতুন ব্যক্তি হিসাবে' ঠিক করা ভাল। খুব (খুব) মাঝেমধ্যে ভিবি সংকলক সহ, একটি দ্বিধাগ্রস্ততা দেখা দেয় এবং স্বাভাবিক আশ্বাস স্বয়ংক্রিয় মূলধন ঘটে না। এটি একটি ভাল ভিজ্যুয়াল কিউ যা সব ঠিক নেই।
ক্রিসা 15

1

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


1

আমি প্রায়শই Person person = new Person()নিজেকে ব্যবহার করি। সাধারণত জাভা / সি # তে ব্যবহৃত হয়।

যদিও আমি গতকাল ভাবছিলাম শেষ পর্যন্ত কেন

private enum DataType {NEW, OLD}

সি # তে কাজ করে না ...

বিশেষ করে এইজন্য তুমি কেমন ব্যবহার করতে পারেন String, string, Double, double, ... C # চলবে।


এনাম কেবল বাইট, এসবিট, শর্ট, ইউএসোর্ট, ইন্ট, ইউিন্ট, লম্বা, উলংকে সমর্থন করে। উদাহরণস্বরূপ, ভগ্নাংশের অ সংখ্যাগত মানের
ধরণগুলি

1
Person person = new Person()

আমার বইতে ঠিক আছে।

যখন আপনার কাছে এটি হ'ল ভয়ঙ্কর হয়ে ওঠে:

string Person;
string person;

মিক্স করা খুব সহজ 2।


1

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

যেমন সিএলআর টাইপ (ইনট, স্ট্রিং ইত্যাদি) আপনি স্ট্রিং বা স্ট্রিং (ইত্যাদি) ব্যবহার করতে পারেন টাইপটি ডিক্লেয়ার করার জন্য, তাই আমি এর মতো কিছু ব্যবহার করা এড়াতে চাই

int Int = 0;
string String = "hi there";

1

একমাত্র পার্থক্যকে মূলধন তৈরি করা বিপজ্জনক ... একটি বড় প্রকল্পের জন্য এটি চালিয়ে যান এবং আমি গ্যারান্টি দিচ্ছি যে আপনি উদ্ভট ত্রুটিগুলি আবিষ্কার করবেন যা আপনি সনাক্ত করতে পারেন না।

উপরের মতো ফাস্টপারসন / স্লোপারসন ঠিক আছে ... তারা বর্ণনামূলক এবং পরিবর্তনশীল প্রকারের নাম থেকে পৃথক ... তবে মানুষের কাছে আসুন, একটি অন্তর্নিহিত "ইনট" কল করা সহজ অলস হবে।


1

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

void SaveToDatabase(Person person) {...}

আপনি কেবলমাত্র যুক্তিযুক্ত ব্যক্তিকে কল করতে পারেন এমন কোনও জিনিস person_to_saveবা এমন কিছু যা অপ্রয়োজনীয় বলে মনে হয়।

তবে অনেক ক্ষেত্রে আপনি আরও বর্ণনামূলক নাম ব্যক্তির পরিবর্তে আপনার কোডের পঠনযোগ্যতার উন্নতি করতে পারেন। উদাহরণস্বরূপ এটি কম বর্ণনামূলক

void AddToAccount(Account account, Person person)  {...}

এই তুলনায়

void AddToAccount(Account account, Person dependent)  {...}

তবে দয়া করে, দয়া করে - সুন্দর দয়া করে টাইপের নামের সামনে 'a' বা 't' রাখবেন না। 'একজন ব্যক্তি' এর জন্য IE এপারসন বা 'ব্যক্তি'র জন্য টিপারসন। এটি অত্যধিক জটিল এবং কোনও মান যদি বেশি যোগ করে না। এছাড়াও আপনি আপনার সুযোগকে কলুষিত করতে শুরু করেন যা একটি বা টি দিয়ে শুরু হয় যা ইন্টেলি-ইন্দ্রিয়ের মানকে হ্রাস করতে পারে।


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

0

আমি বলব না এটি ভয়াবহ। আমি সাধারণত এই ধরণের একটির উদাহরণ হিসাবে দেখানোর জন্য এই ধরণের 'a' এর সাথে ভেরিয়েবলটির নাম উপসর্গ করেছি, তাই আমি করতাম

Person aPerson = new Person();

কোডটি আরও প্রাকৃতিকভাবে পড়তে পারে বলে আমি মনে করি।


0

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

আমার নিয়মের থাম্ব? কোডে বিবৃতিগুলি সহজ ইংরেজি বাক্যগুলির মতো পড়তে হবে।

ব্যক্তি ব্যক্তি = নতুন ব্যক্তি ();

কর্মচারী কর্মচারী = person.getRole (EMPLOYEE);

পিতামাতা পিতামাতা = person.getRole (PARENT);

person.getFullName ();

কর্মচারী.সেটারি ();

প্যারেন্ট.জেটচিল্ডেন ();

প্যারেন্ট.জেটফুলনাম (); // খেলতে শোভাকর প্যাটার্ন অনুমান করে

যদি (person.hasRole (EMPLOYEE)) {

  ...

}

এবং তাই এগিয়ে।

যদি ভেরিয়েবলের স্কোপ সীমিত থাকে (উদাহরণস্বরূপ এনক্যাপসুলেটিং পদ্ধতি 10-15 লাইন হয়) আমি এমনকি 'ব্যক্তি' এর পরিবর্তে 'পি' ব্যবহার করতে পারি। আপনার মাথায় প্রসঙ্গ ধরে রাখার চেষ্টা করার সময় সংক্ষিপ্ত পরিবর্তনশীল নামগুলি কোনও বিঘ্ন কম হয়। 'ক' বা (কাঁপানো) হাঙ্গেরীয় স্বরলিপি এবং এর অফশুটগুলির মতো কৃত্রিম উপসর্গগুলি এড়িয়ে চলুন। (মনে রাখবেন, উপযুক্ত প্রসঙ্গে - সি ++ / সিওএম / এটিএল / উইন 32 এপিআই কোড ইত্যাদি ব্যবহার করার সময় আমার কাছে এমন উপসর্গগুলির বিরুদ্ধে কিছু নেই) যেখানে এটি অ্যাসাইনমেন্ট / টাইপকাস্টিং সোজা রাখতে সহায়তা করে)।

আমার দুটি (!) বিট :-)

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