হাঙ্গেরিয়ান স্বরলিপি ব্যবহার না করে কী লাভ?


101

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

আমি এসকিউএল সার্ভারেও অনেক কাজ করি। আমি আমার সঞ্চিত পদ্ধতিগুলি 'এসপি' এবং আমার টেবিলগুলিকে 'টিবিএল' দিয়ে উপসর্গ করি, ডাটাবেসে আমার সমস্ত ভেরিয়েবল যথাক্রমে উল্লেখ না করে।

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


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

10
@ মেনমা আমি নিশ্চিত নই যে পিএইচপি-তে কোনও মানের ধরণ না জানার এটি একটি ভাল কারণ।
রেই মিয়াসাকা

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

20
"আপনার সহকর্মীদের দ্বারা ঘৃণা করা হবে না" হাঙ্গেরীয় স্বরলিপি ব্যবহার না করে কী লাভ তা মনে আসে ...
সান প্যাট্রিক ফ্লয়েড

25
অ্যাডহুঙ্গারিয়ান এনটেশন ভিআইএস অ্যাডহার্ড প্রিপটো ভিআরিড।
dan04

উত্তর:


148

কারণ এর মূল অভিপ্রায় (দেখুন http://www.joelonsoftware.com/articles/Wrong.html এবং http://fplanque.net/Blog/devblog/2005/05/11/hungar_notation_on_steroids ) ভুল বোঝাবুঝি হয়েছে এবং হয়েছে ( আব) লোকেরা যখন ভাষা ব্যবহার করেন তা স্থিরভাবে টাইপ না করা হলে ভেরিয়েবল কী প্রকারটি তা মনে রাখতে সহায়তা করে। কোনও স্থিতিযুক্ত টাইপিত ভাষায় আপনার চলক কী টাইপ তা বলতে আপনাকে প্রিফিক্সের যোগ করা ব্যালাস্টের প্রয়োজন হয় না। অনেকগুলি টাইপযুক্ত স্ক্রিপ্ট ভাষায় এটি সহায়তা করতে পারে তবে এটি সম্পূর্ণরূপে অস্বাস্থ্যকর হয়ে ওঠার দৃষ্টিতে প্রায়শই অপব্যবহার করা হয়েছে। দুর্ভাগ্যক্রমে, হাঙ্গেরিয়ান স্বরলিপিটির মূল অভিপ্রায় ফিরে যাওয়ার পরিবর্তে, লোকেদের কেবল এগুলি "খারাপ" জিনিসগুলির মধ্যে একটি তৈরি করা হয়েছে যা আপনার এড়ানো উচিত should

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

আপডেট (দেলানানের মন্তব্যের জবাবে)

IMHO আপত্তিজনক সংস্করণটিকে প্লেগের মতো এড়ানো উচিত কারণ:

  • এটি নামকরণকে জটিল করে তোলে। যখন (আব) হাঙ্গেরিয়ান স্বরলিপি ব্যবহার করা হবে তখন সর্বদা উপসর্গগুলি কীভাবে নির্দিষ্ট করা উচিত তা নিয়ে আলোচনা হবে। যেমন: listboxXYZবা MyParticularFlavourListBoxXYZ
  • এটি ভেরিয়েবলটি কী তা বোঝার জন্য সহায়তা না করে ভেরিয়েবলের নাম দীর্ঘায়িত করে।
  • এটি ধরণের সংক্ষেপে সংক্ষিপ্ত হয়ে যাওয়ার জন্য দীর্ঘ উপসর্গগুলি এড়াতে যখন অনুশীলনের উদ্দেশ্যটিকে হ্রাস করে এবং প্রতিটি সংক্ষেপণের অর্থ কী তা জানতে আপনার একটি অভিধান প্রয়োজন। একটি হল uiএকটি স্বাক্ষরবিহীন পূর্ণসংখ্যা? একটি নির্লিপ্ত গণনা ইন্টারফেস? ইউজার ইন্টারফেসের সাথে কিছু করার? এবং এই জিনিসগুলি দীর্ঘ হতে পারে । আমি 15 টিরও বেশি আপাতদৃষ্টিতে এলোমেলো অক্ষরের উপসর্গ দেখেছি যা ভেরের সঠিক ধরণের বোঝাতে পারে তবে সত্যই কেবল রহস্যজনক fy
  • এটি দ্রুত পুরানো হয়ে যায়। আপনি যখন পরিবর্তনশীল মানুষের ধরণটি অলসভাবে পরিবর্তন করেন (লোকে) পরিবর্তনটি প্রতিবিম্বিত করার জন্য উপসর্গটি আপডেট করতে ভুলে যান বা ইচ্ছাকৃতভাবে এটি আপডেট করবেন না কারণ এই কোডটি যে কোনও জায়গায় পরিবর্তিত হয় ...
  • কোড সম্পর্কিত কথা বলা জটিল করে কারণ "@g" হিসাবে। বলেছেন: হাঙ্গেরিয়ান স্বরলিপি সহ পরিবর্তনশীল নামগুলি সাধারণত-উচ্চারণ-বর্ণিত বর্ণমালার স্যুপ। এটি পঠনযোগ্যতা এবং আলোচনার কোডকে বাধা দেয় কারণ আপনি কোনও নাম 'বলতে পারবেন না'।
  • ... আরও অনেক কিছু যা আমি এই মুহূর্তে মনে করতে পারি না। সম্ভবত কারণ আমি দীর্ঘ সময় ধরে আপত্তিজনক হাঙ্গেরিয়ান স্বরলিপিটি মোকাবেলা না করার আনন্দ পেয়েছি ...

9
@ Surfer513: প্রকৃতপক্ষে, নামকরণ নিয়ন্ত্রণের সময় আমি প্রত্যয় পছন্দ করি। আমার কাছে এটি সমস্ত সম্পাদনা নিয়ন্ত্রণগুলি সন্ধানের চেয়ে নির্দিষ্ট বিষয় / দিকের সাথে সম্পর্কিত সমস্ত নিয়ন্ত্রণগুলি খুঁজে পাওয়া আরও আকর্ষণীয় ... আমি যখন ব্যবহারকারী কোনও ক্লায়েন্টের নামে টাইপ করতে পারি এমন নিয়ন্ত্রণটি খুঁজতে চাই, তখন আমি অনুসন্ধান শুরু করব txt এর পরিবর্তে ক্লায়েন্ট, কারণ এটি কোনও টেক্সট (সম্পাদনা) নাও হতে পারে তবে একটি মেমো বা রিশেডিট বা একটি ... এটি পূর্বে প্রবেশকৃত ক্লায়েন্টের নামগুলি সন্ধান করার জন্য একটি কম্বো বক্সও হতে পারে ...
মার্জান ভেনেমা

8
@ সার্ফার ৫১৩: এবং আজকাল আমি কেবল প্রত্যয় ব্যবহার করার প্রবণতা দেখি যখন একই জিনিস নিয়ে কাজ করে এমন দুটি নিয়ন্ত্রণের মধ্যে পার্থক্য করা হয়। উদাহরণস্বরূপ লেবেল এবং ক্লায়েন্টের নামের জন্য সম্পাদনা। এবং প্রায়শই প্রত্যয়গুলি নিয়ন্ত্রণের ধরণের সাথে সম্পর্কিত হয় না তবে এর উদ্দেশ্যে হয়: উদাহরণস্বরূপ ক্লায়েন্টক্যাপশন এবং ক্লায়েন্ট ইনপুট।
মার্জন ভেনেমা

3
এটিও লক্ষণীয় যে ভিএস ২০১০-তে ইন্টেলিজেন্স আপনাকে কেবল শুরু নয়, পুরো নামটি অনুসন্ধান করতে দেয় । আপনি যদি আপনার নিয়ন্ত্রণটির নাম "ফার্স্টনেমেক্সটবক্স" রাখেন এবং "পাঠ্যপুস্তক" টাইপ করেন তবে এটি আপনার নিয়ন্ত্রণটি সন্ধান করবে এবং এটি তালিকাভুক্ত করবে।
অ্যাডাম রবিনসন

4
'... অপব্যবহার করা সংস্করণটি ফলকের মতো এড়ানো যায় ...' যা বলা যায়, টারটার এবং জিঞ্জিভাইটিসের চেয়ে কিছুটা কম এড়ানো যায়? ;-)
বেন মোশার

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

