আমি কেন "হাঙ্গেরিয়ান নোটেশন" ব্যবহার করব না?


122

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

আরও দেখুন: মানুষ কি বাস্তব বিশ্বে হাঙ্গেরীয় নামকরণের কনভেনশন ব্যবহার করে?


উত্তর:


174

বেশিরভাগ লোক হাঙ্গেরিয়ান স্বরলিপিটি ভুল উপায়ে ব্যবহার করে এবং ভুল ফলাফল পাচ্ছে।

জোয়েল স্পলস্কির এই দুর্দান্ত নিবন্ধটি পড়ুন: ভুল কোড তৈরি করা ভুল

সংক্ষেপে, হাঙ্গেরিয়ান নোটেশন যেখানে আপনি আপনার পরিবর্তনশীল নামগুলি তাদের type(স্ট্রিং) (সিস্টেম হাঙ্গেরিয়ান) দিয়ে উপস্থাপন করেন তা খারাপ কারণ এটি অকেজো।

হাঙ্গেরিয়ান নোটেশন যেমন এটির লেখক দ্বারা এটির উদ্দেশ্য ছিল যেখানে আপনি এর পরিবর্তিত নামটির সাথে পূর্ববর্তী হন kind(জোয়েলের উদাহরণ ব্যবহার করে: নিরাপদ স্ট্রিং বা অনিরাপদ স্ট্রিং), তথাকথিত অ্যাপস হাঙ্গেরিয়ান এর ব্যবহার রয়েছে এবং এটি এখনও মূল্যবান।


5
ভাল লিঙ্ক, লিঙ্কটির পিছনে কী রয়েছে তার একটি ভাল সংক্ষিপ্তসার এবং কোন ধর্মান্ধতা। চমৎকার।
ডাস্টম্যান

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

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

9
আমি এখনও যদি একটি পুরানো আইডিই দিয়ে সরাসরি সি বিকাশ করি তবে হাঙ্গেরিয়ান স্বরলিপি ব্যবহার করা পছন্দ করি ... আমি জানি যে কাস্টিংয়ের কোনও প্রকার সমস্যা নেই।
বীপ বীপ

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

277

ভিউজ অ্যাজহ্যাংরিয়ান নোটেশন ভিমাক্স ন্যাটারিং এনকোড অ্যাডিডিফিলফুল্ট।


101
দুর্দান্ত উপমা যদিও কিছুটা অন্যায়। তুলনা করুন: vUsing অ্যাডহুংরিয়ান এন নোটেশন ভিমেকস n রিডিং এনকোড অ্যাডডিজিট
ক্রিস নো

27
এই বাক্যে, ব্যবহার এবং পঠন উভয়ই গুরুরেন্ড। তবে আপনি যে পয়েন্টটি তৈরি করেছিলেন তা আমি পেয়েছি ...
চিম্প

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

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

3
@ জন: যদি আপনার কোনও পরিবর্তনশীল নাম থাকে যা এটি প্রতিনিধিত্ব করে যা সম্পূর্ণরূপে দেয় না, তবে একেবারে সমস্ত উপায়ে ফোকাসটির উচিত এটি আরও বর্ণনামূলক কিছুতে নামকরণ করা (এবং হাঙ্গেরিয়ান স্বরলিপিটি খুব একটা উন্নতি নয় সর্বোত্তম ক্ষেত্রে এটি লক্ষণটি ঠিক করছে - সমস্যা সমাধান করছে না) solving
hlovdal

104

জোয়েল ভুল, এবং এখানে কেন।

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

"প্রকার" হিসাবে যোয়েল যে বিষয়গুলি নিয়ে আলোচনা করেন সেগুলির অনেকগুলি ধরণের নয়; এগুলি প্রকৃতপক্ষে প্রকারের।

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

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

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


30
ভেরিয়েবলের অভিপ্রায়টি ভেরিয়েবলের প্রকারের মধ্যে এনকোড করা উচিত, একটি ফ্রিজিং নামকরণ প্রকল্প হিসাবে এত ভঙ্গুর হিসাবে না রেখে।
ড্রিপজা

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

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

