নামকরণ কনভেনশনগুলি কি টাইপ এবং স্কোপ উপসর্গগুলি উপযুক্ত?


14

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

int nTickCount  
bool bConnected  
object[] m_aItems  
fSum += fWeight * fValue  
class cManager  
enum etSystemStates  
etSystemStates eState  
cManager.cs

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

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

কোনওটি ব্যবহারের প্রয়োজন হলে, আপনি সর্বাধিক মার্জিত এবং কার্যকর নামকরণ কনভেনশনটি কী খুঁজে পান? এটি কি টাইপ এবং / বা সুযোগকে বোঝায়?

উত্তর:


28

জোয়েল স্পলস্কি কেন একটি হাঙ্গেরিয়ান স্বরলিপি উপস্থিত রয়েছে এবং এটির জন্য কী উদ্দেশ্য ছিল সে সম্পর্কে একটি নিবন্ধ লিখেছিলেন যা আপনার প্রশ্নের উত্তর দিতে সহায়তা করতে পারে।

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

area = width * height

পুরোপুরি ঠিক আছে দেখতে

impArea = metWidth * impHeight

আপনাকে সরাসরি দেখায় যে কিছু ভুল আছে।

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


13

আপনি যা বর্ণনা করছেন তাকে হাঙ্গেরিয়ান স্বরলিপি বলা হয় । এটি একসময় সেরা অনুশীলন হিসাবে বিবেচিত হত, তবে সাধারণত এখন তা নষ্ট করা হয়।

উইকিপিডিয়া নিবন্ধটিতে তার পক্ষে মতামত সম্পর্কিত একটি বিভাগ রয়েছে।


13

হ্যাঁ, উপসর্গগুলি কার্যকর হতে পারে তবে আমার কাছে বেশ কয়েকটি পরামর্শ রয়েছে:

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

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

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

মূলত এটি নিজেকে জিজ্ঞাসা করার একটি প্রশ্ন যা আপনাকে একটি পরিবর্তনশীল নাম বলতে চাই এবং এটি ডোমেন এবং আপনি যে ভাষাতে কাজ করছেন তার উপর অনেক নির্ভর করে।


7

নামকরণের কনভেনশনের কয়েকটি আলাদা "স্টাইল" রয়েছে এবং এগুলির বেশিরভাগের কোড বোধগম্য করার ক্ষেত্রে কিছুটা মূল্য রয়েছে।

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

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


6

বেশিরভাগ নেট বিকাশকারী মাইক্রোসফ্টের ডিজাইন গাইডলাইনগুলি অনুসরণ করেন ( http://msdn.microsoft.com/en-us/library/ms229042.aspx ), যা জাভা-র সাথে বেশ মিল (মূল পার্থক্য হ'ল মাইক্রোসফ্ট সদস্যদের নামগুলির জন্য পাস্কেল কেসকে সমর্থন করে, যখন জাভা) উটের কেসকে সমর্থন করে)।

এটি বাদ দিয়ে, আমি বলব যে আপনার অতিরিক্ত নয়েজ যুক্ত হওয়ার কারণে আপনার কোডের নমুনাটি কম কম পঠনযোগ্য।


5

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


5

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

প্রথম পয়েন্টটি আবার কি, "ইন্টারস্টুডেন্টকাউন্ট" আসলে "নাম্বার স্টুডেন্টস" এর চেয়ে কোনও পরিষ্কার? "ইনভয়েসলাইনআইটেমস" কমপক্ষে "অজবিআইটেমস" হিসাবে তথ্যবহুল হবে না। (ডেটা টাইপটি নিম্ন স্তরের উপস্থাপনা নয়, সমস্যা ডোমেনে থাকা ডেটার অর্থ সম্পর্কে হওয়া উচিত))

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


4

আপনি নামটিকে কেন উপসর্গ করছেন তার ঠিক বিপরীতে এটিও নির্ভর করে ।

উদাহরণ হিসাবে, আমি কোনও ফর্মের নিয়ন্ত্রণগুলির নামের জন্য 1-2 টি বর্ণের উপসর্গ ব্যবহার করতে চাই tend এটি নয় কারণ আমি জানি না যে সংকলকটি সহজেই বোতামটির জন্য সঠিক শ্রেণিটি খুঁজে পাবে (উদাহরণস্বরূপ), তবে আমি প্রথমে বড় ফর্মগুলি ডিজাইন করতে চাই, তারপরে বেশিরভাগ কোড পরে লিখি।

বোতামগুলির জন্য বিটি-এর একটি উপসর্গ থাকার পরে অনেকগুলি নাম একসাথে ঝাঁকুনির পরিবর্তে ডান বোতামটি সহজেই পরে খুঁজে পাওয়া যায়।

