ক্লিন ডকুমেন্ট বনাম ক্লিন কোড মন্তব্যগুলি


83

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

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

public Product GetById(int productId) {...}

আমি নিম্নলিখিত পদ্ধতির সারাংশ যুক্ত করছি

/// <summary>
/// Retrieves a product by its id, returns null if no product was found.
/// </summary

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

তবে আমার সহকর্মীরা মনে করেন যে এই ধরণের মন্তব্যগুলি " কোড গন্ধ " এবং "মন্তব্যগুলি সর্বদা ব্যর্থতা" ( রবার্ট সি মার্টিন )।

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

এটি ইন-লাইন মন্তব্য সম্পর্কে কোনও প্রশ্ন নয়।


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


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

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

6
পদ্ধতিটি ট্রিগেটবিআইআইডি বলা উচিত এবং মন্তব্যটি সরানো উচিত।
usr

উত্তর:


116

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

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

একটি আইডি দ্বারা একটি পণ্য পুনরুদ্ধার

এই অংশটি কেবলমাত্র আমরা ইতিমধ্যে নাম GetByIdপ্লাস ফেরতের প্রকার থেকে যা দেখি তার পুনরাবৃত্তি করে Product। এটি "উত্থাপন" এবং "পুনরুদ্ধার" এর মধ্যে পার্থক্য কী এবং এই পার্থক্য সম্পর্কে কী কোড ভার্সেস মন্তব্য রয়েছে তার প্রশ্নটিও উত্থাপন করে। সুতরাং এটি অযথা এবং কিছুটা বিভ্রান্তিকর। যদি কিছু হয় তবে এটি আসলে কার্যকর হিসাবে আসবে, মন্তব্যের দ্বিতীয় অংশ:

কোনও পণ্য পাওয়া না গেলে নাল ফেরায়।

আহ! এটি এমন কিছু যা আমরা অবশ্যই স্বাক্ষর থেকে নিশ্চিতভাবে জানতে পারি না এবং দরকারী তথ্য সরবরাহ করে।


এবার এটিকে আরও একধাপ এগিয়ে নিয়ে যান। কোডের গন্ধ হিসাবে লোকেরা যখন মন্তব্য সম্পর্কে কথা বলেন, প্রশ্নটি কোডটির মতো একটি মন্তব্য করার প্রয়োজন কিনা তা নয়, তবে মন্তব্যে তথ্য প্রকাশ করার জন্য, মন্তব্যটি কোডটি আরও ভালভাবে লেখা যেতে পারে কিনা তা নয়। "কোড গন্ধ" এর অর্থ এটি - এর অর্থ এই নয় যে "এটি করবেন না!", এর অর্থ "আপনি যদি এটি করেন তবে এটি কোনও সমস্যা হওয়ার লক্ষণ হতে পারে"।

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


এই নির্দিষ্ট ক্ষেত্রে সম্পর্কে, সাধারণত নাল ইস্যুটি একটি কঠিন হিসাবে পরিচিত। গার্ড ক্লজ দিয়ে কোড বেজগুলি ফাঁক হওয়ার কারণ রয়েছে, নাল চেকগুলি কোড চুক্তির জন্য একটি জনপ্রিয় পূর্বশর্ত, নালটির অস্তিত্বকে কেন "বিলিয়ন ডলারের ভুল" বলা হয়েছে? এমন অনেকগুলি কার্যকর বিকল্প নেই। যদিও সি # তে পাওয়া একটি জনপ্রিয় Try...কনভেনশন:

public bool TryGetById(int productId, out Product product);

অন্য ভাষাগুলিতে, কোনও ফলাফল যা সেখানে থাকতে পারে এবং নাও হতে পারে তা বোঝাতে কোনও প্রকার (প্রায়শই এর মতো কিছু বলা হয় ) Optionalবা ব্যবহার করা মূর্খবাদী হতে পারে Maybe:

public Optional<Product> GetById(int productId);

সুতরাং একরকম, মন্তব্যবিরোধী এই অবস্থানটি আমাদের কোথাও পেয়েছে: এই মন্তব্যটি গন্ধকে উপস্থাপন করে কিনা এবং আমাদের পক্ষে কী বিকল্প থাকতে পারে সে সম্পর্কে আমরা কমপক্ষে চিন্তা করেছি।

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