6
@DrPizza: আমি বিশ্বাস করি আপনি খুব গুরুত্বপূর্ণ পয়েন্ট যে জোএল অ্যাপস হাঙ্গেরীয় সমর্থনে যখন করছে এক মিস করেছেন: এই স্বরলিপি শুধু একটি খুব বাস্তবমুখী হয় ট্রেড বন্ধ । "ভুল কোড" দেখার জন্য সংকলককে সক্ষম করে তোলা একটি দুর্দান্ত লক্ষ্য, তবে এটি কি সর্বদা এর জন্য মূল্য দেয়?
ইয়ারিক

4
@DrPizza: Joel is wrongএবং What most languages lack, however, is a type system that's expressive enough to enforce these kind of distinctions.তাই, যেহেতু বেশির ভাগ ভাষায় না প্রভেদ এই ধরনের জোরদার করা expressiveness যথেষ্ট অভাব, জোয়েল হয় ঠিক আছে। রাইট?
সাম্পাথিস্রিস

46

আমি মনে করি এটি উত্স কোডটি ব্যাপকভাবে ছড়িয়ে পড়ে।

দৃ strongly়ভাবে টাইপিত ভাষায় এটি আপনার পক্ষে তেমন লাভ করে না। আপনি যদি যেকোন প্রকারের অমিল টমফুলারি করেন তবে সংকলক আপনাকে এটি সম্পর্কে বলবে।


কি দারুন. 15 মিনিটের মধ্যে 90 প্রতিনিধি। ভাল কল.
ডাস্টম্যান

2
আপনি যদি এটি টাইপের জন্য ব্যবহার করেন তবে হ্যাঁ, এটি অকেজো। অন্যান্য তথ্য সরবরাহ করা এটি দরকারী।
লু ফ্রাঙ্কো

12
@ লু, ঠিক - ব্যক্তিগতভাবে, আমি আমার পরিবর্তনশীল নামগুলিতে একটি সংশোধন ইতিহাস সংরক্ষণ করি: স্ট্রিং ফার্স্ট নেম_ওয়াসনাম_ওয়াসানামিআইডি_ওয়াস্বসুইটকুপিনকেকস
শোগ 9

@ স্যান্ডার্ডস: যখন উভয় ভেরিয়েবল প্রকার পূর্ণসংখ্যার হয় তখন আপনি একই ইউনিট পরিমাপ করেছিলেন কিনা তা পরীক্ষা করতে সংকলকটি ব্যবহার করে দেখুন।
ইগর লেভিকি

1
@ শোগ 9: আমি মনে করি আপনি অ্যাপস হাঙ্গেরিয়ান নোটেশনটি বুঝতে পারেন নি। এটি sFrstName বনাম আনফারস্টনাম (নিরাপদ বনাম অনিরাপদ, অচিরাচরিত) সম্পর্কে আরও বেশি, আপনি এ সম্পর্কে আরও কিছু জানেন know তবুও আমি স্থির ভাষায় মনে করি স্ট্রিংকে অসুরক্ষিত স্ট্রিং এবং সেফস্ট্রিং তৈরির পক্ষে সাব টাইপ করা ভাল এবং কেবল সেফস্ট্রিংকে আউটপুট দেওয়ার অনুমতি দেওয়া ভাল allow কনভেনশন ঠিক আছে, তবে (আরও প্রায়শই) সংকলন প্রয়োগ আরও ভাল।
কেগাডেক

28

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

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

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

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

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

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

জোয়েস নিবন্ধটির সাধারণ বিষয় - ভুল কোডটি ভুল দেখানো - এটি একটি খুব ভাল নীতি। তবে ত্রুটিগুলির বিরুদ্ধে আরও ভাল সুরক্ষা হ'ল - যখন সম্ভব হয় তখন - সংকলক দ্বারা স্বয়ংক্রিয়ভাবে সনাক্ত করার জন্য ভুল কোড থাকতে পারে।


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

