মন্তব্য-আউট কোড মূল্যবান ডকুমেন্টেশন হতে পারে?


83

আমি নিম্নলিখিত কোডটি লিখেছি:

if (boutique == null) {
    boutique = new Boutique();

    boutique.setSite(site);
    boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
    boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
    boutique.setNom(fluxBoutique.getNom());
    boutique.setSelected(false);
    boutique.setIdWebSC(fluxBoutique.getId());
    boutique.setDateModification(new Date());

    boutiqueDao.persist(boutique);
} else {
    boutique.setSite(site);
    boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
    boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
    boutique.setNom(fluxBoutique.getNom());
    //boutique.setSelected(false);
    boutique.setIdWebSC(fluxBoutique.getId());
    boutique.setDateModification(new Date());

    boutiqueDao.merge(boutique);
}

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

এর মতো কোড মন্তব্য করা কি কখনও ভাল ধারণা হতে পারে?

উত্তর:


109

বেশিরভাগ উত্তর কীভাবে এই একটি নির্দিষ্ট কেসটির রিফ্যাক্টর করবেন তার দিকে মনোনিবেশ করে, তবে কেন মন্তব্য করা কোডটি সাধারণত খারাপ তা সম্পর্কে একটি সাধারণ উত্তর দিতে পারি:

প্রথমত, মন্তব্য করা কোড সংকলিত নয়। এটি সুস্পষ্ট, তবে এর অর্থ এটি:

  1. কোড এমনকি কাজ নাও করতে পারে।

  2. মন্তব্যটির নির্ভরতা পরিবর্তন হলে তা স্পষ্টতই ভাঙবে না।

মন্তব্য কোড খুব "ডেড কোড"। এটি যতক্ষণ বসবে তত বেশি এটি রোট করবে এবং পরবর্তী বিকাশকারীকে কম এবং কম মান সরবরাহ করবে।

দ্বিতীয়ত, উদ্দেশ্যটি অস্পষ্ট। আপনার সত্যিকারের একটি দীর্ঘ মন্তব্য দরকার যা এলোমেলোভাবে মন্তব্য করা লাইনের কারণে প্রসঙ্গটি সরবরাহ করে। আমি যখন কোডের কেবল একটি মন্তব্য করা লাইনটি দেখি, তখন সেখানে কেন এটি পেল তা বুঝতে হলে এটি কীভাবে সেখানে পেল তা নিয়ে আমাকে গবেষণা করতে হবে। যারা এটা লিখেছে? কি প্রতিশ্রুতি? প্রতিশ্রুতিবদ্ধ বার্তা / প্রসঙ্গে কি ছিল? ইত্যাদি।

বিকল্পগুলি বিবেচনা করুন:

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

5
আমি মনে করি আপনি একটি গুরুত্বপূর্ণ কারণ অনুপস্থিত: ডকুমেন্টেশন: যদি বিকল্প নকশা বিকল্পগুলির ডকুমেন্ট করা হয় তবে বিকল্পটির ব্যাখ্যা এবং বিশেষত কারণটি কেন তা বাতিল করা হয়েছে তা মূল কোডের পরিবর্তে সরবরাহ করা উচিত।
সারিন

14
প্রোগ্রামিং ভাষার চেয়ে মানব ভাষায় ডিজাইনের বিকল্পগুলি আরও ভালভাবে ব্যাখ্যা করা হয়।
মার্ক ই। হাজেস

3
পরবর্তী প্রকল্পগুলির বিকাশকারীরা কীভাবে আমার প্রকল্প গ্রহণ করবেন তা কীভাবে সম্ভব হবে যে উত্স নিয়ন্ত্রণে একটি বিকল্প / পূর্ববর্তী / ব্যর্থ বাস্তবায়ন বিদ্যমান? নতুন বিকাশকারীরা কি সমস্ত সংস্করণ ইতিহাসের মধ্যে দিয়ে লগগুলি পরিবর্তন করার প্রত্যাশা করে? বা প্রতিটি কার্যকর বিকল্প বাস্তবায়নের জন্য পূর্বের প্রতিশ্রুতিবদ্ধ হ্যাশের সাথে লিঙ্ক করতে মন্তব্য ব্যবহার করা একটি সাধারণ অভ্যাস? যদি তা হয়, আমি কখনই লক্ষ্য করিনি।
মুবি

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