74

হাঙ্গেরীয় স্বীকৃতি আধুনিক দিনের প্রোগ্রামিং পরিবেশ এবং ট্যোটোলজির ফর্মের একটি নামকরণ বিরোধী নিদর্শন

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

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


2
"আপনি যখন intঅন্য ধরণের পরিবর্তিত হন যেমন কি হয় long..." সরল: <স্কার্স্ম> নামটি পরিবর্তন করবেন না কারণ পরিবর্তনটি কতটা জায়গাটি ছড়িয়ে দেবে তা বলার অপেক্ষা রাখে না sar </ সার্কাসম> সুতরাং এখন আপনার একটি ভেরিয়েবল রয়েছে যার হাঙ্গেরিয়ান নামটির প্রয়োগের সাথে দ্বন্দ্ব রয়েছে। ভেরিয়েবল / ফাংশনটির সার্বজনীন দৃশ্যমানতা থাকলে নাম পরিবর্তনের প্রভাবগুলি কতটা ব্যাপক হবে তা বলার একেবারেই উপায় নেই।
ডেভিড হামেন

2
লিঙ্কযুক্ত নিবন্ধটি দুর্দান্ত এবং একটি পড়ার পক্ষে অত্যন্ত মূল্যবান। +1
মার্টি পিট

6
@ ডেভিড কেবল উইন 32 এপিআইয়ের দিকে তাকান যা ভেরিয়েবল, প্যারামিটার এবং এমনকী নামগুলির সাথে ছাঁটাই করে থাকে যা হাঙ্গেরিয়ান নোটেশন ব্যবহার করে (যা এমএসে প্রয়োজনীয়) একটি 8 বিট বা 16 বিটের মান নির্দেশ করে যখন তারা সবসময় 32 বিট হয়েছে ১৯৯৪ সালে উইন্ডোজ 95 এর সূচনা হওয়ার পরে মানগুলি (প্রায় 17 বছর আগে)।
জ্বলছে

2
@ সুরক্ষা: আমি তর্ক করব যে স্বয়ংক্রিয় পরীক্ষাগুলি করা উচিত। প্রোগ্রামার না।
জোয়েল

2
@ নিরাপদ কোনও অভ্যন্তরীণ অ্যাপ্লিকেশনটিতে নাও থাকতে পারে তবে আপনি যদি উইন্ডোজ এপিআইয়ের মতো কোনও পাবলিক এপিআই বজায় রাখেন তবে এটি একটি বড় সমস্যা।
আগমন w

