যদি-অন্য-ধারাগুলি মন্তব্য করার ভাল উপায় কী? [বন্ধ]


15

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

if ($big == true) {
    bigMagic();
} else {
    smallMagic()
}

আমি এটি মত মন্তব্য করতে পারে:

// check, what kind of magic should happen
if ($big == true) {
    // do some big magic stuff
    bigMagic();
} else {
    // small magic is enough
    smallMagic()
}

অথবা

// check, what kind of magic should happen
// do some big magic stuff
if ($big == true) {
    bigMagic();
}
// small magic is enough
else {
   smallMagic()
}

অথবা

// check, what kind of magic should happen
// if:   do some big magic stuff
// else: small magic is enough
if ($big == true) {
    bigMagic();
} else {
    smallMagic()
}

এটি মন্তব্য করার জন্য আপনার সেরা-অনুশীলনের উদাহরণগুলি কী কী?


8
else { // for future reader: sorry, at the moment of writing this I did not have time and skills to come up with a better way to express my logic
gnat

1
বড় কেন আরও ভাল / পছন্দনীয় / আলাদা? দেখুন, আমি জানি না।
জেফো

এটি কি প্রশ্ন বা তর্ক করার বিষয়? এমনকি যদি প্রশ্নটি সঠিকভাবে হয় তবে সেগুলি যুদ্ধ-প্রারম্ভিক।
স্বাধীন

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

1
@ ক্যানিশ্রুফাস এটি কেবল আপনার পক্ষে দেখায় কারণ নিচের ভোটগুলি আপ ভোট দেয়। এই মুহুর্তে, নেট +2 এর জন্য 6 টি আপ এবং 4 ডাউন ভোট রয়েছে।
কালেব

উত্তর:


34

আমি হয় পছন্দ:

if ($magic == big) {
    bigMagic();
}
else {
    smallMagic();
}

বা:

if ($magic == big) {
    // big magic requires a big surprise, so I'm telling you about it here
    surprisingThing();
}
else {
    // give a magical feeling even if $magic is noMagicAtAll
    smallMagic();
}

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

আমি "মন্তব্যগুলি কখনই লিখি না" দর্শনে সাবস্ক্রাইব করি না, তবে কোডটি কী বলা উচিত তা বলে এমন মন্তব্যগুলি এড়ানোতে আমি বিশ্বাস করি। কোডটি যখন বলতে পারে "আপনি কী ধরণের ম্যাজিক হওয়া উচিত তা পরীক্ষা করুন" এর মতো মন্তব্য লিখলে if ($magic == big) {...পাঠকরা আপনার মন্তব্যগুলি খুব দ্রুত পড়া বন্ধ করবে। কম, বেশি অর্থবহ মন্তব্যগুলি ব্যবহার করে আপনার প্রতিটি মন্তব্যকে আরও বেশি মূল্য দেওয়া হয় এবং আপনি যেগুলি লেখেন সেদিকে পাঠকরা তাদের মনোযোগ দেবেন।

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

কোডে যতটুকু পারো বলুন। আপনি যে কারণে যুক্তিসঙ্গতভাবে কোডটিতে লিখতে পারেন তার চেয়ে বেশি ব্যাখ্যা দাবি করার ক্ষেত্রে গদ্য সংরক্ষণ করুন।


13
+1 মন্তব্য অতিরিক্ত পরিমাণে করবেন না, পরিষ্কার কোডটির জন্য কোনও মন্তব্যের প্রয়োজন নেই
ratchet freak

3
@ratchetfreak মনে হচ্ছে আমরা বেশিরভাগ চুক্তিতে রয়েছি, তবে কোড পরিষ্কার করার জন্য মন্তব্যগুলি প্রায়শই প্রয়োজন। Historicalতিহাসিক প্রসঙ্গ সরবরাহ করা, অবাক করা আচরণের জন্য ব্যাখ্যা করা বা অস্পষ্টতা সমাধান করা মন্তব্যে সেরা করা হয় best
কালেব

1
ভাল কথা, কালেব। এটি সত্য যে যতক্ষণ সম্ভব কোডের কোনও ধরণের স্বয়ংক্রিয় মন্তব্য করা উচিত।
acme

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

1
সমস্যাটি হ'ল কোড পড়ার পক্ষে মন্তব্য করা এবং মন্তব্য না করা সবচেয়ে সহজ। কোড পড়ার পক্ষে শক্ত লেখা সহজ তবে ধারাবাহিকভাবে কোড লেখার চেয়ে কমেন্ট করা ভাল বলে মন্তব্য করার দরকার পড়ে না।
স্বীকার করে

11

ব্যাখ্যামূলক চলক নাম চেষ্টা করুন

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

if (user.has_sideburns && user.can_gyrate) {
  // This user is a potential Elvis impersonator

}

আমি একটি নামযুক্ত ভেরিয়েবল পছন্দ করি:

is_potential_elvis_impersonator = user.has_sideburns && user.can_gyrate

if (is_potential_elvis_impersonator) {
  ...
}

2
আমি আরও এক ধাপ এবং ব্যবহারের যান: is_potential_elvis_impersonator। (বুলিয়ান ভেরিয়েবলের জন্য কি আছে / ইত্যাদি উপসর্গ ..)
জ্যাক বার্গার

@ জবার্গার - আমি এটি পছন্দ করি সেই অনুযায়ী উত্তর সম্পাদনা করা হচ্ছে।
নাথান লং

3

কিছু মন্তব্য সম্পূর্ণ করতে:

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

বিটিডাব্লু: আমি এই বইয়ের প্রস্তাব দিই।


3

মন্তব্যে কোডটি প্যারাফ্রেজ করা উচিত নয় তবে কোডগুলিতে নেই এমন জিনিসগুলি ব্যাখ্যা করা উচিত (বড় চিত্র, কেন, বিকল্পটি কেন বেছে নেওয়া হয়নি ...) এবং আপনার উদাহরণ মন্তব্যগুলি কেবল এটি: কোডের প্যারাফ্রেজ।

আপনি কখনও কখনও অনুভব করতে পারেন যে elseশাখা শুরুর সময় একটি প্যারাফ্রেজ প্রয়োজন , তবে এটি প্রায়শই একটি চিহ্ন যে আপনার thenশাখাটি খুব বড়।


2

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

আপনার স্নিপেট এর সাথে তুলনা করুন:

if ($x) {
    func1();
} else {
    func2();
}

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

সাধারণভাবে, আমি লজিক্যাল ব্লকগুলির জন্য মন্তব্যগুলি লিখতে চাই যা কোডগুলি নিজেরাই করতে পারে না এমন জিনিসগুলি বর্ণনা করে। প্রতি 10-10 ডলার লাইনগুলিতে একটি ওয়ান-লাইনার বর্ণন করে যে নীচের কয়েকটি মুখ্য রেখাগুলি এক বিমূর্ততার উচ্চ স্তরে কী অর্জন করে (উদাঃ// Make the right amount of magic happen আপনার উদাহরণস্বরূপ) আপনাকে অভিমুখী রাখতে এবং আপনি কী করছেন এবং কখন একটি নতুন পর্যালোচক অন্তর্দৃষ্টি দিতে সহায়তা করবে ।

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

পরিশেষে, আপনি যদি কোডটি পঠনযোগ্যতা বিবেচনা না করে থাকেন তবে যদি আপনি সত্যিই পছন্দ করেন (বা কোনও ম্যান্ডেটের প্রয়োজন রয়েছে) যদি ব্লকের মন্তব্যগুলিতে মন্তব্য করতে পারেন তবে আমি সুপারিশ করছি:

// Broad description of block
if (something) {
    //Do this because something
    something();
} else {
    //Do this because !something
    somethingElse();
}

আমি মনে করি এটি সবচেয়ে পরিষ্কার, কারণ মন্তব্যটি কোডটির সাথে সম্পর্কিত যার সাথে এটি সম্পর্কিত। কোন কোড কী করবে তা বর্ণনা করার মতো একটি মন্তব্য এটি যতটা সম্ভব বর্ণনা করা মন্তব্যের কাছাকাছি হওয়া উচিত।


2
if (IsWeekDay(day))
{// weekday -> alarm at 7am
   ...
}
else if(day == DayOfWeek.Saturday)
{// saturday -> alarm at 11am
   ...
}
else
{// (sunday) -> no alarm
   ...
}

আমি আমার বন্ধনীগুলি সারিবদ্ধভাবে রেখেছি এবং এটি বন্ধনীটির ঠিক পরে রেখেছি।

[Condition] -> [pseudo-code]

অন্যথায়, এটি প্রযুক্তিগতভাবে অন্য সমস্ত শর্তগুলি ব্যর্থ হয়েছে, তাই আমি সাধারণত বন্ধনী ব্যবহার করি।

([Condition]) -> [pseudo-code]

দ্রষ্টব্য: এটি সি # এর জন্য।


1

সেই ব্লকটি কী করে (আপনার প্রথম নমুনা) তা বলার চেষ্টা করে ব্লকের ভিতরে মন্তব্যগুলি ব্যবহার করার চেষ্টা করি।

এই কান্ডা 'ব্রেকআপ হ'ল ব্যবহার করার সময় elseif। আমি বেসিকটি ব্যবহার করি যাতে সুস্পষ্ট প্রান্তের অবরুদ্ধতা নেই এবং প্রায়শই শর্তটি যা মন্তব্য করছে যে এটি খুব দীর্ঘ হলে উপরের লাইনে (অবশ্যই একটি লাইন ব্রেক সহ) যা যা পরীক্ষা করছে।

'Check XYZ
If Condition1 then
  'We need to do T and S
  DoCodeFor1();

'Check ABC
ElseIf Condition1 then
  'This requires something else to be done
  DoCodeFor2()

Else
  'We have no other option than to...
  DoCodeFor3()

End If

হ্যাঁ, আপনি যখন প্রথম বন্ধনী ছাড়া কোনও ভাষা ব্যবহার করছেন তখন এটি সত্যিই আরও ভাল কাজ করছে।
acme

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

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


0

সি ++ বা সি # তে আমি সাধারণত সরল কেসগুলিতে মন্তব্য করব না (যখন এটি স্পষ্ট হয় কী ঘটছে), এবং চূড়ান্ত মন্তব্য করার জন্য এই ধরণের স্টাইল ব্যবহার করি ...

if (pattern == AAA)
{
  DoSomethingAAA();
}
else if (pattern == BBB)
{
  DoSomethingBBB();
}
else // if (pattern == CCC)
{
  DoSomethingCCC();
}

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