9
অথবা Linqএর -equivalent Try..., ...OrDefaultযা আসতে default(T)যদি দফা একটি খালি ফলাফলের হতে হবে।
বার্ট ভ্যান নাইরোপ

4
আমি ইনলাইন-কোড-মন্তব্য এবং ডকুমেন্টেশন মন্তব্যসমূহ এবং দেওয়া উদাহরণগুলির মধ্যে আপনার পার্থক্যকে সত্যই প্রশংসা করি :)
রাচেল

2
কোনও ফাংশনের সম্ভাব্য রিটার্ন মানগুলি তার স্বাক্ষরের দ্বারা স্পষ্ট হওয়া উচিত। TryGetValueপ্যাটার্ন C # এই কাজ করার একটি যুক্তিসঙ্গত উপায়, কিন্তু অধিকাংশ ক্রিয়ামূলক ভাষায় একটি অনুপস্থিত মান প্রতিনিধিত্বমূলক একটি ভাল উপায় আছে। এখানে আরও পড়ুন
অ্যালেক্সফক্সগিল

2
@ বেনারনসন: যদি কেউ জেনেরিক ইন্টারফেস রাখতে চায় যা সমবায়কে সমর্থন করতে পারে তবে শ্রেণি-সীমাবদ্ধ টাইপ টিয়ের T TryGetValue(params, ref bool success)জন্য যে কোনও প্রকারের টি বা T TryGetValue(params)নাল ইঙ্গিত ব্যর্থতার সাথে ব্যবহার করা যেতে পারে , তবে যে TryGetXXপ্যাটার্নটি ফিরে আসে boolতা সাম্প্রদায়িকতার সাথে বেমানান।
সুপারক্যাট

6
জাভা 8-এ, আপনি Optional<Product>পদ্ধতিটি থেকে কোনও পণ্য ফেরত পাওয়া নাও যেতে পারে তা বোঝাতে আপনি ফিরে আসতে পারেন ।
উইম দেবলাউয়ে

102

রবার্ট সি মার্টিনের উদ্ধৃতিটি প্রসঙ্গের বাইরে নেওয়া হয়েছে। এখানে আরও কিছু প্রসঙ্গের সাথে উদ্ধৃতিটি দেওয়া হয়েছে:

ভালভাবে বসানো মন্তব্য হিসাবে কিছুই তেমন সহায়ক হতে পারে না। অপ্রচলিত কৌতূহলমূলক মন্তব্যের চেয়ে কিছুই মডিউলকে বিশৃঙ্খলা করতে পারে না। পুরানো ক্রুফটি মন্তব্য মিথ্যা এবং ভুল তথ্য প্রচার করার মতো কিছুই তেমন ক্ষতিকারক হতে পারে না।

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

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

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

( এখান থেকে অনুলিপি করা হয়েছে , তবে মূল উক্তিটি ক্লিন কোড থেকে এসেছে : এন্ডবিল অফ এগ্রিল সফটওয়্যার কারুকাজ )

এই উক্তিটিকে "মন্তব্যগুলি সর্বদা ব্যর্থতা" এ কীভাবে হ্রাস করা হয় এটি একটি উত্তম উদাহরণ যা কিছু লোকেরা কীভাবে প্রজ্ঞার বাইরে একটি বুদ্ধিমান উক্তি গ্রহণ করবে এবং এটিকে বোকামির মতবাদে পরিণত করবে।


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

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

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

অ্যাডমোথস পদ্ধতিটি লিপ বছরগুলি এবং এক মাসে কত দিনের সংখ্যা গ্রহণ করে ফলাফলের মাস এবং বছর গণনা করে, তারপরে ফলাফলের তারিখটাইম বস্তুর দিনের অংশটি সামঞ্জস্য করে। যদি ফলাফলের দিনটি ফলাফল প্রাপ্ত মাসে কোনও বৈধ দিন না হয় তবে ফলাফল প্রাপ্ত মাসের শেষ বৈধ দিনটি ব্যবহৃত হয়। উদাহরণস্বরূপ, 31 শে মার্চ + 1 মাস = 30 এপ্রিল। ফলাফলের ডেটটাইম অবজেক্টের সময়ের অংশ অংশটি এই উদাহরণ হিসাবে একই থাকে remains

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


ইনলাইন মন্তব্যগুলিও খারাপ নয়।

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

// increment x by one
x++;