51

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

মূলত কেবল হানির সংকেত ব্যবহার না করার সুবিধা হ'ল এর অসুবিধাগুলি এড়ানো:

  • সংকলক দ্বারা টাইপ-চেকিং করা হলে হাঙ্গেরিয়ান স্বরলিপি অপ্রয়োজনীয়। টাইপ-চেকিং সরবরাহকারী ভাষার জন্য সংকলকগণ একটি ভেরিয়েবলের ব্যবহার স্বয়ংক্রিয়ভাবে এর ধরণের সাথে সামঞ্জস্য করে তা নিশ্চিত করে; চোখের মাধ্যমে চেকগুলি অপ্রয়োজনীয় এবং মানব ত্রুটির সাপেক্ষে।

  • সমস্ত আধুনিক ইন্টিগ্রেটেড ডেভলপমেন্ট এনভায়রনমেন্টগুলি চাহিদার ভিত্তিতে পরিবর্তনশীল প্রকারগুলি প্রদর্শন করে এবং স্বয়ংক্রিয়ভাবে ফ্ল্যাগ অপারেশনগুলি যা বেমানান প্রকারগুলি ব্যবহার করে স্বীকৃতিটি মূলত অপ্রচলিত করে তোলে।

  • হাঙ্গেরিয়ান নোটেশন বিভ্রান্ত হয়ে ওঠে যখন এটি বিভিন্ন বৈশিষ্ট্য উপস্থাপন করতে ব্যবহৃত হয়, যেমন a_crszkvc30LastNameCol: একটি ধ্রুবক রেফারেন্স যুক্তি, LastNameটাইপের ডাটাবেস কলামের বিষয়বস্তু ধারণ করে varchar(30)যা টেবিলের প্রাথমিক কীটির অংশ।

  • কোডটি সংশোধিত বা পোর্ট করা হলে এটি অসঙ্গতি হতে পারে। যদি কোনও ভেরিয়েবলের ধরণ পরিবর্তন করা হয় তবে হয় ভেরিয়েবলের নামের সজ্জাটি নতুন ধরণের সাথে সামঞ্জস্যপূর্ণ নয়, বা ভেরিয়েবলের নাম অবশ্যই পরিবর্তন করতে হবে। একটি বিশেষভাবে সুপরিচিত উদাহরণ হ'ল স্ট্যান্ডার্ড WPARAMটাইপ, এবং wParamঅনেক উইন্ডোজ সিস্টেম ফাংশন ডিক্লারেশনগুলিতে আনুষ্ঠানিক প্যারামিটার। 'ডাব্লু' এর অর্থ 'শব্দ', যেখানে 'শব্দ' প্ল্যাটফর্মের হার্ডওয়্যার আর্কিটেকচারের স্থানীয় শব্দ আকার। এটি মূলত 16-বিট শব্দের আর্কিটেকচারে 16 বিট টাইপ ছিল, তবে 32-বিট শব্দের আর্কিটেকচারে 32-বিট, বা অপারেটিং সিস্টেমের পরবর্তী সংস্করণগুলিতে -৪-বিট শব্দ আর্কিটেকচারে -৪-বিট টাইপ পরিবর্তিত হয়েছিল আসল নাম (এর আসল অন্তর্নিহিত টাইপটি হ'ল)UINT_PTR, এটি, একটি স্বাক্ষরবিহীন পূর্ণসংখ্যার পয়েন্টার ধরে রাখতে যথেষ্ট বড়)। প্ল্যাটফর্ম থেকে প্ল্যাটফর্ম থেকে শব্দার্থক প্রতিবন্ধকতা এবং তাই প্রোগ্রামার বিভ্রান্তি এবং অসঙ্গতি, এই ধারণাটি নিয়ে যে 'ডাব্লু' those বিভিন্ন পরিবেশে 16-বিট হিসাবে দাঁড়িয়েছে।

  • বেশিরভাগ সময় ভেরিয়েবলের ব্যবহার জানার অর্থ এর প্রকারটি বোঝা। তদ্ব্যতীত, যদি কোনও ভেরিয়েবলের ব্যবহার না জানা থাকে, তবে এটির ধরণ থেকে এটি বাদ দেওয়া যাবে না।

  • হাঙ্গেরিয়ান স্বরলিপি বৈশিষ্ট্য সমৃদ্ধ কোড সম্পাদকদের ব্যবহারের সুবিধাগুলি হ্রাস করে যা ভেরিয়েবলের নামগুলিতে সমাপ্তি সমর্থন করে, কারণ প্রোগ্রামারকে প্রথমে পুরো টাইপ স্পেসিফায়ারকে ইনপুট করতে হয়।

  • এটি অযথা প্রকারের সাথে ভেরিয়েবলের উদ্দেশ্য এবং স্কোপিং উপসর্গগুলি দ্বারা কোডটিকে কম পঠনযোগ্য করে তোলে।

  • অতিরিক্ত ধরণের তথ্য অপর্যাপ্তভাবে আরও বর্ণনামূলক নামগুলি প্রতিস্থাপন করতে পারে। যেমন sDatabaseপাঠককে তা বলে না tell databaseNameআরও বর্ণনামূলক নাম হতে পারে।

  • যখন নামগুলি যথেষ্ট বর্ণনামূলক হয় তখন অতিরিক্ত ধরণের তথ্য অপ্রয়োজনীয় হতে পারে। উদাহরণস্বরূপ firstNameসম্ভবত একটি স্ট্রিং। সুতরাং এটির নামকরণ sFirstNameকোডে কেবল বিশৃঙ্খলা যুক্ত করে।

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