263

এই কোডটির সাথে সবচেয়ে বড় সমস্যাটি হ'ল আপনি সেই 6 টি লাইন নকল করেছেন। একবারে আপনি সেই সদৃশটি সরিয়ে ফেললে, মন্তব্যটি অকেজো।

আপনি যদি কোনও boutiqueDao.mergeOrPersistপদ্ধতি তৈরি করেন তবে আপনি এটি আবার লিখতে পারেন:

if (boutique == null) {
    boutique = new Boutique();
    boutique.setSelected(false);
}

boutique.setSite(site);
boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
boutique.setNom(fluxBoutique.getNom());
boutique.setIdWebSC(fluxBoutique.getId());
boutique.setDateModification(new Date());

boutiqueDao.mergeOrPersist(boutique);

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

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


আপনি যদি কোনও mergeOrPersistপদ্ধতি তৈরি করতে না চান , আপনার অনুরূপ অন্য কোনও উপায়ে মুছে ফেলা উচিত, উদাহরণস্বরূপ একটি isNewBoutiqueপতাকা প্রবর্তন করে । এটি সুন্দর নাও হতে পারে তবে পুরো কার্যনির্বাহী যুক্তিকে নকল করার চেয়ে এটি আরও ভাল।

bool isNewBoutique = boutique == null;
if (isNewBoutique) {
    boutique = new Boutique();
    boutique.setSelected(false);
}

boutique.setSite(site);
boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE + fluxBoutique.getLogo());
boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE + fluxBoutique.getUrl());
boutique.setNom(fluxBoutique.getNom());
boutique.setIdWebSC(fluxBoutique.getId());
boutique.setDateModification(new Date());

if (isNewBoutique)
    boutiqueDao.persist(boutique);
else
    boutiqueDao.merge(boutique);

166

এটি একেবারে ভয়াবহ ধারণা। উদ্দেশ্যটি কী তা পরিষ্কার করে না। বিকাশকারীরা ভুল করে লাইনটি মন্তব্য করেছিল? কিছু পরীক্ষা করতে? কি হচ্ছে?!

এই সত্যটি বাদ দিয়ে আমি 6 টি লাইন দেখতে পাচ্ছি যা উভয় ক্ষেত্রেই একেবারে সমান। বরং আপনার এই কোডটির সদৃশ হওয়া উচিত। তারপরে এটি আরও স্পষ্ট হবে যে এক ক্ষেত্রে আপনি অতিরিক্তভাবে সেটসিলেক্টড কল করেন।


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

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

এই পোস্টে একই দৃষ্টিকোণ: মন্তব্য করা কোড সহ
কোডবেজকে

120

না, এটি একটি ভয়ানক ধারণা। কোডটির এই অংশটির ভিত্তিতে নিম্নলিখিত চিন্তাগুলি আমার মনে আসে:

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

মন্তব্য করা কোডের কয়েক হাজার লাইন দেখার পরে, আমি এখন যখন এটি দেখি তখন কেবল একমাত্র বুদ্ধিমান কাজটি করি: আমি তাৎক্ষণিকভাবে এটি সরিয়ে ফেলি।

কোনও রেপোজিটরিতে কোড আউট কোড চেক করার কোনও বুদ্ধিমান কারণ নেই।

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


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

23
এটি মানব পাঠযোগ্যতার জন্য একটি অনুকূলতা
জে.কে.

