সি এর বিভিন্ন লাইনে ফাংশনের ধরণ এবং পদ্ধতির নাম রাখার কারণ


16

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

void foo() {
}

এই হওয়া উচিত

void
foo() {
}

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


3
এটি জিএনইউ স্ট্যান্ডার্ডে রয়েছে (অগত্যা এটি ভাল জিনিস বলা উচিত নয়, ব্র্যাকিং শৈলীটি অদ্ভুত) gnu.org/prep/standards/standards.html#Formatting
Gauthier আপনি

উত্তর:


19

লোকেরা দ্বিতীয় স্টাইলটি ব্যবহার করে কেন ব্যক্তিগত পছন্দ ব্যতীত অন্য কোনও কারণ রয়েছে তা ভাবছিলেন?

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

আর একটি কারণ হ'ল ফাংশন নাম সর্বদা প্রথম কলামে শুরু হয়। রিটার্নের ধরণ দৈর্ঘ্যে পরিবর্তিত হয় এবং কিছুটা জটিলও হতে পারে - টাইপটিকে নিজস্ব লাইনে লাগানো ফাংশনটির নাম খুঁজে পাওয়া সহজ করে।

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


2
আমি অনুমান করি যে এটি 80 টি চর রেখার সীমাতে এখনও সংযুক্ত এবং এখনও অনেক প্রোগ্রামার দ্বারা রক্ষিত। আপনি যদি 80 টি অক্ষরের সীমা রাখতে চান এবং আপনি বর্ণনামূলক পদ্ধতি / ফাংশন নাম ব্যবহার করতে চান, আপনাকে কিছু আপস করতে হবে। পদ্ধতির শিরোনামকে বিভক্ত করা তার মধ্যে একটি।
সুলতান

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

@ সুলতান এটি আকর্ষণীয়ভাবে কেবল প্রোগ্রামারই নয় (যারা টার্মিনাল উইন্ডোজ এবং টার্মিনাল সম্পাদক ব্যবহার করে)। টাইপসেটেটিংয়ের ক্ষেত্রে, 72-80 টি অক্ষর পাঠযোগ্যতার ক্ষেত্রে সাধারণত পাঠ্যের কলামের জন্য আদর্শ প্রস্থ হিসাবে বিবেচিত হয়। (অত: পর কেন TeX এবং তার ডেরাইভেটিভস কি কিছু লোক অদ্ভুত সংকীর্ণ কলাম বিবেচনা ডিফল্ট।)
Jab

1
@ জ্যাব আমি আসলে এখন এটি। আমি আরও জানি যে একটি ন্যায়সঙ্গত পাঠ্য পড়া এবং উত্স কোড পড়া দুটি খুব আলাদা জিনিস এবং এর প্রায় কোনও মিল নেই তাই আদর্শ প্রস্থটি অপ্রাসঙ্গিক।
সুলতান

1
"আরেকটি কারণ হ'ল ফাংশনটির নামগুলি সর্বদা প্রথম কলামে শুরু হয় [এবং তাই] সন্ধান করা সহজ" " এবং এটি নিছক ভিজ্যুয়াল বেনিফিটের চেয়ে অনেক বেশি: এখন আমরা রেইজেক্সের জন্য অনুসন্ধান করতে পারি ^start_of_a_long_funcএবং আমরা যে ফাংশনটি অনুসন্ধান করছি তা অবিলম্বে নেওয়া যেতে পারে।
আন্ডারস্কোর_২

7

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

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

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

শুরুর সিতে খুব ক্ষুদ্র স্বাক্ষর ছিল: রিটার্নের ধরনগুলি optionচ্ছিক ছিল এবং স্বাক্ষরের পরে যুক্তির ধরণগুলি ঘোষিত হয়েছিল। নামগুলিও খুব ছোট ছিল। নামটি অফসেট করে মাঝেমধ্যে রিটার্ন টাইপের প্রভাবকে প্রশমিত করেছে।

double dot(x, y);

এখনও বেশ হজম।

সি ++ এটি কিছুটা খারাপ করেছে। এটি স্বাক্ষরগুলিতে দীর্ঘস্থায়ী স্বাক্ষরগুলিতে যুক্তির ধরণের স্পেসিফিকেশন সরিয়ে নিয়েছে। এই বাক্য গঠনটি পরে সিটির মানককরণের সময় গৃহীত হয়েছিল

static struct origin *find_origin(struct scoreboard *sb,
                  struct commit *parent,
                  struct origin *origin)

হজম কম, তবে খুব খারাপ নয়। (গিট থেকে অংশ)

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

template <class A1, class A2, class A3, class A4, class A5, class A6>
inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
{ 
   typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
   return result_type(); 
}

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

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


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

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

1
সি ভাষার বিকাশ দেখুন । মানীকরণ বিভাগে রিচি উল্লেখ করেছেন সিনট্যাক্সটি সি ++ থেকে নেওয়া হয়েছিল orrow
ব্যবহারকারী 2313838

5

আমি এই শৈলীর সাথে প্রথম দেখা করেছি 19 তম বছরের মতো সি ও সি ++ এর সাথে কাজ করা। কীভাবে কেউ এই খারাপ জিনিস আবিষ্কার করতে পারে তা নিয়ে বেশ বিচলিত হয়ে পড়েছিলেন।

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

আমার মতামত অনুমান করুন। :)


1
grep -P '^(\w+::)?FuncName'
কাইল স্ট্র্যান্ড

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