1
এটি সঠিক উত্তর হওয়া উচিত। এটি খুব সুন্দর. +1
সা Saeedদ নেমতি

আপনি খুব দয়ালু, সা Saeedদ। আমি আপনার প্রশংসা মূল্যবান কিন্তু এই প্রশ্নের অন্যান্য উত্তরও খুব ভাল।
ফ্যালকন

11
একটি বাক্যটির জন্য উত্সাহিত: " বেশিরভাগ সময়, ভেরিয়েবলের ব্যবহার জেনে বোঝা তার প্রকারটি বোঝা যায় Furthermore তদুপরি, যদি কোনও ভেরিয়েবলের ব্যবহার না জানা থাকে তবে এটির ধরণটি ছাড়াই যায় না " "- আইএমএইচও, হাঙ্গেরীয় স্বরলিপি এড়াতে এটি # 1 কারণ।
ড্যানিয়েল প্রাইডেন

19

এমএস এসকিউএল সার্ভারের নির্দিষ্ট সমস্যা হিসাবে:

'Sp_' এর উপসর্গযুক্ত যে কোনও সঞ্চিত প্রক্রিয়াটি সর্বাগ্রে তৈরি হওয়ার পরিবর্তে মাস্টার ডাটাবেসে প্রথমে অনুসন্ধান করা হয় This এটি সঞ্চিত প্রক্রিয়াটি কার্যকর করার ক্ষেত্রে বিলম্ব ঘটায়।


4
কিছু খুব শীতল তথ্যের জন্য +1। আমি 'এসপি' ব্যবহার করে আমার সঞ্চিত প্রোক্স উপসর্গ হিসাবে ব্যবহার করি। তবে সবগুলি যা অবশ্যই স্পষ্টভাবে খুব আকর্ষণীয় সত্য এবং 'sp_' সঞ্চিত সংগ্রহ উপসর্গ হিসাবে ব্যবহার না করার একটি দৃ concrete় কারণ।

2
+1 আমি এটি কখনই জানতাম না এবং যখন আমি এসকিউএল সার্ভারে কাজ শুরু করি তখন আমার কর্মস্থলের সমস্ত এসপি উপসর্গযুক্ত ছিল sp_তাই আমি কেবল কনভেনশনটিতে আটকে গেলাম।
মাইকেল

দুর্দান্ত পয়েন্ট, তবে এই প্রশ্নের সাথে কিছুই করার নেই (বর্গ এবং _ এসপি ব্যবহার নয়)। এটি ডিফল্ট স্কিমাতে নেই এমন অবজেক্টগুলির জন্য স্কিমা নাম রেখে দেওয়ার মতো।
JeffO

1
ব্যবহারকারীর সঞ্চিত পদ্ধতিগুলির জন্য, আমি প্রচলিতভাবে 'ইউএসপি_' ব্যবহার করি। এটি উল্লিখিত সমস্যা এড়াতে এবং স্প্রোক সিস্টেম বা ব্যবহারকারী ছিল কিনা তা পাঠকের জন্য আলাদা করতে সহায়তা করে।
ছাতা

15

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

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

আমি এএসপি.এনইটি নিয়ন্ত্রণের জন্য হাঙ্গেরীয় প্রবণতা ব্যবহার করার সময়টি কেবলমাত্র যুক্ত করব এবং এটি সত্যিই পছন্দের বিষয়। আমি সহজ টাইপ করতে TextBoxCustomerNameবা বনামকে খুব কুৎসিত CustomerNameTextBoxমনে করি txtCustomerName, তবে এটি "নোংরা "ও বোধ করে। আমি মনে করি কিছু নামকরণের কনভেনশন ধরনের নিয়ন্ত্রণের জন্য ব্যবহার করা উচিত হিসাবে সেখানে একাধিক নিয়ন্ত্রণ যে একই তথ্য প্রদর্শন করা যেতে পারে।


13

আপনি যেহেতু এটি উল্লেখ করেছেন আমি কেবল এসকিউএল সার্ভারের উপর ফোকাস করব। আমি কোনও টেবিলের সামনে 'টিবিএল' রাখার কোনও কারণ দেখতে পাচ্ছি না। আপনি কেবল যে কোনও টিএসকিউএল কোড দেখতে পারেন এবং কীভাবে এটি ব্যবহার করা হয় তা দ্বারা একটি সারণী আলাদা করতে পারেন। তুমি would Select from stored_procedure.বা Select from table(with_param)আপনি যদি একটি ইউডিএফ would বা মত Execute tblTableOrViewNameএকটি সঞ্চিত পদ্ধতি মত।

টেবিলগুলি একটি ভিউতে বিভ্রান্ত হতে পারে, তবে এটি কীভাবে ব্যবহৃত হয় তা আসে; কোনও পার্থক্য নেই, তাহলে কী লাভ? হাঙ্গেরিয়ান স্বরলিপিটি আপনার এটি এসএসএমএসে সন্ধান করার সময় বাঁচাতে পারে (টেবিল বা দর্শনগুলির নীচে?), তবে এটি প্রায়।

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

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