11
@ ট্র্যাথ আপনি গতি, মেমরির ব্যবহার, বিদ্যুৎ খরচ বা অন্য যে কোনও মেট্রিকের জন্য অনুকূল করতে পারেন তাই আমি দেখতে পাচ্ছি না যে আপনি পঠনযোগ্যতার জন্য অপ্টিমাইজ করতে পারবেন না (যদিও মেট্রিক হিসাবে এটি কিছুটা উওলির)
জে কে।

3
প্রকৃতপক্ষে, আমি মানুষের পাঠযোগ্যতা বলতে চাইছি। এখানে ছোট ইঙ্গিত: প্রোগ্রামিংয়ে আপনার সবচেয়ে গুরুত্বপূর্ণ দায় আপনার কোড। সুতরাং, কম এখানে সত্যিই বেশি।
ডিবিবেকে

4
দায় হিসাবে সফ্টওয়্যারটি c2.com/cgi/wiki?SoftwareAsLiability এও চিকিত্সা করা হয়: সেখান থেকে: "আরও কোড উত্পাদন করা সবসময় লাভ হয় না Code কোড পরীক্ষা করা এবং বজায় রাখা ব্যয়বহুল, তাই যদি একই কাজটি কম কোড দিয়ে করা যায় তবে এটি একটি প্লাস dead মৃত কোডটি মন্তব্য করবেন না, কেবল এটি মুছুন Com মন্তব্যযুক্ত কোডটি বাসি এবং অযথা খুব তাড়াতাড়ি চলে যায়, তাই আপনি বিশৃঙ্খলাটি শিথিল করার জন্য খুব শীঘ্রই এটি মুছতে পারেন itএটি আরও সহজ করার জন্য ভাল ব্যাকআপ রাখুন good । "
নিনজালজ

51

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

function fill(boutique) {    
  boutique.setSite(site);
  boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
  boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
  boutique.setNom(fluxBoutique.getNom());
  boutique.setIdWebSC(fluxBoutique.getId());
  boutique.setDateModification(new Date());
}    

function create() {
  boutique = new Boutique();      
  fill(boutique);
  boutique.setSelected(false);
  return boutiqueDao.persist(boutique);
}

function update(boutique) {
  fill(boutiquie);
  return boutiquieDao.merge(boutique); 
}

function createOrUpdate(boutique) {
  if (boutique == null) {
    return create();
  }
  return update(boutique);  
}

6
আমি মনে করি এটি এখানে সবচেয়ে পরিষ্কার পরামর্শ।
অ্যালেক্সিস ডুফরনয়

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

আমি boutiqueDaoইনপুট হিসাবে createএবং পাস হবে update
শুভ গ্রিন কিড নেপস

কিভাবে এই কাজ করতে পারেন? আপনি কখন কীভাবে কল কল করবেন এবং কখন আপডেট আপডেট করবেন তা জানতে পারবেন? আসল কোড বুটিকের দিকে তাকায় এবং এটি আপডেট করতে বা তৈরি করতে হবে কিনা তা জানে। আপনি তৈরি বা আপডেট কল না করা পর্যন্ত এটি কিছুই করে না ...
লিরিয়ন

লিরিয়ন: তুচ্ছ, আমি স্বচ্ছতার জন্য সেই কোডটি যুক্ত করব।
আলেকজান্ডার টর্স্টলিং

27

কোড মন্তব্য করা কোডের জন্য এটি পরিষ্কারভাবে ভাল না হলেও এমন একটি পরিস্থিতি রয়েছে যা আমি মনে করি এটি এর ওয়্যারেন্ট করেছে:

// The following code is obvious but does not work because of <x>
// <offending code>
<uglier answer that actually does work>

এটি পরে যে কেউ দেখবে তার পক্ষে এটি একটি সতর্কতা যে সুস্পষ্ট উন্নতি হয়নি।

