আমি সব ভাল উপসর্গের পক্ষে ।
আমি মনে করি (সিস্টেম) হাঙ্গেরিয়ান স্বরলিপি উপসর্গগুলি প্রাপ্ত বেশিরভাগ "খারাপ রেপ" এর জন্য দায়ী।
এই নোটেশনটি দৃ strongly়ভাবে টাইপ করা ভাষায় যেমন সি ++ "এলপিএসজেড" তে মূলত অর্থহীন, যখন আপনার স্ট্রিংটি নুল টার্মিনেটেড স্ট্রিংয়ের দীর্ঘ পয়েন্টার, যখন: বিভাগযুক্ত আর্কিটেকচারটি প্রাচীন ইতিহাস, সি ++ স্ট্রিংগুলি সাধারণ কনভেনশন পয়েন্টারগুলি দ্বারা নুল-টার্মিনেটে থাকে চর অ্যারে, এবং "গ্রাহকনাম" একটি স্ট্রিং তা জানা সত্যিই এতটা কঠিন নয়!
তবে আমি ভেরিয়েবলের ব্যবহার নির্দিষ্ট করার জন্য উপসর্গগুলি ব্যবহার করি (মূলত "অ্যাপস হাঙ্গেরিয়ান", যদিও আমি হাঙ্গেরীয় শব্দটি এড়ানো পছন্দ করি কারণ এটি সিস্টেমের হাঙ্গেরিয়ানের সাথে খারাপ এবং অন্যায়ভাবে সম্পর্কযুক্ত থাকার কারণে), এবং এটি একটি খুব কার্যকর সময়সামগ্রী এবং বাগ-হ্রাস পদ্ধতির
আমি ব্যবহার করি:
- সদস্যদের জন্য মি
- ধ্রুবক / পঠনযোগ্যদের জন্য সি
- পয়েন্টার জন্য পি (এবং পয়েন্টার থেকে পয়েন্টার জন্য পিপি)
- v অস্থির জন্য
- স্থির জন্য
- আমি সূচক এবং পুনরাবৃত্তির জন্য
- ই ইভেন্টের জন্য
যেখানে আমি প্রকারটি পরিষ্কার করতে চাই সেখানে আমি আদর্শ প্রত্যয় ব্যবহার করি (উদাহরণস্বরূপ তালিকা, কম্বোবক্স, ইত্যাদি)।
এটি প্রোগ্রামারটিকে যখনই তারা দেখায় / ব্যবহার করে তবে ভেরিয়েবলের ব্যবহার সম্পর্কে সচেতন করে তোলে । যুক্তিযুক্তভাবে সর্বাধিক গুরুত্বপূর্ণ কেসটি পয়েন্টারের জন্য "পি" (কারণ ব্যবহারটি বর্ণ থেকে পরিবর্তিত হয় -> এবং আপনাকে পয়েন্টারগুলি - এনইউএল, পয়েন্টার গাণিতিক, ইত্যাদি) সম্পর্কে আরও বেশি যত্নবান হতে হবে, তবে অন্য সমস্তগুলি খুব কার্যকর hand
উদাহরণস্বরূপ, আপনি একক ফাংশনে একই পরিবর্তনশীল নামটি একাধিক উপায়ে ব্যবহার করতে পারেন: (এখানে একটি সি ++ উদাহরণ, তবে এটি অনেকগুলি ভাষায় সমানভাবে প্রযোজ্য)
MyClass::MyClass(int numItems)
{
mNumItems = numItems;
for (int iItem = 0; iItem < mNumItems; iItem++)
{
Item *pItem = new Item();
itemList[iItem] = pItem;
}
}
আপনি এখানে দেখতে পারেন:
- সদস্য এবং পরামিতিগুলির মধ্যে কোনও বিভ্রান্তি নেই
- সূচক / পুনরাবৃত্তকারী এবং আইটেমগুলির মধ্যে কোনও বিভ্রান্তি নেই
- "গণনা", "সূচক" এর মতো জেনেরিক (অস্পষ্ট) নামের অনেকগুলি ক্ষতি এড়ানোর জন্য পরিষ্কারভাবে সম্পর্কিত ভেরিয়েবল (আইটেমের তালিকা, পয়েন্টার এবং সূচক) এর একটি সেট ব্যবহার করুন।
- উপসর্গগুলি "আইটেম ইন্ডেক্স" এবং "আইটেমপিটি" এর মতো বিকল্পের চেয়ে টাইপিং কমিয়ে দেয় (স্বল্প-সমাপ্তির সাথে আরও ভাল কাজ করে)
"আইনেম" পুনরাবৃত্তির আরেকটি দুর্দান্ত পয়েন্ট হ'ল আমি কখনই ভুল সূচকের সাথে একটি অ্যারে সূচী করি না এবং আমি যদি অন্য লুপের ভিতরে একটি লুপ অনুলিপি করি তবে আমাকে লুপ সূচক ভেরিয়েবলগুলির একটিতে রিফ্যাক্টর করতে হবে না।
এই অবাস্তববাদী সহজ উদাহরণটির সাথে তুলনা করুন:
for (int i = 0; i < 100; i++)
for (int j = 0; j < 5; j++)
list[i].score += other[j].score;
(যা পড়া শক্ত এবং প্রায়শই "আই" ব্যবহারের দিকে পরিচালিত করে যেখানে "জে" উদ্দেশ্য ছিল)
সঙ্গে:
for (int iCompany = 0; iCompany < numCompanies; iCompany++)
for (int iUser = 0; iUser < numUsers; iUser++)
companyList[iCompany].score += userList[iUser].score;
(যা অনেক বেশি পঠনযোগ্য এবং সূচকের তুলনায় সমস্ত বিভ্রান্তি দূর করে modern আধুনিক আইডিইতে স্বতঃপূরণ সহ, এটি টাইপ করাও দ্রুত এবং সহজ)
পরবর্তী সুবিধাটি হ'ল কোড স্নিপেটগুলির কোনও প্রসঙ্গ বোঝার দরকার নেই। আমি একটি ইমেল বা একটি নথিতে দুটি লাইনের কোড অনুলিপি করতে পারি এবং যে স্নিপেটটি পড়তে পারে সে সমস্ত সদস্য, ধ্রুবক, পয়েন্টার, সূচিপত্র ইত্যাদির মধ্যে পার্থক্য বলতে পারে আমাকে "ওহ" যুক্ত করতে হবে না এবং সাবধানতা অবলম্বন করা উচিত কারণ 'ডেটা' একটি পয়েন্টারকে নির্দেশ করে ", কারণ এটি 'পিপিডেটা' বলে called
এবং একই কারণে, আমাকে বুঝতে কোডের লাইন থেকে আমার চোখ সরিয়ে নিতে হবে না। 'ডেটা' স্থানীয়, প্যারামিটার, সদস্য বা ধ্রুবক কিনা তা জানতে আমাকে কোডের মাধ্যমে অনুসন্ধান করতে হবে না। আমাকে মাউসটির দিকে আমার হাত সরাতে হবে না যাতে আমি পয়েন্টারটি 'ডেটা' এর উপর দিয়ে রাখি এবং তারপরে কোনও সরঞ্জামদণ্ডের জন্য অপেক্ষা করতে পারি (যা কখনও কখনও দেখা যায় না) পপ আপ করার জন্য। সুতরাং প্রোগ্রামাররা কোডটি উল্লেখযোগ্যভাবে দ্রুত পড়তে এবং বুঝতে পারে, কারণ তারা অনুসন্ধান এবং উপরে এবং অপেক্ষা করতে সময় নষ্ট করে না।
(যদি আপনি মনে করেন না যে আপনি স্টাফ আউট করতে সন্ধানে সময় নষ্ট করছেন, একবছর আগে আপনি লিখেছেন এমন কিছু কোড সন্ধান করুন এবং সেটির দিকে তাকান নি the ফাইলটি খুলুন এবং এটি না পড়ে প্রায় অর্ধেক নীচে লাফিয়ে দেখুন See দেখুন কোনও সদস্য, প্যারামিটার বা স্থানীয় কিনা তা আপনি জানেন না আগে আপনি এখনই এই পয়েন্টটি পড়তে পারেন এখন অন্য এলোমেলো জায়গায় চলে যান ... আমরা যখন অন্য কারও কোডের মাধ্যমে একক পদবিন্যাস করি আমরা সারা দিন এটি করি long বা তাদের ফাংশনটি কীভাবে কল করবেন তা বোঝার চেষ্টা করছেন)
'এম' উপসর্গটি (আইএমএইচও) কুরুচিপূর্ণ এবং কথায় কথায় "এই->" স্বরলিপি এবং যে অসঙ্গতি তার গ্যারান্টি দেয় তা এড়িয়ে যায় (আপনি যদি সতর্ক হন তবে আপনি সাধারণত 'এই-> ডেটা' এর মিশ্রণটি শেষ করেন এবং একই শ্রেণিতে 'ডেটা', কারণ কিছুই নামের ধারাবাহিক বানান প্রয়োগ করে না)।
'এই' স্বরলিপিটি দ্ব্যর্থহীনতা সমাধানের উদ্দেশ্যে করা হয়েছে - তবে কেন কেউ ইচ্ছাকৃতভাবে দ্বিপাক্ষিক হতে পারে এমন কোড লিখবে? অস্পষ্টতা হবে কখনো কখনো একটি বাগ হতে। এবং কিছু ভাষায় 'এটি' স্থির সদস্যদের জন্য ব্যবহার করা যায় না, তাই আপনাকে আপনার কোডিং শৈলীতে 'বিশেষ মামলাগুলি' প্রবর্তন করতে হবে। আমি একক সাধারণ কোডিং বিধি পছন্দ করি যা সর্বত্র প্রযোজ্য - সুস্পষ্ট, দ্ব্যর্থহীন এবং সামঞ্জস্যপূর্ণ।
শেষ বড় সুবিধা হ'ল ইন্টেলিজেন্স এবং অটো-সম্পূর্ণকরণ with কোনও ইভেন্ট সন্ধানের জন্য উইন্ডোজ ফর্মটিতে ইন্টেলিজেন্স ব্যবহার করার চেষ্টা করুন - আপনাকে শত শত রহস্যময় বেস শ্রেণির পদ্ধতিতে স্ক্রোল করতে হবে যা আপনাকে ইভেন্টগুলি সন্ধান করার জন্য কখনই কল করতে হবে না। তবে প্রতিটি ইভেন্টের যদি "ই" উপসর্গ থাকে তবে সেগুলি স্বয়ংক্রিয়ভাবে "ই" এর অধীনে একটি গ্রুপে তালিকাভুক্ত হবে। সুতরাং, উপসর্গটি ইন্টেলিজেন্স তালিকার সদস্যগণ, কনসেটস, ইভেন্টস ইত্যাদিকে গ্রুপ করার জন্য কাজ করে, আপনার পছন্দসই নামগুলি খুঁজে পেতে এটি আরও দ্রুত এবং সহজ করে তোলে। (সাধারণত, কোনও পদ্ধতির প্রায় 20-50 মান থাকতে পারে (স্থানীয়, প্যারাম, সদস্য, কনসেটস, ইভেন্ট) যা এর সুযোগে অ্যাক্সেসযোগ্য But .. '), আমি কেবল 2-5 স্বতঃ-সম্পূর্ণ বিকল্পগুলি উপস্থাপন করছি' 'অতিরিক্ত টাইপিং'
আমি একটি অলস প্রোগ্রামার, এবং উপরের সম্মেলনটি আমাকে অনেক কাজ বাঁচায়। আমি দ্রুত কোড করতে পারি এবং আমি অনেক কম ভুল করতে পারি কারণ আমি জানি যে প্রতিটি পরিবর্তনশীল কীভাবে ব্যবহার করা উচিত।
বিরুদ্ধে আর্গুমেন্ট
তো, কনস কি? উপসর্গগুলির বিরুদ্ধে সাধারণ যুক্তিগুলি হ'ল:
"উপসর্গের স্কিমগুলি খারাপ / খারাপ" । আমি সম্মত হই যে "m_lpsz" এবং এর সম্প্রদায়গুলি দুর্বলভাবে চিন্তা করা এবং সম্পূর্ণরূপে অকেজো। সে কারণেই আমি আপনার প্রসঙ্গের জন্য অনুপযুক্ত কিছু অনুলিপি না করে আপনার প্রয়োজনীয়তাগুলি সমর্থন করার জন্য ডিজাইন করা একটি ভাল নকশা ব্যবহার করার পরামর্শ দেব। (কাজের জন্য সঠিক টুল ব্যবহার করুন).
"আমি যদি কোনও কিছুর ব্যবহার পরিবর্তন করি তবে আমার নাম পরিবর্তন করতে হবে" । হ্যাঁ, অবশ্যই আপনি করছেন, এটিই রিফ্যাক্টরিং সম্পর্কে এবং আইডিইগুলির কাছে এই কাজটি দ্রুত এবং বেদাহীনভাবে করার জন্য রিফ্যাক্টরিংয়ের সরঞ্জাম কেন রয়েছে। এমনকি উপসর্গ ছাড়াই একটি পরিবর্তনশীল ব্যবহার পরিবর্তন প্রায় অবশ্যই মানে তার নাম কর্তব্য পরিবর্তন করা।
"উপসর্গগুলি আমাকে কেবল বিভ্রান্ত করে" । আপনি কীভাবে এটি ব্যবহার করতে শিখেন ততক্ষণ প্রতিটি সরঞ্জামের মতো। একবার আপনার মস্তিষ্ক নামকরণের নিদর্শনগুলিতে অভ্যস্ত হয়ে উঠলে, এটি স্বয়ংক্রিয়ভাবে তথ্যগুলি ছাঁটাই করে দেবে এবং আপনি সত্যিই মনে করবেন না যে উপসর্গগুলি আরও কিছু আছে। আপনি সত্যিই "সাবলীল" হওয়ার আগে আপনাকে অবশ্যই এই জাতীয় পরিকল্পনাটি এক বা দু'সপ্তাহ ধরে ব্যবহার করতে হবে। এবং এ কারণেই অনেক লোক পুরানো কোডটি দেখে এবং ভাবতে শুরু করে যে তারা কীভাবে কোনও ভাল উপসর্গ স্কিম ছাড়াই পরিচালনা করে।
"এই জিনিসটি কার্যকর করার জন্য আমি কেবল কোডটি দেখতে পারি" । হ্যাঁ, তবে উত্তরটি আপনার চোখের দিকে ইতিমধ্যে কেন্দ্রীভূত হওয়া জায়গাতেই সঠিক সময়ে কোডটিতে অন্য কোথাও দেখার বা তার প্রতিটি ছোট বিবরণ মনে রাখার দরকার নেই।
(কিছু কিছু) সেই তথ্যটি কেবলমাত্র আমার ভেরিয়েবলটিতে পপ আপ করার জন্য একটি সরঞ্জামদণ্ডের জন্য অপেক্ষা করে পাওয়া যায় । হ্যাঁ. যেখানে সমর্থিত, কিছু ধরণের উপসর্গের জন্য, যখন আপনার কোড পরিষ্কারভাবে সংকলন করে, একটি অপেক্ষার পরে, আপনি একটি বিবরণের মাধ্যমে পড়তে পারেন এবং উপসর্গটি তাত্ক্ষণিকভাবে জানানো তথ্যগুলি পেতে পারেন। আমি অনুভব করি যে উপসর্গটি একটি সহজ, আরও নির্ভরযোগ্য এবং আরও দক্ষ পদ্ধতির।
"এটি আরও টাইপিং" । সত্যি? আরও একটি পুরো চরিত্র? বা এটি - আইডিই স্বতঃ-সমাপ্তির সরঞ্জামগুলির সাথে এটি প্রায়শই টাইপিং হ্রাস করবে, কারণ প্রতিটি উপসর্গের অক্ষর অনুসন্ধানের স্থানটিকে উল্লেখযোগ্যভাবে সঙ্কুচিত করে। "E" টিপুন এবং আপনার শ্রেণীর তিনটি ইভেন্ট ইন্টেলিজেন্সে পপ আপ করুন। "সি" টিপুন এবং পাঁচটি ধ্রুবক তালিকাভুক্ত করা হয়েছে।
"আমি এর this->
পরিবর্তে ব্যবহার করতে পারি m
" । ভাল, হ্যাঁ, আপনি পারেন। তবে এটি কেবল অনেক কৃপণ এবং আরও ভার্জোজ উপসর্গ! শুধু এটি একটি অনেক বেশি ঝুঁকি (বিশেষ করে দলে) বহন করে কারণ কম্পাইলার এটা ঐচ্ছিক , সেইজন্য এবং ব্যবহারের ঘন ঘন সঙ্গতিহীন। m
অন্যদিকে সংক্ষিপ্ত, স্পষ্ট, সুস্পষ্ট এবং notচ্ছিক নয়, তাই এটি ব্যবহার করে ভুল করা আরও শক্ত।