27

আমি সবসময় আমার সমস্ত প্রকল্পের জন্য হাঙ্গেরীয় স্বরলিপি ব্যবহার করি। আমি 100 টি বিভিন্ন শনাক্তকারী নামের সাথে লেনদেন করার সময় এটি সত্যিই সহায়ক বলে মনে করি।

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

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

স্থানীয় ভেরিয়েবলগুলি class শ্রেণীর বিদ্যমান সদস্য ভেরিয়েবলের নামকরণের কারণে বিশাল 75000 লাইন কোডবেজে, বাগগুলি (আমার এবং অন্যরা দ্বারাও) ঘটেছিল এমন সময়টি আমি মনে করতে পারি না। সেই থেকে আমি সবসময় 'এম_' দিয়ে সদস্যদের উপসর্গ করি

এটি স্বাদ এবং অভিজ্ঞতা একটি প্রশ্ন। আপনি চেষ্টা না করা পর্যন্ত এটি ঠক্কর দেবেন না।


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

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

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

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

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

22

আপনি এই তথ্যটি অন্তর্ভুক্ত করার এক নম্বর কারণটি ভুলে যাচ্ছেন। প্রোগ্রামার এর সাথে আপনার কিছু করার নেই। আপনি যে সংস্থাটি পড়তে হবে সেই সংস্থাটি ছাড়ার 2 বা 3 বছর পরে রাস্তায় নামা ব্যক্তিটির সাথে এর সম্পর্কযুক্ত।

হ্যাঁ, একটি আইডিই দ্রুত আপনার জন্য প্রকারগুলি সনাক্ত করবে। তবে, আপনি যখন 'বিজনেস রুলস' কোডের কয়েকটি দীর্ঘ ব্যাচগুলি পড়ছেন তখন প্রতিটি ভেরিয়েবলটি কী ধরণের তা খুঁজে বের করার জন্য বিরতি না দেওয়া ভাল to আমি যখন strUserID, intProduct বা guiProductID মতো বিষয়গুলি আপনি দেখতে, এটা করে তোলে অনেক সহজ 'আপ ঢালু' সময়।

আমি সম্মত হই যে এমএস তাদের নামকরণের কয়েকটি সম্মেলন করে অনেক দূরে গিয়েছিল - আমি এটিকে "খুব ভাল জিনিস" গাদাতে শ্রেণিবদ্ধ করি।

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


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

6
এটি ধারাবাহিকতার জন্য। হ্যাঁ, "নাম" সহজাতভাবে একটি স্ট্রিং বোঝায়। তবে আপনি "ইউজারিড" কী বলে মনে করবেন? একটি গাইড? স্ট্রিং? পূর্ণসংখ্যা? এমনকি "অ্যাক্টনো" এর মতো কিছুতেও 42 বা "23X" এর মান থাকতে পারে। ডকুমেন্টেশন বেশিরভাগ কোডে যথেষ্ট কম। এই মানটি রক্ষণাবেক্ষণ প্রোগ্রামারকে কিছুটা সাহায্য করে।
ডেভিড

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

10

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

এমন পরিস্থিতিও রয়েছে যেখানে রক্ষণাবেক্ষণের সময় একটি পরিবর্তনশীল ধরণের পরিবর্তন হওয়া দরকার। উদাহরণ: "uint_16 u16foo" হিসাবে ঘোষিত কোনও চলক যদি 64৪-বিট স্বাক্ষরবিহীন হয়ে ওঠার প্রয়োজন হয়, তবে দুটি জিনিসের মধ্যে একটি ঘটবে:

  1. আপনি প্রতিটি ভেরিয়েবলের নামটি পরিবর্তন করে (একই নামের সাথে কোনও সম্পর্কযুক্ত ভেরিয়েবল না চাপানোর বিষয়টি নিশ্চিত করে) পরিবর্তন করতে পারবেন, বা
  2. কেবল প্রকারটি পরিবর্তন করুন এবং নাম পরিবর্তন করবেন না, যা কেবল বিভ্রান্তি সৃষ্টি করবে।