সম্পাদনা: আমি ছোট কিছু নিয়ে কথা বলছি। যদি এটি বড় হয় তবে আপনি তার পরিবর্তে ব্যাখ্যা করুন।


5
এর সাথে কী হয়েছে // the following part done like it is because of X? ব্যাখ্যা কর কেন আপনি কিছু উপায় তুমি করেছ করেনি, কেন না তুমি করেছ না কিছু এটি বিশেষ উপায়। আপনার বিশেষ উদাহরণে, এটি সম্পূর্ণরূপে মন্তব্য-আউট কোডের একটি বৃহত ব্লকের প্রয়োজনীয়তা অপসারণ করে। (আমি ডাউনটোট করি নি, তবে কেন এটিকে হ্রাস পাবে তা অবশ্যই দেখতে পাচ্ছি))
সিভিএন

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

1
@ গ্রেট অলব্রাইট: ধন্যবাদ, কেউ এটি পেয়ে দেখে আমি আনন্দিত।
লরেন পেচটেল

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

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

14

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

// এই বুটিকটি নির্বাচন করার দরকার নেই, কারণ [WHATVER]

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

%% নীচের ভেক্টরাইজড কোডটি এটি করে:

% for ii in 1:N
%    for jj in 1:N
%      etc.

% তবে ম্যাট্রিক্স সংস্করণটি সাধারণ ইনপুটটিতে on 15x দ্রুত চালায় (এমকে, 03/10/2013)

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


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

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

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

1
আপনার শেষ ক্ষেত্রে আমি উভয় কোডের রূপগুলি সংকলনযোগ্য কোড হিসাবে রাখতে পারি।
কোডসইনচাউস

12

আমি একবার মন্তব্য-আউট কোডটি দেখেছি যা দরকারী ছিল তা ছিল কনফিগার ফাইলগুলিতে, যেখানে প্রতিটি বিকল্পের কোড সরবরাহ করা হয়, তবে মন্তব্য করা হয়েছিল, কেবলমাত্র মন্তব্য মার্কারগুলি সরিয়ে সেটিংস সক্ষম করা সহজ করে তুলেছে:

## Enable support for mouse input:
# enable_mouse = true

এই ক্ষেত্রে, মন্তব্যযুক্ত আউট কোড উপলব্ধ সমস্ত বিকল্পগুলির ডকুমেন্ট করতে সহায়তা করে এবং সেগুলি কীভাবে ব্যবহার করতে হয়। এটি ডিফল্ট মানগুলি জুড়ে ব্যবহার করা প্রচলিত, তাই কোডটি ডিফল্ট সেটিংসও ডকুমেন্ট করে।


7

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

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


2
এই রিং বেশ সত্য। প্রচুর লোক (আমার অন্তর্ভুক্ত) তাদের কোডটি এত দুর্দান্ত বলে মনে করে যে এটির ডকুমেন্টেশনের দরকার নেই। তবে, এটির পুরোপুরি নথিভুক্ত ও মন্তব্য না করা থাকলে বিশ্বের প্রত্যেককে এটি গব্বলডিগুক বলে মনে হয়।
রায়ান আমোস

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

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

4

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

মন্তব্যে ইন্টারফেসের বিশদ এবং উদ্দেশ্যযুক্ত ফাংশন অন্তর্ভুক্ত করা উচিত; "উদ্দেশ্যে ফাংশন": অন্তর্ভুক্ত করতে পারে, প্রথমে আমরা এটি চেষ্টা করি, তারপরে আমরা এটি চেষ্টা করি, তারপরে আমরা এইভাবে ব্যর্থ হই।

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


2

এটি খুব বিরল ক্ষেত্রে হতে পারে, তবে আপনি যেমনটি করেছেন তেমনটি নয়। অন্যান্য উত্তরগুলি এর কারণগুলি খুব ভালভাবে ধরিয়ে দিয়েছে।

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

Name:           foomatic
Version:        3.14
 ...
Source0:        %{name}-%{version}.tar.gz

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

