সি ++ তে কি একটি সাধারণ মূলধন কনভেনশন আছে? [বন্ধ]


13

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

এখন আমি সি ++ তে একটি প্রকল্প শুরু করছি এবং আমি একই ধারণাটি প্রয়োগ করতে চাই। মূলধনের জন্য এমন কোন সাধারণ কনভেনশন আছে যা সম্পর্কে আমার জানা উচিত?


উটকেস এর সমস্যাটি হ'ল এটি প্রিপ্রোসেসরের সাথে খুব ভাল খেলে না। একটি বিশাল সমস্যা নয়, বিশেষত যেহেতু সাধারণত প্রিপ্রসেসরটি এড়ানো যায়।
পাব্বি

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

@ পাব্বি 8: কৌতূহলের বাইরে: কীভাবে উটকেস প্রিপ্রোসেসরের সাথে সংঘর্ষে লিপ্ত হয়?
জোছিম সউর

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

উত্তর:


27

মূলধনের জন্য এমন কোন সাধারণ কনভেনশন আছে যা সম্পর্কে আমার জানা উচিত?

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

তবে, আপনি যদি নামকরণের জন্য একটি কনভেনশন সন্ধান করছেন, আপনি সেইসাথে স্ট্যান্ডার্ড লাইব্রেরির নামকরণ কনভেনশনটিও দেখতে পাবেন , কারণ এটিই একক যা সমস্ত সি ++ বিকাশকারীদের জানতে হবে এবং ব্যবহার করতে হবে।

তবে, আপনি সবচেয়ে গুরুত্বপূর্ণ নিয়মটি যা ব্যবহার করুন তা হ'ল: ধারাবাহিক হোন!

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


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

5
@ ডেভিড: আইওস্ট্রিমস গ্রন্থাগারটি সম্ভবত 25 বছরের পুরানো এবং (সি লিব বা কোর্স বাদে) সি ++ স্টিড লাইবের সবচেয়ে পুরানো অংশ হতে পারে। আশা করি, তাদের সঠিক মনের কেউ আজকালকার মতো এটি ডিজাইন করবে না এবং আশা করি যে তাদের মনের সঠিক ধারণা নেই তারা এমনকি স্ট্রিমের লাইব্রেরিতে যেভাবে ব্যবহৃত হয় তা সনাক্তকারী বাছাই করে না। (ক্যামন, এর নামকরণ রয়েছে egptr, sputnএবং uflowপাশাপাশি রয়েছে underflowThat's এটি কেবল হাসিখুশি!) যাইহোক, হ্যাঁ, আজকের এই লিড আজকাল অল_ব্ল্যাসকেস_বিহীন_উইন্ডসর ব্যবহার করে।
এসবিআই

@ এসবিআই আমি জানতে পেরেছি যে আইস্ট্রিম লাইব্রেরি আর সি ++ এর জন্য কোনও স্ট্যান্ডার্ড লাইব্রেরি বিবেচনা করে না। এবং যেমনটি আপনি উল্লেখ করেছেন, এর শনাক্তকারীরা প্রোগ্রামিং কনভেনশন হিসাবে কার্যকর নয় ;-)
ইউলক্যাট

2
@ ইউলক্যাট: আইওস্ট্রিমস লাইব্রেরিটি (এটির জন্য C ++ 03 এর জন্য গৃহীত হিসাবে তাত্পর্যপূর্ণ) সর্বাধিক স্পষ্টভাবে সি ++ স্ট্যান্ডার্ড লাইব্রেরির অংশ হিসাবে বিবেচিত হয়।
এসবিআই

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

19

আসুন প্রথমে সম্মত হন যে সমস্ত আপপারসিএই চোখের মণি এবং হ্রাস করা উচিত।

সি এবং সি ++ তে এটি কেবল ম্যাক্রো এবং ম্যাক্রোদের জন্য একটি কনভেনশন হিসাবে ব্যবহৃত হয়, কারণ ম্যাক্রোগুলি সমান কুৎসিত, মন্দ বলা যায় না।

প্রারম্ভিক সি এর কনস্ট ছিল না, সুতরাং ধ্রুবকগুলিকে ম্যাক্রো হিসাবে প্রকাশ করতে হয়েছিল। এছাড়াও, সেই দিনগুলিতে প্রোগ্রামগুলি খুব সংক্ষিপ্ত ছিল, যাতে আজ যেসব অনুশীলন করা হয় তা ব্যবহার করা যেতে পারে (যেমন আইআইআরসি ব্রায়ান কার্নিঘান প্রচুর নন-বড় ম্যাক্রো সহ কোড লিখেছিলেন)। এবং এছাড়াও, সেই দিনগুলিতে যে কীবোর্ডগুলি ছোট হাতের অক্ষর ছিল না তা বিদ্যমান ছিল; আমি এরকম একটি ব্যবহার করেছি, নরওয়েজিয়ান ট্যান্ডবার্গ ইসি -10 কম্পিউটারে, 1980 বা 1979 সম্পর্কে আমি মনে করি এটি ছিল।

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

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

সুতরাং,

    int const answer = 42;    // Nice, good, OK.
    const int ANSWER = 0x2A;  // Ouch!
    #define COMPANYNAME_ANSWER 052  // Oh kill me, please.