2
@ সুরফার: একটি প্রাথমিক কী আলাদা কারণ "পিকে" টাইপ নয়; "PK_TableName" বলে "এই প্রাথমিক চাবিকাঠি জন্য , না" এই ধরনের পি কে একটি tablename হল "tablename"। বাকী হিসাবে ... এটি আপনি এখানে আর্গুমেন্ট সত্যিই শুনছেন বলে মনে হচ্ছে না listening দয়া করে এই ঘৃণ্য অনুশীলনটি ব্যবহার বন্ধ করুন যা আজ অবধি সমস্ত কোডের সম্মিলিত গুণমানকে নীচে নামিয়ে রাখে।
অ্যারোনআউট

2
@Aaronaught, আপনি হাঙ্গেরীয় নোটেশন (এক দৃষ্টিভঙ্গি উল্লেখ করা হয় en.wikipedia.org/wiki/Hungarian_notation )। এটি কেবল টাইপই নয়, ব্যবহারের উদ্দেশ্যেও। সুতরাং একটি প্রাথমিক কী এর জন্য 'pk' দিয়ে উপসর্গ করা আসলে হাঙ্গেরীয় নোটেশন। আমি এখানে যুক্তি শুনছি, তবে ব্যতিক্রমগুলি রয়েছে (প্রাথমিক কী পরিস্থিতি মত) যেখানে এইচএন সুবিধাজনক বলে মনে হয়। হয়তো, হয়তো না. আমি এখনও সমস্ত মাথা ঘুরিয়ে দেওয়ার চেষ্টা করছি না এবং সমস্ত পরিস্থিতিতে দেখুন। আমি এটি সম্পর্কে আজ বেশ কিছুটা শিখেছি এবং কিছু দুর্দান্ত চিন্তাভাবনার জন্ম দিয়েছি।

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

4
আপনার দ্বিতীয় থেকে শেষ অনুচ্ছেদে আমি পছন্দ করি। হাঙ্গেরীয় স্বরলিপি ব্যবহারের জন্য আমার দৃ's়ের যুক্তি "এটি আমাদের দ্রুত দেখতে দেয় যে কোন ভেরিয়েবলগুলি বিশ্বব্যাপী এবং কোনটি নয়" " এবং তারপরে আপনি ভেরিয়েবলের ঘোষণাগুলি দেখুন এবং ফাইলের জন্য 300 ভেরিয়েবল রয়েছে, কিছু মি * মডিউলারের (গ্লোবাল) জন্য, কিছু ভি * স্থানীয় সংস্করণের জন্য যা তারা মডিউলার লেভেলে অস্বীকার করেছেন। "ওহ, কারণ এগুলি কেবল স্থানীয় হিসাবে ব্যবহার করার উদ্দেশ্যে, মডিউলার হিসাবে নয় not" ফেসপাম
কর্সিকা

3
@ অ্যারোনট: আমার বর্তমান প্রকল্পে, আমরা tbl_ এর উপসর্গযুক্ত টেবিলের নামগুলি ব্যবহার করছি । যদিও আমি এই অনুশীলনের কোনও বড় অনুরাগী নই, তবে এটি কীভাবে "সমস্ত কোডের সম্মিলিত গুণমানকে নামিয়ে আনছে" তা দেখতে আমি ব্যর্থ । আপনি সম্ভবত একটি উদাহরণ দিতে পারেন?
ট্রাব

6

আর একটি জিনিস যোগ করার জন্য হ'ল, নেট। এর মতো পুরো কাঠামোর জন্য আপনি কোন সংক্ষেপণ ব্যবহার করবেন? হ্যাঁ, এটি এত সাধারণ যে এটি btnএকটি বোতামকে txtউপস্থাপন করে এবং একটি পাঠ্য বাক্সকে উপস্থাপন করে remember তবে এমন কিছুর জন্য আপনার মনে কী আছে StringBuilder? strbld? কি হবে CompositeWebControl? আপনি কি এরকম কিছু ব্যবহার করেন:

CompositeWebControl comWCMyControl = new CompositeWebControl();

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


6

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

SafeString encode(UnsafeString)

এবং অনিরাপদ স্ট্রিংয়ের অভ্যন্তরীণ অ্যাক্সেসের অভাব বা অন্য কিছু রূপান্তর ফাংশন ব্যবহার করা অনিরাপদ স্ট্রিং থেকে নিরাপদ স্ট্রিংয়ে যাওয়ার একমাত্র উপায় হয়ে যায়। যদি আপনার সমস্ত আউটপুট ফাংশনগুলি কেবল সেফ স্ট্রিংয়ের উদাহরণ গ্রহণ করে তবে একটি অব্যাহতিপ্রাপ্ত স্ট্রিং আউটপুট করা অসম্ভব হয়ে পড়ে [স্ট্রিংটোসফস্ট্রিং (কিছু ইউএনএসএফ স্ট্রিং.টোস্ট্রিং ())] র রূপান্তর দিয়ে শেনিনিগানদের ব্যার করা।

এটা স্পষ্ট হওয়া উচিত যে টাইপ সিস্টেমটিকে আপনার কোডটি স্যানিটি পরীক্ষা করার অনুমতি দেওয়ার জন্য এটি নিজের হাতে করার চেষ্টা করার চেয়ে শ্রেষ্ঠ বা এই ক্ষেত্রে চোখের থেকেও বেশি।

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

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