মতামত যা এমন কিছু ব্যাখ্যা করে যা একটি পরিবর্তনশীল বা পদ্ধতিটির নাম পরিবর্তন করে বা কোডটিকে পুনর্গঠন করে পরিষ্কার করা যেতে পারে, এটি একটি কোড গন্ধ:

// data1 is the collection of tasks which failed during execution
var data1 = getData1();

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

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

// need to reset foo before calling bar due to a bug in the foo component.
foo.reset()
foo.bar();

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

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


13
এছাড়া কেস যেখানে আপনার কোড পরিস্থিতি যে শুধু পরিচালনা করেন হয় জটিল, এবং কোন সহজ কোড এটি পরিচালনা করতে পারেন।
gnasher729

6
গুড পয়েন্ট, জ্ঞানার। পারফরম্যান্সের জন্য কোডের কিছু অংশকে অপ্টিমাইজ করতে হলে এটি প্রায়শই ঘটে বলে মনে হয়।
জ্যাকবিবি

9
এমনকি একটি মন্তব্যও x++ভাল হতে পারে যদি এটি "ইনক্রিমেন্ট এক্স, একের পর এক জড়ানো থাকে তবে এটি UINT32_MAX হয়"; যে ভাষাটি জানে তার যে কেউ জানে যে একটি বাড়িয়ে দেবে একটি uint32_tমোড়কে लपेटবে, তবে কোনও মন্তব্য না করেই হয়ত জানা যাবে না যে এ জাতীয় মোড়কটি আলগোরিদিমের একটি প্রত্যাশিত অংশ বাস্তবায়িত হয়েছিল কিনা ।
সুপারক্যাট

5
@ l0b0: আমি আশা করি আপনি রসিকতা করছেন!
জ্যাকবিবি

9
@ l0b0 অস্থায়ী কোডের মতো কোনও জিনিস নেই। কোডটি কখনই রিফ্যাক্টর হয় না কারণ ব্যবসায় ফলাফলের সাথে খুশি ছিল এবং এটি ঠিক করার জন্য অর্থায়ন অনুমোদন করবে না। আজ থেকে পাঁচ বছর পরে, কিছু জুনিয়র বিকাশকারী এই কোডটি দেখতে পাবে, আপনি এমনকি উইজবগ 4.0.০ ব্যবহার করছেন না যেহেতু আপনি এটিকে বুগট্রোসিটি ভি 9 দিয়ে প্রতিস্থাপন করেছেন, সুতরাং "বাগ 123" তার কাছে কিছুই বোঝায় না। তিনি এখন ভাবেন যে এইভাবে স্থায়ী কোড হওয়ার কথা, এবং তার পুরো ক্যারিয়ারকে একজন ভয়ংকর বিকাশকারী হিসাবে এগিয়ে যায়। বাচ্চাদের কথা ভাবুন। অস্থায়ী কোড লিখবেন না।
কর্সিকা

36

আপনার কোডটি মন্তব্য করা এবং আপনার কোডটি দলিল করার মধ্যে পার্থক্য রয়েছে ।

  • কোডগুলি পরে রক্ষণাবেক্ষণের জন্য মন্তব্যগুলির প্রয়োজন, এটি কোডটি নিজেই পরিবর্তন করে।

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

  • আপনার বিকাশ করা বস্তুগুলি (শ্রেণি, ইন্টারফেস) ব্যবহার করতে সক্ষম করার জন্য ডকুমেন্টেশন প্রয়োজন। লক্ষ্য শ্রোতাগুলি পৃথক: এটি এমন ব্যক্তি নয় যাঁরা আপনার কোডটি বজায় রাখবেন এবং এটি এখানে পরিবর্তন করবেন যা আমরা এখানে বলছি but তবে এমন ব্যক্তিরা যাদের সবেমাত্র এটি ব্যবহার করা দরকার ।

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


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

13

ঠিক আছে, দেখে মনে হচ্ছে আপনার সহকর্মী বই পড়েন, তারা যা বলেন তা গ্রহণ করে এবং তিনি যা শিখেছিলেন তা প্রয়োগ না করে এবং প্রসঙ্গের কোন বিবেচনা ছাড়াই।

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

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

সুতরাং আপনার সহকর্মী সম্পূর্ণ ভুল। এবং এগিয়ে যান এবং সমস্ত বই পড়ুন, কিন্তু নিজের জন্য চিন্তা করুন।

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


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

12