9

জোল স্পলস্কি এ সম্পর্কে একটি ভাল ব্লগ পোস্ট লিখেছেন। http://www.joelonsoftware.com/articles/Wrong.html মূলত এটি আপনার কোডটি পড়া শক্ত করে না নেওয়ার বিষয়টি নেমে আসে যখন যখন কোনও শালীন আইডিই আপনাকে ভেরিয়েবলটি টাইপ করতে চান তা যদি আপনি মনে করতে না পারেন তবে তা পড়তে হবে। এছাড়াও, আপনি যদি আপনার কোডটি যথেষ্ট পরিমাণে বিভাগীয় করেন তবে আপনাকে তিনটি পৃষ্ঠার হিসাবে কী ভেরিয়েবল ঘোষিত হয়েছিল তা মনে রাখতে হবে না।


9

আজকাল টাইপ করার চেয়ে স্কোপ কি বেশি গুরুত্বপূর্ণ নয়

* l for local
* a for argument
* m for member
* g for global
* etc

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


তারপরে আবার কোডটি সম্ভবত এত বেশি স্কোপের উপর নির্ভর করে না। :-)
প্লুমেনেটর

8

আপনার হাঙ্গেরিয়ান স্বরলিপিটি সঠিকভাবে ব্যবহার না করার কোনও কারণ নেই । এটা তোলে এর জনপ্রিয়তা বিরুদ্ধে দীর্ঘক্ষন ধরে চলা ব্যাক উত্তেজনা কারণে ভুল ব্যবহার হাঙ্গেরীয় স্বরলিপি এর, উইন্ডোস API গুলি বিশেষ করে।

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

ফলাফল, এইগুলির মতো প্যারামিটারের নাম সহ একটি এপিআই:

LRESULT CALLBACK WindowProc(HWND hwnd,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam);

মনে রাখবেন যে ডাব্লুপ্রাম এবং এলপ্রাম নামগুলি যদিও ভয়াবহ, তবুও এগুলি পরম 1 এবং পরম 2 নামকরণের চেয়ে খারাপ কিছু নয়।

বিষয়টিকে আরও খারাপ করার জন্য, উইন্ডো 3.0.০ / ৩.১ এ দুটি ধরণের পয়েন্টার ছিল কাছাকাছি এবং দূরে। সুতরাং, উদাহরণস্বরূপ, মেমোরি ম্যানেজমেন্ট ফাংশন লোকাললক থেকে রিটার্ন মানটি একটি পিভিওআইডি ছিল, তবে গ্লোবাললক থেকে প্রাপ্ত রিটার্ন মানটি একটি এলপিভিওআইডি ছিল (দীর্ঘকাল ধরে 'এল' দিয়ে)। যে ভয়াবহ স্বরলিপি তারপর বাড়ানো পেয়েছিলাম যাতে Ong পি স্ট্রিং ointer পূর্বে সমাধান করা হয়েছে এলপি , একটি স্ট্রিং, যাতে malloc'd কেবল হত থেকে আলাদা করতে।

এই ধরণের জিনিস বিরুদ্ধে একটি প্রতিক্রিয়া ছিল যে অবাক করা।


6

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

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

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

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


6

পাইথন প্রোগ্রামার হিসাবে, হাঙ্গেরিয়ান নোটেশনটি খুব দ্রুত ছড়িয়ে পড়ে। পাইথন, আমি যদি কিছু পরোয়া করি না হয় একটি স্ট্রিং - আমি পরোয়া যদি এটা করতে মত আচরণ একটি স্ট্রিং (অর্থাত এটি একটি হয়েছে থাকে ___str___()পদ্ধতি যা একটি স্ট্রিং ফেরৎ)।

উদাহরণস্বরূপ, ধরা যাক আমরা একটি পূর্ণসংখ্যা হিসাবে foo আছে, 12