কীভাবে কেউ "নেট int[]যা সংশোধিত হতে পারে তবে কখনই ভাগ করা যায় না" বা " int[]যা কখনও এটিকে সংশোধন করতে পারে না কেবল তার মধ্যে অবাধে ভাগ করা যায় " তা বর্ণনা করার জন্য কীভাবে একটি নেট বা জাভা টাইপ ঘোষণা করে ? যদি কোনও int[]ক্ষেত্র fooমানকে encapsulates করে {1,2,3}তবে এটির {2,2,3}কোন "প্রকার" int[]প্রতিনিধিত্ব করে না জেনে এটি কী encapsulate করতে পারে ? আমার মনে হয় জাভা এবং .NET আরও অনেক ভাল হত যদি - টাইপ-সিস্টেম সমর্থন না থাকায় তারা কমপক্ষে এই ধরণের পার্থক্য করার জন্য একটি নামকরণের কনভেনশন গ্রহণ করেছিল।
সুপারক্যাট

4

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

গতিশীলভাবে টাইপ করা ভাষায়, এটি কখনও কখনও সহায়তা করতে পারে তবে আমার কাছে এটি ইউনিডিয়োম্যাটিক মনে হয়। আপনি ইতিমধ্যে আপনার কাজগুলি সঠিক ডোমেন / কোডোমাইনগুলিতে সীমাবদ্ধ রেখেছেন; যদি আপনার সমস্ত ভেরিয়েবলের নাম হানিবি স্বরলিপি দিয়ে দেওয়া হয়, তবে আপনি কেবল একটি টাইপ সিস্টেম আপনাকে যা দেবে তা পুনরুত্পাদন করছে। আপনি কীভাবে এমন একটি বহুকোষীয় পরিবর্তনশীল প্রকাশ করবেন যা হানির নোটেশনে একটি পূর্ণসংখ্যা বা স্ট্রিং হতে পারে? "IntStringX"? "IntOrStringX"? আমি কখনও হানিয়ারী স্বরলিপি ব্যবহার করেছি কেবল সমাবেশের কোডে, কারণ আমি টাইপ সিস্টেম থাকলে আমি কী ফিরে পেতে চাইত তা চেষ্টা করার চেষ্টা করছিলাম, এবং এটিই আমি প্রথম কোড করেছিলাম।

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


বেশিরভাগ গতিময় টাইপ করা ভাষার জন্য এটিও বেশ বেহুদা!
জেমস অ্যান্ডারসন

2
আইডিইগুলির জন্য এটি ম্যানুয়াল কোডিংয়ের চেয়েও খারাপ কারণ এর অর্থ কোড সমাপ্তি নাটকীয়ভাবে ধীর হয়ে যায়। আপনার যদি 100 পূর্ণসংখ্যার ভেরিয়েবল থাকে তবে টাইপ করার সময় <<< স্পেস> টাইপ করুন (উদাহরণস্বরূপ) 100 টি আইটেম নিয়ে আসে brings আপনার যা প্রয়োজন তা যদি অন্তর্ভুক্ত করুন লং ভার্ভেয়েবল নাম আপনার কোড সমাপ্তি সমস্যাযুক্ত হয়ে ওঠে। হানিবিহীন, আপনি কেবল খুব <তালিকার স্পেস> টাইপ করতে পারেন এবং কেবলমাত্র 1 বা 2 টি বিকল্প রয়েছে।
জ্বলছে

3

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

আমি আপনার দর্শনে তিনটি "বাগ" দেখছি: 

1) আপনি যদি কোনও ভেরিয়েবল / প্যারামিটার / বৈশিষ্ট্য / কলামের প্রকারটি জানতে চান তবে আপনি নিজের মাউসটিকে ঘোরাতে পারেন বা এটিতে ক্লিক করতে পারেন এবং এটি প্রদর্শিত হবে, বেশিরভাগ আধুনিক আইডিইতে। আপনি কী কী সরঞ্জাম ব্যবহার করছেন তা আমি জানি না, তবে শেষবারের মতো আমাকে এমন পরিবেশে কাজ করতে বাধ্য করা হয়েছিল যা এই বৈশিষ্ট্যটি সরবরাহ করে না 20 তম শতাব্দীতে, ভাষাটি কোবল ছিল, উফ নেই এটি ফোর্টরান ছিল এবং আমার বস বুঝতে পারিনি কেন আমি চলে গেলাম। 

2 / প্রকারগুলি উন্নয়নের চক্রে পরিবর্তিত হতে পারে। একটি 32-বিট পূর্ণসংখ্যা কোনও সময়ে 64-বিট পূর্ণসংখ্যায় পরিণত হতে পারে, ভাল কারণে যা প্রকল্পের শুরুতে সনাক্ত করা যায়নি। সুতরাং, লংএক্সএক্সকে ইনটেক্সের নামকরণ করা বা ভুল নামকে চিহ্নিত করে এমন একটি নাম রেখে যাওয়া খারাপ কর্ম। 

৩) আপনি যা চাইছেন তা আসলে অতিরিক্ত কাজ। রিডানডেন্সি খুব ভাল ডিজাইনের প্যাটার্ন বা অভ্যাস নয়। এমনকি মানুষ খুব বেশি বাড়াবাড়ি করতে নারাজ। এমনকি মানুষ খুব বেশি বাড়াবাড়ি করতে নারাজ। 


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

3

আমি বিশ্বাস করি হানাহির খুব প্রয়োজন হওয়া একটি লক্ষণ
একটি উপসর্গ অনেকগুলি গ্লোবাল ভেরিয়েবল ... অথবা ফাংশন থাকার অত্যন্ত দীর্ঘ mantainable হতে