ঠিক আছে আপনি ভেবে দেখেছেন যে আমি ঠাট্টার মধ্যে বড় হাতের-কীবোর্ডগুলি উল্লেখ করেছি। ওহ না. কারণ এটি কেবলমাত্র প্রাচীনতম, সর্বাধিক প্রত্নতাত্ত্বিক প্রযুক্তির সীমাবদ্ধতা যা নামকরণের সম্মেলনগুলিকে চালিত করেছে বা কমপক্ষে তারা কতটা ভুল / সঠিক বলে মনে হয়েছে তা প্রভাবিত করেছে। এর পরে, 7-বিট ক্রমিক সংক্রমণের সমস্যা ছিল, যার ফলে ব্যবহৃত অক্ষর কোডগুলি (নিউজপ্যাক চরিত্রের এনকোডিংগুলি) সম্পর্কিত সমস্যা তৈরি হয়েছিল যার অর্থ আপনাকে নিজেকে ইংরেজী বর্ণমালার A, Z এর মাধ্যমে সীমাবদ্ধ করতে হয়েছিল had

আসলে আমি এখনও এটি করার পরামর্শ দিচ্ছি। আমরা যেখানে আছি! আমরা আর পাইনি।

এই মুহুর্তে, ২০১১ সালের হিসাবে, স্ট্যান্ডার্ড সি ++ নামগুলিতে সাধারণ ইউনিকোডকে সমর্থন করে (এবং 1998 সালের পরে এটি করেছে), যখন আসল সি ++ বাস্তবায়ন হয় না। বিশেষত জি ++ সংকলকটি জাতীয় চরিত্রের চ্যালেঞ্জযুক্ত। এটি সেই অন্ধকার যুগের প্রযুক্তিগত সীমাবদ্ধতা থেকে শুরু করে।

সুতরাং,

    double blueberryJamViscosity  = 0.0;    // OK
    double blåbærsyltetøyViskositet = 0.0;  // Ouch!

অবশেষে, আন্ডারস্কোর বনাম ছেদ করা বড় হাতের অক্ষরের বিষয়ে,

  • টাইপ নামের জন্য একটি স্বীকৃত ফর্ম সংরক্ষণ করুন।
  • ম্যাক্রোগুলির জন্য সমস্ত UPPERCASE সংরক্ষণ করুন।
  • অটল থাক.

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

চিয়ার্স এবং এইচটিএইচ


সি ++ থেকে অনুলিপি ডিএন্ডই সিতে আলফ, আইআরটিআর স্ট্রাস্ট্রপ উল্লেখ করেছেconst , সুতরাং এটি অবশ্যই খুব আগে এবং জাভার অনেক আগে সম্ভবত সি 98 এর জন্য হয়েছিল।
এসবিআই

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

2

আমি সাধারণত ভাষার প্রচলিত কোডবেজে যে কনভেনশনটি দেখি সেটির সাথে আমি লেগে থাকি। সি ++ এর ক্ষেত্রে আমি সাধারণত উটকেস দেখতে পাই। রুবি বা পিএইচপি-র ক্ষেত্রে আমি সাধারণত স্টাফ-লাইক_এই দেখতে পাই।

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


1

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

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


1

আমি যা দেখেছি তা থেকে এটি প্রকল্পগুলির মধ্যে পরিবর্তিত হয়।

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

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


1

নামকরণের সম্মেলনের উল্লেখ হিসাবে আমি স্ট্যান্ডার্ড লাইব্রেরি এবং বুস্ট উভয়ই ব্যবহার করেছি। তবে এই সমাধানে সমস্যা রয়েছে there

আপনার কোডের সাথে সংঘর্ষ হ্রাস করার চেষ্টা করার জন্য স্ট্যান্ডার্ড লাইব্রেরি একটি নামকরণ কনভেনশন ব্যবহার করে। সমাধানের অংশটি হ'ল সমস্ত ছোট অক্ষরের অক্ষর ব্যবহার করা। সুতরাং উট কেস পরিবর্তে আন্ডারস্কোর ব্যবহার।

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

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

// instead of a manifest constant
#define HOURS 24

// use const
const int kHours = 24; 

// or enum
enum {
    kHours   = 24,
    kMinutes = 60
};

0

এই রেফারেন্সটি নামকরণের কনভেনশনটির বর্ণনা দেয় যা আমি অতীতে কমপক্ষে তিনটি প্রতিষ্ঠানের জন্য কাজ করেছি এমন সাফল্যের সাথে দেখেছি success

আগের উত্তর পক্ষান্তরে আমি চাই এড়ানো , আমার নিজের কোডে সি ++ স্ট্যান্ডার্ড লাইব্রেরির নামকরণ সম্মেলন নিম্নলিখিত স্ট্যান্ডার্ড লাইব্রেরির সাথে এড়ানোর নাম দুর্ঘটনায় চেয়ে অন্য কোন কারণে পারেন।

সম্পর্কিত বিষয়ে এই পূর্ববর্তী উত্তরটিও আগ্রহের বিষয় হতে পারে: /programming/


উম্ম, আপনি একই নাম ব্যবহার না করে একই নামকরণ কনভেনশন ব্যবহার করতে পারেন ... এবং আপনি যদি একই নামটি চান তবে আপনি এখনও নামের স্থানগুলি দ্বারা সুরক্ষিত রয়েছেন, যেমন std::stringবনাম gnawme::string
einpoklum
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.