আন্ডারস্কোর ধাঁধা সহ কমপিউটারের সদস্যদের শুরু হতে পারে?


12

হাই স্কুল থেকেই আমাকে শিখানো হয়েছে যা ভেরিয়েবলের সংজ্ঞা দেয়:

int _a;

অথবা

int __a;

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

আমি যতদূর জানি এই কারণেই কিছু লোক নামের শেষে আন্ডারস্কোরটি সরানো পছন্দ করে:

int a_;

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

তাই আমি ভাবছি: আজকাল কি এটি একটি নন-ইস্যু? আধুনিক সংকলকরা নামকরণের কনভেনশন সম্পর্কে কি স্মার্ট?


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

6
আপনি এই প্রশ্নের উত্তর দরকারী খুঁজে পেতে পারেন ।
ব্লারফ্লার

1
@ কেচালাক্স যদি আপনি মনে করেন যে মাইক্রোসফ্টের সি ++ সংকলক টিমটি ২০ বছরেরও বেশি সময় ধরে অস্তিত্ব নিয়েছে, তবে সি # টিমের কিছু লোকের অভ্যাসের ভিত্তিতে গ্রহণযোগ্য শনাক্তকরণকারী নামগুলির নিয়মগুলি প্রতিষ্ঠিত হয়েছে, আপনি কীভাবে মাইক্রোসফ্ট কাজ করেন তা জানেন না :-)। সিরিয়াসলি, 21 বছর হয়ে গেছে যে তারা তাদের প্রথম সি ++ সংকলক প্রকাশ করেছে এবং এই বিধিগুলি এখনও পর্যন্ত ফিরে গেছে, বা আরও মূল সি সংকলক কোডবেজে চলে গেছে।
কেট গ্রেগরি

@ কেট আমি কেবল ইঙ্গিত করছিলাম যে তারা জানত যে তারা সি # তে এটি ব্যবহার করেছিল for আমি মাইক্রোসফ্টের সি ++ সংকলক ব্যবহার করি না, বা সেখানকার পরিবেশ সম্পর্কে মারাত্মকভাবে জানি না, তাই আমি সি + এর সাথে আমার অভিজ্ঞতা থেকে সি ++ এ তাদের নামকরণ শৈলীর ব্যবহার অনুমান করছি। সি # বিধিটি প্রথম এসেছিল এমন কোনও দাবি কখনও করেনি ।
কেচালোক্স

উত্তর:


17

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

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

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

সন্দেহের কারণেই এই উপসর্গটি ব্যবহার করবেন না।


3
আপনার মন্তব্যগুলি দুটি আন্ডারস্কোরের উপসর্গের সাথে প্রযোজ্য তবে একটি একক আন্ডারস্কোরের জন্য নয়
কেট গ্রেগরি

1
@ কেটগ্রিগরি: শীর্ষস্থানীয় আন্ডারস্কোর সহ নামগুলি বিশ্বব্যাপী নেমস্পেসে নামের জন্য প্রয়োগের জন্য ব্যবহারের জন্য সংরক্ষিত। দ্বিতীয় আন্ডারস্কোর বা মূলধনীর পরে একটি শীর্ষস্থানীয় আন্ডারস্কোর কোনও ব্যবহারের জন্য সংরক্ষিত থাকে (এগুলি প্রয়োগের মাধ্যমে ম্যাক্রোর জন্য ব্যবহার করা যেতে পারে)। সুতরাং, লোয়ার-কেস লেটারের পরে একটি শীর্ষস্থানীয় আন্ডারস্কোর স্থানীয় স্কোপগুলিতে ঠিক থাকতে পারে তবে ট্রিপিং এবং কোনও সংরক্ষিত নাম ব্যবহার করা এড়ানো ভাল best
বার্ট ভ্যান ইনজেন শেহেনো

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