আপনার পরিবর্তনশীল সংজ্ঞাটি নজরে না থাকলে, সাধারণত, আপনি সমস্যা পেয়েছেন।
এবং যদি আপনার ফাংশনগুলি কিছু স্মরণীয় সম্মেলন অনুসরণ না করে তবে সেখানে আবারও বড় সমস্যা big

এটাই ... অনেক কর্মক্ষেত্রগুলি এটিকে নষ্ট করার কারণটি অনেক বেশি, আমার ধারণা।

এটা সম্ভূত ভাষায় যে প্রয়োজন এটা।
সময়ে উপর গ্লোবাল ভেরিয়েবল সমৃদ্ধি । (বিকল্প অভাবের জন্য)
এটি আমাদের ভালভাবে পরিবেশন করেছে।

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

( উদাঃ “ভেরিয়েবলের কি safeFoobarকোনও এসকিউএল কোয়েরিতে ইনজেকশন দেওয়ার জন্য সবুজ আলো থাকে?
- যেমনটি বলা হয় safe, হ্যাঁ")

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


2

আমি মনে করি হাঙ্গেরিয়ান স্বরলিপি ব্যবহার না করার কারণগুলি অন্যান্য পোস্টার দ্বারা ভালভাবে কভার করা হয়েছে। আমি তাদের মন্তব্যে একমত

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


আমার যখন আইডির টেবিল থাকে তখন আমি প্রায়শই এটি হতে পারি। আমার যদি TABLE SomeStringById(int somestringId, varchar somestring)এটিতে সূচক থাকে তবে এটি যুক্তিযুক্তভাবেই হয় SomeStringByIdতবে এটি সংঘর্ষের কারণ হয়। সুতরাং আমি এটি কল idx_SomeStringById। তারপরে, মামলা অনুসরণ করতে, আমি idx_SomeStringByValueকেবল এটি করব কারণ এটি idx_একের কাছে রাখা অন্যের কাছে নয় sil
কর্সিকা

1

এটি এড়ানোর কারণ হ'ল ডিগ্রি হ্যান্টির কারণে যা ডিআরওয়াই লঙ্ঘন করে (উপসর্গটি হ'ল সংকলক এবং (একটি ভাল) আইডিই পেতে পারে)

অ্যাপ্লিকেশনস হ্যারিয়ান ওটিওএইচ প্রিফিক্সের সাথে ভেরিয়েবলের ব্যবহার রয়েছে (অর্থাত্ স্ক্রেক্সমাউস স্ক্রিনে কুঠার সমন্বিত এটি একটি অন্তর্, সংক্ষিপ্ত, দীর্ঘ বা এমনকি একটি কাস্টম প্রকার হতে পারে (টাইপডেফস আপনাকে সহজেই এটি পরিবর্তন করার অনুমতি দেবে))

সিস্টেমের ভুল বোঝাবুঝি হাদীসকে একটি সেরা অনুশীলন হিসাবে ধ্বংস করেছে


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

2
@ হাইলেম: আমি নিবন্ধগুলি এবং সিমোনির মূল কাগজটি দেখেছি এবং কোডটি পড়েছি। যতবার আপনি এটি দেখুন, এটি একটি খারাপ ধারণা যা কখনই দিনের আলো দেখেনি।
জেরি কফিন

1
অগত্যা এটি গতিশীল ভাষায় DRY লঙ্ঘন করে না; এটা শুধু ইউনিডাইমেটিক DRY অগত্যা সবসময় ভাল হয় না; যেমন: সি ম্যাক্রোস।
লংপোক

3
আইএমও "নষ্ট" হাঙ্গেরিয়ান হ'ল এই যে , বর্ণনামূলক নাম ব্যবহারের তুলনায় "অভিপ্রায় "টিও কার্যকর নয় , যদিও হাঙ্গেরিয়ান তৈরি হওয়ার সময় পাঠযোগ্য কোড থাকার জন্য কোনও আন্দোলন ছিল না তা ন্যায্য হলেও ...
ওয়েন মোলিনা

1
@ ওয়াইন এম: "বর্ণনামূলক নামগুলি" বলা সহজ যখন সংকলকগণ আপনাকে একটি চলক নামের জন্য নিবন্ধ ব্যবহার করার অনুমতি দেয়। শনাক্তকারী নামের দৈর্ঘ্য আসলে একটি কম, মোটামুটি অবাধ মান সীমাবদ্ধ ছিল যখন (আমার ধারণা একটি সাধারণ সীমা না আট বা দশ অক্ষর ছিল যে অত্যন্ত অনেক আগে আমি প্রত্যাহার যে Borland টার্বো সি 2 এমনকি একটি ছিল বলে মনে হচ্ছে না কনফিগারেশন অপশন জন্য সনাক্তকারী নামের সর্বাধিক দৈর্ঘ্য!), একটি নামেরে দরকারী তথ্যকে এনকোডিং করা ছিল কেবল একটি ছোট্ট বিট ট্র্যাকিয়ার ...
একটি সিভিএন

1