দুটি ধরণের মন্তব্য বিবেচনা করতে হবে - কোড সহ লোকদের কাছে দৃশ্যমান এবং ডকুমেন্টেশন তৈরি করতে যারা ব্যবহার করেন।

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

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


আমি সত্যই কখনই কোড + মন্তব্যে ডিআরওয়াই প্রয়োগ করার কথা ভাবি নি, তবে এটি সঠিক ধারণা দেয়। @ জ্যাকসিবের উত্তরে "ইনক্রিমেন্ট এক্স" এর মতো বাছাই করুন।

7

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

/// <summary>
/// Retrieves a product by its id, returns null if no product was found.
/// </summary>

মূল্য এবং ব্যয়ের জন্য আমরা তিনটি জিনিস দেখতে পাই:

  1. Retrieves a product by its idফাংশনটির নাম যা বলে তার পুনরাবৃত্তি করে, তাই এটি মূল্য ছাড়াই ব্যয় করে। এটি মুছে ফেলা উচিত।

  2. returns null if no product was foundখুব মূল্যবান তথ্য। এটি সম্ভবত অন্যান্য কোডারদের ফাংশনের বাস্তবায়নের দিকে নজর দিতে হবে এমন সময়গুলি হ্রাস করে। আমি নিশ্চিত যে এটি পড়াশোনার ব্যয়ের চেয়ে নিজের পড়াশোনার চেয়ে বেশি পড়া সংরক্ষণ করে। এটা থাকা উচিত।

  3. রেখাগুলি

    /// <summary>
    /// </summary>
    

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

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


এমন একটি পর্যবেক্ষণ যা আমি অন্য কোনও উত্তরতে পাইনি:

এমনকি মন্তব্য যে না বুঝতে / কোড ব্যবহার করার জন্য প্রয়োজনীয় খুবই মূল্যবান হতে পারে। এখানে যেমন একটি উদাহরণ:

//XXX: The obvious way to do this would have been ...
//     However, since we need this functionality primarily for ...
//     doing this the non-obvious way of ...
//     gives us the advantage of ...

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

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


2
বাহ - আপনার দস্তাবেজ জেনারেটরটি পরিবর্তন করুন কারণ পার্স করার জন্য এটির জন্য এইচটিএমএল এর কয়েকটি অতিরিক্ত লাইন প্রয়োজন? এর না.
কর্সিকা

2
@ কর্সিকা ওয়াইএমএমভি, তবে আমি সবার জন্য এমন একটি ডকুমেন্টেশন জেনারেটর পছন্দ করব যা মন্তব্যে ব্যয় কমিয়ে ন্যূনতম করে দেবে। অবশ্যই, আমি বরং ডক্সিকেশন ডকুমেন্টেশনের চেয়ে একটি ভাল লিখিত শিরোলেখ ফাইলটি পড়েছি যা আসল কোডের সাথে সিঙ্কের বাইরে। তবে, আমি যেমন বলেছি, ওয়াইএমএমভি।
মাস্টার

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

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

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

4

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

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


2
আপনি বুদ্ধিমান লেখক এবং পাঠ্যটি বুদ্ধিমান শ্রোতার সুবিধার জন্য; আপনি সাধারণ জ্ঞান ব্যবহার করে রেখাটি আঁকুন। স্পষ্টতই, এটি যেমন দাঁড়িয়েছে, উদাহরণটি বোবা, তবে এটি বলার অপেক্ষা রাখে না যে কোডটি কেন এই সময়ে আই ++ অন্তর্ভুক্ত করে তার একটি মন্তব্য দিয়ে স্পষ্ট করার খুব ভাল কারণ হতে পারে না।
ভিন্স ও'সুলিভান

8
i++; // Adjust for leap years.
ভিন্স ও'সুলিভান

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

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

1
কারণ @Jay যে (, যেমন, দ্বারা উপস্থাপক পদ্ধতি) আপনার বিমূর্ত স্পষ্ট করছে হয় নিয়ম। এটি না করা কারণ আপনি একটি পদ্ধতিতে শেষ হতে পারেন যার এক লাইনের ব্যতিক্রম। আসল স্বেচ্ছাচারী নিয়মটি আমি প্যারাফ্রেজ করতে পারি : "বিমূর্ততা প্রবর্তনের জন্য আপনার প্রোগ্রামিং ভাষার কাঠামোগুলি (সাধারণত পদ্ধতি এবং শ্রেণিগুলি) ব্যবহার করুন, যদি না সেই বিমূর্তনের প্রয়োগটি কোডের এক লাইন হিসাবে প্রকাশ করা না যায়, সেক্ষেত্রে প্রাকৃতিক ভাষায় বিমূর্ততা যোগ করে নির্দিষ্ট করুন একটি মন্তব্য."
এরিক