2
@ বার্টওয়ানআইংজেনচেনা: কেবল স্বার্থের জন্য: "কেবলমাত্র এবং কেবলমাত্র বেসরকারী শ্রেণীর সদস্যদের জন্য শীর্ষস্থানীয় আন্ডারস্কোর ব্যবহার করা" এর মতো একটি সরল নীতি প্রযুক্তিগত সমস্যার কারণ হতে পারে না, আপনি কী মনে করেন, এটি কি সত্য?
ডক ব্রাউন

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

16

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

আন্ডারস্কোরগুলির জন্য কিছু লোকের ঘৃণা থাকে। আপনি কিছু কল করুন m_indexবা highest_priceবা _a- তারা এটি ঘৃণা করে। আমি 25 বছর আগে এমন একজনের সাথে কাজ করেছি যিনি আমাকে নির্দিষ্ট আইবিএম প্রিন্টার (খুব জনপ্রিয় একটি) সম্পর্কে বলেছিলেন যা প্রতিটি অন্যান্য লাইনের নীচে পিক্সেল বাদ দিয়ে পৃষ্ঠায় আরও লাইন মাপসই করে। এটি মেমোগুলির জন্য, বা বড় সংখ্যার বৃহত্তর সংখ্যার আউটপুট দেওয়ার জন্য ঠিক ছিল, তবে আপনার অর্ধেক আন্ডারস্কোরগুলিকে অদৃশ্য করার কোডের জন্য এটির প্রভাব ছিল। (হ্যাঁ, সত্যিই!) সেই প্রজন্মের লোকেরা সাধারণত অযৌক্তিক আন্ডারস্কোর ঘৃণা করেন, হয় সেই মুদ্রকের সাথে মিথস্ক্রিয়া থেকে বা এমন কোনও ব্যক্তির সাথে কাজ করে যা তাদের মধ্যে মারধর করে যে আন্ডারস্কোরগুলি ব্যবহার করা উচিত নয়।

অধিকাংশ মানুষ মিশ্র হাতের (একটি বিকল্প আমরা আছে কি না, বলে, ফোরট্রান) একটি আরো ভালো পঠনযোগ্য পদ্ধতির ব্যবহার খুঁজে পেয়েছেন: mIndex, HighestPrice, aতার আগে গুরুত্ব আরোপ উদাহরণ থেকে চমত্কার দাঁড়ানো। আমি আপনাকে দুটি নিয়ম দেব:

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

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


"আপনি যাকে কিছু বলছেন এম_আইডেক্স বা সর্বোচ্চ_প্রাইস বা _এ - তারা এটিকে ঘৃণা করেন" কারণ ছাড়াই নয়! আপনি শনাক্তকারীদের ক্ষেত্রে শীর্ষস্থানীয় আন্ডারস্কোর ব্যবহারের জন্য বিশেষভাবে মানগুলির মধ্যে নিয়ম রয়েছে সে সম্পর্কে কোনও উল্লেখ করেননি। এত সহজে এড়ানো গেলে কেন ঝামেলা জিজ্ঞাসা করবেন? stackoverflow.com/a/228797
সর্বাধিক ব্যারাক্লফ

কোন উল্লেখ নেই? প্রথম বাক্যটি আবার পড়ুন।
কেট গ্রেগরি

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

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

আমরা যেখানে একমত না। হ্যাঁ, কখনও কখনও কোনও একক আন্ডারস্কোর দিয়ে কোনও সনাক্তকারী শুরু করা আইনী legal আমি যেমন উপরে রেখেছি, কেন আগুন নিয়ে খেলি? আমি কোনও আন্ডারস্কোর দিয়ে কোনও সনাক্তকারী শুরু করি না; আমি এটিকে কোড গন্ধ হিসাবে দেখি (যদি কেউ 'গন্ধকে' দেখুন 'বলা যায় :- পি)। এইভাবে, আমি কখনই নিয়মগুলির স্পেসিফিকেশনগুলি নিয়ে চিন্তা করি না যেগুলি যখন আইনটি আইনানুগভাবে করা আইনানুগভাবে আমাকে বলে দেয়।
সর্বোচ্চ ব্যারাক্লফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.