Name:           barmatic
Version:        2.71
 ...
# This package has no sources.
# Source0:        %{name}-%{version}.tar.gz

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

if ( condition ) {
  foo();
  // Under most other circumstances, we would do a bar() here, but
  // we can't because the quux isn't activated yet.  We might call
  // bletch() later to rectify the situation.
  baz();
}

5
যুক্তিযুক্ত যে মন্তব্য যদিও কোড মন্তব্য করা হয় নি।
জে কে।

1
@ জে কে: আপনি যুক্তিযুক্তভাবে সঠিক।
blrfl

1

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

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

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


1
দুঃখিত, তবে আমি মন্তব্য-আউট কোডের কোনও মান দেখতে ব্যর্থ। মন্তব্য করা হয়েছে এমন কোড ব্যবহার করা হয়নি, সুতরাং এর উত্পাদন কোডে এর কোনও স্থান নেই।
ভ্লাদিমির কোকজানিক

1
"ব্যবহৃত" সংজ্ঞায়িত করুন।
জেনসজি

আমি মনে করি তিনি "মৃত্যুদণ্ডপ্রাপ্ত" বলতে চেয়েছিলেন
অ্যালেক্সিস ডুফরনয়

-2

এটি ভাল বন্ধু দেখাচ্ছে না।

মন্তব্য করা কোড হ'ল ... কেবল কোড নয়। কোডটি যুক্তি বাস্তবায়নের জন্য। একটি কোডকে নিজের মধ্যে আরও পঠনযোগ্য করে তোলা একটি শিল্প। যেহেতু @ কোডসআইএনচাউস ইতিমধ্যে পরামর্শ দিয়েছেন যে কোডের পুনরাবৃত্ত লাইনগুলি যুক্তিগুলির খুব ভাল প্রয়োগ নয়

আপনি কি সত্যিই মনে করেন যে একজন সত্যিকারের প্রোগ্রামার যুক্তিযুক্ত বাস্তবায়নের চেয়ে পাঠযোগ্যতার পছন্দ করবে। (আমাদের যুক্তিসঙ্গত উপস্থাপনের জন্য মন্তব্য এবং 'পরিপূরকগুলি' রয়েছে)।

যতদূর আমি উদ্বিগ্ন, কোনও একজনকে কম্পাইলারের জন্য একটি কোড লিখতে হবে এবং এটি ভাল - যদি 'কোড' সেই কোডটি বোঝে। মানুষের পাঠযোগ্যতার জন্য মন্তব্যগুলি ভাল, বিকাশকারীদের (দীর্ঘমেয়াদে), কোডটি পুনরায় ব্যবহার করার জন্য (যেমন পরীক্ষক) for

অন্যথায় আপনি এখানে আরও নমনীয় কিছু চেষ্টা করতে পারেন, এর মতো কিছু

বুটিক.সেটসাইট (সাইট) এর সাথে প্রতিস্থাপন করা যেতে পারে

setsiteof.boutique (সাইট)। ওওপির বিভিন্ন দিক এবং দৃষ্টিভঙ্গি রয়েছে যার মাধ্যমে আপনি পঠনযোগ্যতা বাড়াতে পারবেন।

যদিও এই কোডটি প্রথমে খুব আবেদনময়ী বলে মনে হচ্ছে এবং কেউ ভাবতে পারেন যে তিনি মানুষের পাঠযোগ্যতার জন্য একটি উপায় খুঁজে পেয়েছেন এবং সংকলকটিও এর কাজটি পুরোপুরিভাবে সম্পাদন করে এবং আমরা সকলেই এই অনুশীলনটি অনুসরণ করা শুরু করি যা এটি একটি अस्पष्ट ফাইলের দিকে নিয়ে যায় যা কম পাঠযোগ্য হবে সময় এবং আরও জটিল হিসাবে এটি তার নিচের দিকে প্রসারিত করবে।


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

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