foo = 12

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

print "The current value of foo is %s" % foo

%s- স্ট্রিংটি নোট করুন । ফু একটি স্ট্রিং নয়, তবে %অপারেটর কল করবে foo.___str___()এবং ফলাফলটি ব্যবহার করবে (ধরে নিলে এটি বিদ্যমান)। fooএখনও একটি পূর্ণসংখ্যা, তবে আমরা যদি স্ট্রিং চান তবে আমরা এটি একটি স্ট্রিং হিসাবে বিবেচনা করি। আমরা যদি একটি ভাসা চাই, তবে আমরা এটি একটি ভাসা হিসাবে বিবেচনা করব। পাইথনের মতো গতিশীল টাইপ করা ভাষাগুলিতে হাঙ্গেরিয়ান নোটেশন অর্থহীন, কারণ আপনি এটি ব্যবহার না করা পর্যন্ত কোন ধরণের কী তা গুরুত্বপূর্ণ নয়, এবং যদি আপনার কোনও নির্দিষ্ট প্রকারের প্রয়োজন হয়, তবে float(foo)আপনি যখন এটিকে টাইপ করবেন (যেমন ) তখন নিশ্চিত হন এটা ব্যবহার করো.

নোট করুন যে পিএইচপি-র মতো গতিশীল ভাষাগুলির এই সুবিধা নেই - পিএইচপি প্রায়শই মুখস্ত করে না এমন নিয়মের একটি অস্পষ্ট সেটের ভিত্তিতে ব্যাকগ্রাউন্ডে 'সঠিক জিনিস' করার চেষ্টা করে, যার ফলস্বরূপ প্রায়শই অপ্রত্যাশিতভাবে বিপর্যয় ঘটে mes এই ক্ষেত্রে, নামকরণের কোনও ধরণের পদ্ধতি যেমন $files_countবা এর পক্ষে কাজ $file_nameকরা যায়।

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


আকর্ষণীয় যে পাইথনে আপনার .rol () এর সাথে উদাহরণটি ভাষা গতিশীল হওয়ার ফল নয়। জাভা, অবশ্যই গতিশীল ভাষা নয়, একই কাজ করে।
ডাস্টম্যান

সি # একই জিনিসটি করে, ভাষার প্রতিটি শ্রেণি প্রয়োগ করে .ToString()যাতে এটি সমস্ত মুদ্রণ করা যায়
বৈদ্যুতিন কফি

5

আইডিইর সেই কার্যকর তথ্য সরবরাহ করা উচিত। আইডিই যখন খুব কম উন্নত হত তখন হাঙ্গেরিয়ান কিছুটা বাছাই করতে পারে (পুরোটা নয়, তবে কিছু সাজিয়ে তোলে)।


4
তারপরে আবার, আপনাকে আর কিছু বলার IDE এর উপর নির্ভর করা উচিত নয়। সর্বোপরি, কোড আইডিই এর বাইরে দেখা যেতে পারে ...
ট্রমাপনি

5

অ্যাপস হাঙ্গেরিয়ান আমার কাছে গ্রীক - ভাল উপায়ে

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

নিউটনের পৃথিবী ও মঙ্গল গ্রহের মহাকর্ষের আইন

frcGravityEarthMars = G * massEarth * massMars / norm(posEarth - posMars)

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

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

সর্বোপরি, মতলব দুর্বলভাবে টাইপ করা উচ্চ-স্তরের ভাষাগুলিতে বা ফোর্টরান or 77 বা অ্যাডাদের মতো পুরানো ভাষায় প্রচুর ইঞ্জিনিয়ারিং করা হয়।

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


4

এটি অবিশ্বাস্যভাবে অপ্রয়োজনীয় এবং অকেজো হ'ল বেশিরভাগ আধুনিক আইডিই, যেখানে তারা টাইপটি সুস্পষ্ট করার পক্ষে একটি ভাল কাজ করে।