যদিও আমি ভেরিয়েবলের নামকরণের জন্য উপসর্গ ব্যবহার করি না, প্রকারের জন্য (যা সাধারণত যেভাবে কার্যকর হয় না), বা অর্থ, প্রসঙ্গ বা ইউনিটের জন্য নয় (যা হাঙ্গেরিয়ান নোটেশনের পিছনে মূল ধারণা)।


3

আমার দৃষ্টিতে, এটি ভাষা এবং প্রকল্পের আকারের উপর নির্ভর করে। আমি আমার সমস্ত ভেরিয়েবলের টাইপ উপসর্গগুলি ব্যবহার করতে আসলে এতক্ষন এগিয়ে যাইনি তবে আপনি তাদের নামটি একটি পরিষ্কার পদ্ধতিতে রাখতে চান।

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


1

উপসর্গগুলি প্রায়শই অবজেক্টগুলির জন্য অর্থবোধ করে, উদাহরণস্বরূপ এমন কোনও ফর্মে যেখানে আপনার কাছে 20 টি পাঠ্য বাক্স রয়েছে যা সমস্ত কল করে তা tbSomethingবোঝায়।

তবে বেশিরভাগ ক্ষেত্রেই আমি এটি উপযুক্ত বলে মনে করি না, বিশেষত মান ধরণের জন্য।

উদাহরণস্বরূপ, ধরুন আপনার কাছে:

short shortValue = 0;
//stuff happens

কয়েক মাস পরে আপনি এটি পরিবর্তন করার প্রয়োজন খুঁজে পান - একটি সংক্ষিপ্ত পরিমাণ যথেষ্ট বড় নয়। এখন তোমার আছে:

int shortValue = 0;
//stuff happens

আপনি যদি এখন ভেরিয়েবলের নাম পরিবর্তন না করেন (এই ক্ষেত্রে টাইপ পরিবর্তন করার চেয়ে কোড ভাঙার আরও ঝুঁকি থাকে) তবে আপনার এখন বিভ্রান্তিকর কোড রয়েছে।

এমন কোনও নাম রাখা ভাল যা এতে কী রয়েছে তা বর্ণনা করে:

int loopCounter = 0;
//stuff happens

পরে যদি এটিকে দীর্ঘ পরিবর্তন করতে হয়: সমস্যা নেই।

এই কনভেনশনগুলির জন্য গতিশীল টাইপ করা ভাষাগুলিতে বা আইডিইবিহীন ভাষায় আরও যুক্তি থাকতে পারে।


0

আমি সবসময় ভেরিয়েবলের সামনের দিকে টাইপের জন্য 2 থেকে 4 অক্ষরের সংক্ষেপণ ব্যবহার করার প্রবণতা পেয়েছি। অনেক সময় এটি ক্লান্তিকর বলে মনে হয় তবে আপনি যখন জটিল ডেটা বা পরিস্থিতি নিয়ে কাজ করছেন তখন তা উপকারী হয়। আমি মনে করি এটি নিম্ন উটের ক্ষেত্রে বিভাগে পড়ে।

উপরে আপনার উদাহরণের দিকে তাকালে, এটি হতে সামান্য পুনঃব্যবস্থাপনা করা হবে:

int intTickCount;
bool boolConnected;
object[] aobjItems;

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

taStore.Fill(dtStore);

... যা ইঙ্গিত করে যে আমার স্টোরের টেবিলএডাপ্টার স্টোর ডেটাটেবলে পূরণ করছে।


0

আমি সর্বদা বেসিক নীতিটি মেনে চলার চেষ্টা করেছি যে কোডটি আরও পাঠযোগ্য (সহজ সরল ইংরেজিতে) তৈরি করা হলেই উপসর্গ এবং / বা প্রত্যয়গুলি সন্নিবেশ করা উচিত।

তত কম রহস্যময়, তত ভাল ...

কেন এই জাতীয় পদ্ধতি আছে:

public boolean connect( String h, int p );

আপনি যখন এই জাতীয় কিছু পেতে পারেন:

public boolean connect( String hostName, int port );

তদুপরি, আজ আইডিইগুলির কাছে রিফ্যাক্টরিং (বিশেষত জাভা) ভেরিয়েবল, পদ্ধতির নাম, শ্রেণি ইত্যাদির জন্য শক্তিশালী সরঞ্জাম রয়েছে ... কমপক্ষে চরিত্রের সর্বাধিক তথ্য বলার ধারণাটি কেবল পুরানো ed

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