ধরা যাক আমাদের মতো একটি পদ্ধতি রয়েছে (সি # তে):

int GetCustomerCount()
{
    // some code
}

এখন কোডে আমরা এটিকে কল করি:

var intStuff = GetCustomerCount();
// lots of code that culminates in adding a customer
intStuff++;

Int- এ আমাদের খুব বলতে নেই। নিছক সত্য যে কোনও কিছু অন্তর্নিহিত তা আমাদের কী তা বলে না। এখন ধরা যাক, পরিবর্তে, আমরা এটিকে এটি বলি:

var customerCount = GetCustomerCount();
// lots of code that culminates in adding a customer
customerCount++;

ভেরিয়েবলের উদ্দেশ্য কী তা আমরা এখন দেখতে পারি। আমরা যদি এটি জানতে পারি তবে কী ব্যাপার হবে?

যদিও হাঙ্গেরিয়ান এর আসল উদ্দেশ্যটি ছিল আপনি এই জাতীয় কিছু করতে চাই:

var cCustomers = GetCustomerCount();
// lots of code that culminates in adding a customer
cCustomers++;

এটি ঠিক আছে যতক্ষণ আপনি জানেন যে সি কী বোঝায়। তবে আপনার কাছে প্রিফিক্সগুলির একটি মানক টেবিল থাকতে হবে এবং প্রত্যেককে সেগুলি জানতে হবে এবং আপনার কোড বোঝার জন্য কোনও নতুন লোককে সেগুলি শিখতে হবে। যেখানে customerCountবা countOfCustomersপ্রথম নজরে বেশ সুস্পষ্ট।

হাঙ্গেরিয়ানদের Option Strict Onঅস্তিত্বের আগে ভিবিতে কিছু উদ্দেশ্য ছিল, কারণ ভিবি 6 এবং এর আগে (এবং ভিবি। নেট দিয়ে Option Strict Off) ভিবি প্রকারকে বাধ্য করবে, তাই আপনি এটি করতে পারেন:

Dim someText As String = "5"
customerCount = customerCount + someText

এটি খারাপ, কিন্তু সংকলক আপনাকে এটি বলবে না। সুতরাং আপনি যদি হাঙ্গেরিয়ান ব্যবহার করেন তবে কমপক্ষে আপনার যা ঘটছে তার কোনও সূচক থাকতে হবে:

Dim strSomeText As String = "5"
intCustomerCount = intCustomerCount + strSomeText  // that doesn't look right!

। নেট, স্থির টাইপিং সহ, এটি প্রয়োজনীয় নয়। এবং ভাল নামকরণের বিকল্প হিসাবে হাঙ্গেরিয়ানও প্রায়শই ব্যবহৃত হত। হাঙ্গেরিয়ান ভুলে যান এবং পরিবর্তে ভাল নাম চয়ন করুন।


1

আমি বিরুদ্ধে অনেক ভাল যুক্তি খুঁজে পেয়েছি, কিন্তু একটি আমি দেখতে পেল না: ergonomics।

পূর্ববর্তী সময়ে, যখন আপনার সমস্ত কিছু স্ট্রিং, ইনট, বুল এবং ফ্লোট ছিল তখন সিবফ চরিত্রগুলি যথেষ্ট ছিল। তবে স্ট্রিং + সংক্ষেপে সমস্যাগুলি শুরু হয়। উপসর্গটির পুরো নাম, বা স্ট্রিংয়ের জন্য str_name ব্যবহার করবেন? (যদিও প্রায় সবসময় নামগুলি স্ট্রিং থাকে - তাই না?) স্ট্রিট ক্লাসের কী আছে? নামগুলি দীর্ঘ এবং দীর্ঘতর হয় এবং আপনি ক্যামেলকেস ব্যবহার করলেও, টাইপ-উপসর্গটি কোথায় শেষ হয় এবং ভেরিয়েবল-নামটি কোথায় শুরু হয় তা বলা শক্ত।

 BorderLayout boderLayoutInnerPanel = new BorderLayout ();
 panelInner.addLayout (borderLayoutInnerPanel);

ঠিক আছে - আপনি আন্ডারলাইনগুলি ব্যবহার করতে পারেন, যদি আপনি এগুলি ইতিমধ্যে অন্য কোনও কিছুর জন্য ব্যবহার না করেন বা ক্যামেলকেস ব্যবহার করেন যদি আপনি এতক্ষণ আন্ডারলাইন ব্যবহার করেন:

 BorderLayout boderLayout_innerPanel = new BorderLayout ();
 panel_inner.addLayout (borderLayout_innerPanel);

 Border_layout boder_layoutInner_panel = new Border_layout ();
 panelInner.add_layout (border_layoutInner_panel);

এটি রাক্ষসী এবং যদি আপনি ফলস্বরূপ এটি করেন, আপনার কাছে থাকবে

 for (int iI = 0; iI < iMax-1; ++iI)
     for (int iJ = iI; iJ < iMax; ++iMax) 
          int iCount += foo (iI, iJ); 

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

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


1

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

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

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

"শুধু একটি IDE তে কার্সার রেখে" হয় না শুধুমাত্র একটি কারণ - একটি কারণ হাঙ্গেরীয় ব্যবহার না করার কিছু মানুষ এটা দরকারী নয় হতে পারে। আপনার মাইলেজ পৃথক হতে পারে।

ভেরিয়েবলের ধরণের পরিবর্তন যখন নির্বোধ হয় তখন হাঙ্গেরিয়ান একটি গুরুত্বপূর্ণ রক্ষণাবেক্ষণের বোঝা চাপিয়ে দেয় - আপনি কতক্ষণ পরিবর্তনশীল প্রকার পরিবর্তন করেন? তদতিরিক্ত, ভেরিয়েবলের নামকরণ করা সহজ:

সমস্ত উপস্থিতিগুলির নাম পরিবর্তন করতে কেবল আইডিই ব্যবহার করুন। -গান্ডার, গোজে জবাব দিচ্ছে

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

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