বেশিরভাগ অংশের জন্য এটি ব্যক্তিগত পছন্দ, তবে কিছু বিষয় বিবেচনা করার আছে।
সম্ভাব্য বাগ
যদিও এই যুক্তি দেওয়া যেতে পারে যে যোগ-ইন করার জন্য ধনুর্বন্ধনী বিস্মরণ দ্বারা সৃষ্ট বাগ, বিরল আমি যা করেছি থেকে দেখা যে তারা না ঘটতে মাঝেমধ্যে (ভুলবেন না বিখ্যাত চলচ্চিত্র IOS এতে যান ব্যর্থ বাগ)। সুতরাং আমি মনে করি আপনার কোড শৈলীর বিবেচনা করার সময় এটি একটি ফ্যাক্টর হওয়া উচিত (কিছু সরঞ্জাম বিভ্রান্তিকর-প্রবর্তন সম্পর্কে সতর্ক করে , তাই এটি আপনার সরঞ্জাম চেইনের উপরও নির্ভর করে) ।
বৈধ কোড (এটি পড়তে পারে এমন একটি বাগ হতে পারে)
এমনকি আপনার প্রকল্পটি যেমন বাগগুলি ভুগছে না তা অনুমান করেও, কোড পড়ার সময় আপনি কিছু কোডের ব্লক দেখতে পাবেন যেগুলি দেখতে বাগের মতো হতে পারে - তবে তা নয়, আপনার কিছু মানসিক চক্র গ্রহণ করছে।
আমরা দিয়ে শুরু:
if (foo)
bar();
একজন বিকাশকারী একটি দরকারী মন্তব্য যুক্ত করুন।
if (foo)
// At this point we know foo is valid.
bar();
পরে একজন বিকাশকারী এটিতে প্রসারিত হয়।
if (foo)
// At this point we know foo is valid.
// This never fails but is too slow even for debug, so keep disabled.
// assert(is_valid(foo));
bar();
বা নেস্টেড ব্লক যুক্ত করে:
if (foo)
while (i--) {
bar(i);
baz(i);
}
অথবা ম্যাক্রো ব্যবহার করে:
if (foo)
SOME_MACRO();
"... যেহেতু ম্যাক্রোগুলি কোডের একাধিক লাইন সংজ্ঞায়িত করতে পারে, তাই ম্যাক্রো কি একাধিক লাইনের জন্য ব্যবহার do {...} while (0)
করে? এটি কারণ এটি আমাদের স্টাইল-গাইডে হওয়া উচিত তবে আমি কেবল আরও ভাল ক্ষেত্রে পরীক্ষা করতে পারি!"
উপরের উদাহরণগুলি হ'ল সমস্ত বৈধ কোড, তবে কোড-ব্লকে যত বেশি বিষয়বস্তু রয়েছে ততই ত্রুটি না হওয়ার জন্য আপনাকে আরও পড়তে হবে।
হতে পারে আপনার কোড-স্টাইলটি সংজ্ঞায়িত করে যে মাল্টি-লাইন ব্লকগুলির জন্য একটি ব্রাসের প্রয়োজন (যাই হোক না কেন তারা কোড নাও) তবে আমি এই ধরণের মন্তব্যগুলি প্রোডাকশন কোডে যুক্ত হতে দেখেছি। আপনি যখন এটি পড়েন, সেখানে কিছুটা সন্দেহ রয়েছে যে শেষবারের মতো যারা এই লাইনগুলি সম্পাদনা করেছিলেন তিনি একটি বক্রবন্ধ যুক্ত করতে ভুলে গিয়েছিলেন, কখনও কখনও আমি ডাবল-চেক করার প্রয়োজন মনে করে কাজ করে যাচ্ছি (বিশেষত কোডের এই অঞ্চলে কোনও বাগ তদন্ত করার সময়) ।
ডিফ শোরগোল
একক লাইনের জন্য ধনুর্বন্ধনী ব্যবহার করার একটি ব্যবহারিক কারণ হ'ল ভিন্ন শব্দ কমিয়ে আনা ।
তা হচ্ছে, পরিবর্তন:
if (foo)
bar();
প্রতি:
if (foo) {
bar();
baz();
}
... পরিবর্তিত হওয়ার সাথে সাথে শর্তসাপেক্ষ রেখাটি দেখা দেয়, এতে কিছু ছোট তবে অপ্রয়োজনীয় ওভারহেড যুক্ত হয়।
- লাইনগুলি কোড-রিভিউগুলিতে পরিবর্তিত হচ্ছে বলে দেখায়, যদি আপনার বিবিধ সরঞ্জামগুলি শব্দ-ভিত্তিক হয় তবে আপনি সহজেই দেখতে পারেন যে কেবল ধনুর্বন্ধনী পরিবর্তিত হয়েছে, তবে লাইনটি আদৌ পরিবর্তন হয়নি কিনা তা পরীক্ষা করতে আরও সময় লাগে takes
এটি বলার পরেও, সমস্ত সরঞ্জাম শব্দ-ভিত্তিক পৃথকীকরণকে সমর্থন করে না, ডিফ (এসএনএন, গিট, এইচজি ... ইত্যাদি) পুরো লাইনটি পরিবর্তিত হয়েছে এমনকী অভিনব সরঞ্জামগুলির সাহায্যেও কখনও কখনও আপনাকে দ্রুত একটি সরলরেখার দিকে নজর দিতে হবে কি পরিবর্তিত হয়েছে তা দেখতে বেসিক পার্থক্য।
- টীকাগুলির সরঞ্জামগুলি (যেমন
git blame
) লাইনটি পরিবর্তিত হওয়ার হিসাবে দেখায়, একটি লাইনের উত্সকে ট্র্যাকিং করে প্রকৃত পরিবর্তনটি খুঁজে পেতে আরও ধাপ ।
এগুলি উভয়ই ছোট এবং আপনি কোড-পর্যালোচনা বা ট্র্যাকিং-ডাউনে কতটা সময় ব্যয় করেন তার উপর নির্ভর করে যা কোডের পরিবর্তিত লাইনের প্রতিশ্রুতি দেয়।
অতিরিক্ত ভিন্ন রেখায় পরিবর্তন হওয়ার আরও স্পষ্টত অসুবিধা, কোডের পরিবর্তনের ফলে তাদের সংঘটিত হতে পারে এবং ম্যানুয়ালি সমাধান করা দরকার এমন দ্বন্দ্ব সৃষ্টি করবে ।
{
এটির একটি ব্যতিক্রম আছে, নিজস্ব লাইনে থাকা কোড-বেসগুলির জন্য - এটি কোনও সমস্যা নয়।
পরিবর্তন গোলমাল যুক্তি না রাখা যদি এই স্টাইলে লিখুন:
if (foo)
{
bar();
baz();
}
তবে এই ধরনের একটি সাধারণ সম্মেলন নন, সুতরাং প্রধানত সম্পূর্ণতার জন্য উত্তর যোগ (না পরামর্শ প্রকল্প এই শৈলী ব্যবহার করা উচিত) ।