প্লাস - আমার কাছে - এটি কেবলমাত্র আইটিআই, স্ট্রুজারনেম ইত্যাদি দেখতে বিরক্তিকর :)


3
ট্রমাপনি যেমন পল বাতুমকে বলেছিল, প্রত্যেকে আইডিইতে কোডটি দেখে না।
ক্রিস চরবারুক

4

যদি আমি মনে করি যে দরকারী তথ্য সরবরাহ করা হচ্ছে, তবে কেন এটি সেখানে পাওয়া যায় না?

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


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

4

আমি আমার অভিজ্ঞতা, এটি খারাপ কারণ:

1 - তারপরে আপনার যদি কোনও ভেরিয়েবলের ধরণের পরিবর্তন করতে হয় তবে আপনি সমস্ত কোডটি ভেঙে ফেলেন (অর্থাত্ যদি আপনাকে কোনও 32 বিট পূর্ণসংখ্যার একটি 64 বিট পূর্ণসংখ্যার প্রসারিত করতে হয়);

2 - এটি অকার্যকর তথ্য কারণ প্রকারটি ইতিমধ্যে ঘোষণাপত্রের মধ্যে রয়েছে বা আপনি একটি গতিশীল ভাষা ব্যবহার করেন যেখানে প্রকৃত প্রকারটি প্রথমে এত গুরুত্বপূর্ণ হওয়া উচিত নয়।

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


4

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

মূলত, সিস্টেম হাঙ্গেরিয়ান মূল্যহীন। এটি আপনাকে কেবল একই বিষয়টি বলে যা আপনার সংকলক এবং / অথবা আইডিই আপনাকে জানাবে।

অ্যাপস হাঙ্গেরিয়ান আপনাকে ভেরিয়েবলটির অর্থ কী বলে বোঝায় এবং বাস্তবে কার্যকর হতে পারে।


4

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


1
আমি কখনই আইসোমিংটেবল পাইনি। যদি এটি কোনও ব্যবহারযোগ্য হয় তবে এটি ইন্টারফেসটিকে যেভাবেই বোঝায়। (অন্তত জাভাতে)
টুনারঞ্চ

4

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


4

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

এই কোড স্নিপেট নিন:

<asp:Label ID="lblFirstName" runat="server" Text="First Name" />
<asp:TextBox ID="txtFirstName" runat="server" />
<asp:RequiredFieldValidator ID="rfvFirstName" runat="server" ... />

যদি কেউ হাঙ্গেরিয়ান না করে নিয়ন্ত্রণ নামগুলির সেটটি রাখার আরও ভাল উপায় দেখাতে পারে তবে আমি তাতে চলে যাওয়ার প্রলুব্ধ হব।


4

জোয়েলের নিবন্ধটি দুর্দান্ত তবে এটি একটি প্রধান বিষয় বাদ দেবে বলে মনে হচ্ছে:

হাঙ্গেরিয়ান একটি নির্দিষ্ট 'ধারণা' (ধরণের + সনাক্তকারী নাম) কোডবেজ জুড়ে অনন্য বা অদ্বিতীয় - এমনকি একটি খুব বড় কোডবেস তৈরি করে।

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

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

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

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

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


4

হাঙ্গেরীয় নোটেশনের সুবিধাগুলি সমুন্নত করা হচ্ছে

  • এটি ভেরিয়েবলকে আলাদা করার একটি উপায় সরবরাহ করে।

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

  • এটি কোডটিকে আরও পঠনযোগ্য করে তোলে।

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

এটি পঠনযোগ্যতা হতে পারে না। আমি প্রত্যেকে সংযুক্ত হওয়ার চেয়ে যে কোনও হানিবিডি ভিবি 6 বাম হাত থেকে প্রাপ্ত এসটিপএন 1, এসটিম্প 2 ... এস টিম্প্প দেখতে পাচ্ছি।

  • এটি ত্রুটি প্রতিরোধ করে।

এটি 2 নম্বর গুণে হবে, যা মিথ্যা।


3

মাস্টারের কথায়:

http://www.joelonsoftware.com/articles/Wrong.html

যথারীতি একটি আকর্ষণীয় পঠন।

চায়ের:

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

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

জোল অন সফ্টওয়্যারটি পড়ার আগে আপনার কিছুটা সময় আছে তা নিশ্চিত করুন। :)


আমার এখন স্ট্যাকওভারফ্লো নেই। আমি মনে করি প্রকল্পটির সাথে স্প্লস্কির নিছক সহযোগিতা অবশ্যই এটি করছে। :)
ডাস্টম্যান

3

বিভিন্ন কারণে:

  • যে কোনও আধুনিক আইডিই ভেরিয়েবলের উপরে কেবল আপনার মাউসকে ঘুরিয়ে দিয়ে আপনাকে পরিবর্তনশীল প্রকারটি দেয়।
  • বেশিরভাগ প্রকারের নামগুলি উপস্থাপনের জন্য যুক্তিসঙ্গতভাবে ব্যবহার করার জন্য দীর্ঘতর ( HttpClientRequestProvider মনে করুন ) দীর্ঘ ।
  • প্রকারের তথ্যটি সঠিক তথ্য বহন করে না , এটি ভেরিয়েবলের উদ্দেশ্যটি রূপরেখার পরিবর্তে ভেরিয়েবলের ঘোষণাকে প্যারাফ্রেস করছে (মনে হয় myInteger বনাম পৃষ্ঠা আকার )।

2

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

জোয়েলের হানিবি ব্যবহার করার বিষয়ে একটি দুর্দান্ত নিবন্ধ ছিল তা জানাতে যে কোনও ভেরিয়েবল এইচটিএমএল এনকোডড ছিল কি না:

http://www.joelonsoftware.com/articles/Wrong.html

যাইহোক, আমি যখন আগে থেকেই জানতাম এমন তথ্য সরবরাহ করতে ব্যবহৃত হয় তখন আমি হাঙ্গেরিয়ানকে অপছন্দ করি।


আমি মনে করি যে প্রথম বাক্যটি এই পৃষ্ঠায় উত্তরগুলিকে বিশ্বাস করতে পারে।
ডাস্টম্যান

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

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

2

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

বিস্তারিত যুক্তি দেখানোর জন্য, আমি আপনাকে বিষয়টিতে তৈরি একটি ব্লগ পোস্টে উল্লেখ করছি।

http://codingthriller.blogspot.com/2007/11/rediscovering-hungarian-notation.html


2

হাঙ্গেরিয়ান স্বরলিপিটি আবিষ্কার হওয়ার সময় এবং প্রথমবারের মতো আমি কোনও প্রকল্পে এটি ব্যবহার করতে বাধ্য হয়েছি বলে প্রায় আমি কোডিং শুরু করেছিলাম it

কিছুক্ষণ পরে আমি বুঝতে পারি যে এটি সঠিকভাবে করা হয়ে গেলে এটি আসলে সহায়তা করেছিল এবং আজকাল আমি এটি পছন্দ করি I

তবে সব কিছু ভাল করার মতো, এটি শিখতে হবে এবং বুঝতে হবে এবং সঠিকভাবে এটি করতে সময় নিতে হবে।


1

বিশেষত মাইক্রোসফ্ট দ্বারা হাঙ্গেরীয় স্বরলিপিটি অপব্যবহার করা হয়েছিল, যা ভেরিয়েবল নামের চেয়ে দীর্ঘ উপসর্গের দিকে নিয়ে যায় এবং এটি বেশ কঠোর হয়, বিশেষত আপনি যখন উইন 16-তে বিভিন্ন ধরনের / আকারের কুখ্যাত ল্যাপারাম / ওপ্যারাম পরিবর্তন করেন )।

সুতরাং, উভয়ই এই অপব্যবহারের কারণে এবং এম its এর ব্যবহারের কারণে এটি অকেজো হিসাবে চিহ্নিত করা হয়েছিল।

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

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

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

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

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