3

কিছু ভাষায় (উদাহরণস্বরূপ F #) এই সম্পূর্ণ মন্তব্য / ডকুমেন্টেশন আসলে পদ্ধতি স্বাক্ষরে প্রকাশ করা যেতে পারে। এটি এফ # তে কারণ, নির্দিষ্টভাবে অনুমতি না দেওয়া হলে নাল সাধারণত একটি অনুমোদিত মান হয় না।

এফ # তে (এবং বেশ কয়েকটি অন্যান্য কার্যকরী ভাষাগুলিতে) যা সাধারণ তা হ'ল নাল পরিবর্তে আপনি একটি বিকল্প প্রকার ব্যবহার করুন Option<T>যা হতে পারে Noneবা হতে পারে Some(T)। ভাষাটি তখন এটি বুঝতে পারে এবং আপনি যখন এটি ব্যবহার করার চেষ্টা করেন তখন উভয় ক্ষেত্রেই আপনাকে মিলিয়ে (বা আপনাকে সতর্ক করে না) জোর করে।

সুতরাং F # এ উদাহরণস্বরূপ আপনার কাছে এমন একটি স্বাক্ষর থাকতে পারে looks

val GetProductById: int -> Option<Product>

এবং তারপরে এটি এমন একটি ফাংশন হবে যা একটি প্যারামিটার নেয় (কোনও পূর্বনির্দিষ্ট) এবং তারপরে হয় কোনও পণ্য দেয় বা মানটি কিছুই দেয় না।

এবং তারপরে আপনি এটি এটি ব্যবহার করতে পারেন

let product = GetProduct 42
match product with
| None -> printfn "No product found!"
| Some p -> DoThingWithProduct p

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

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


1

এখানে কিছু দুর্দান্ত উত্তর রয়েছে এবং তারা কী বলে আমি তার পুনরাবৃত্তি করতে চাই না। তবে আমাকে কয়েকটি মন্তব্য যোগ করুন। (কোনও পাং উদ্দেশ্য নয়)

স্মার্টফোন বিকাশ এবং অন্যান্য অনেকগুলি বিষয় সম্পর্কে স্মার্ট লোকেরা প্রচুর বক্তব্য দেয় I আমি ধারণা করি - প্রসঙ্গটি বোঝার সময় এগুলি খুব ভাল পরামর্শ, তবে কোন প্রজ্ঞাবান লোক প্রসঙ্গের বাইরে চলে যায় বা অনুপযুক্ত পরিস্থিতিতে প্রয়োগ করে বা গ্রহণ করে হাস্যকর চরম

কোডটি স্ব-ডকুমেন্টিং হওয়া উচিত এমন একটি দুর্দান্ত ধারণা। তবে বাস্তব জীবনে এই ধারণার ব্যবহারিকতার সীমাবদ্ধতা রয়েছে।

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

"X = x + 7; // x এ 7 যুক্ত করুন" এর মত মন্তব্যগুলি দেখলে আমি সর্বদা বিরক্ত হই। যেমন, বাহ, ধন্যবাদ, আমি যদি একটি প্লাস চিহ্নের অর্থ কী ভুলে গিয়েছিলাম তবে এটি খুব সহায়ক হতে পারে। যেখানে আমি সত্যিই বিভ্রান্ত হতে পারি তা হ'ল "এক্স" কী তা এই নির্দিষ্ট সময়ে এটিতে 7 যুক্ত করার প্রয়োজন হয়েছিল তা জেনে। এই কোডটি "x" এর আরও অর্থপূর্ণ নাম দিয়ে এবং of এর পরিবর্তে একটি প্রতীকী ধ্রুবক ব্যবহার করে স্ব-ডকুমেন্টিং করা যেতে পারে যেমন আপনি যদি "টোটাল_প্রাইস = টোটালপ্রাইস + মেম্বারশিপ_এফইই;" লিখে থাকেন তবে সম্ভবত কোনও মন্তব্য করার প্রয়োজন নেই ।

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

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

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