জাভাদোকের মন্তব্যগুলি কি প্রয়োগে যুক্ত করা উচিত?


109

ইন্টারফেসে জাভাদোক মন্তব্য যুক্ত করা এবং বাস্তবায়নে জাভাদোক মন্তব্যগুলি যুক্ত করা কি সঠিক অনুশীলন?

আপনি যখন স্বয়ংক্রিয়ভাবে মন্তব্য তৈরি করেন তখন বেশিরভাগ আইডিই বাস্তবায়নগুলির জন্য জাভা-ডক মন্তব্য তৈরি করে। কংক্রিট পদ্ধতিতে বর্ণনা থাকা উচিত নয়?

উত্তর:


67

যে পদ্ধতিগুলি শুধুমাত্র বাস্তবায়িত হয় (ওভাররাইডগুলি নয়), অবশ্যই, কেন তা নয়, বিশেষত যদি তারা সর্বজনীন হয়।

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

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

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


1
আপনি কি ইতিমধ্যে জানেন না যে ট্রিম্যাপ ব্যবহার করার সময় উপাদানগুলির তুলনামূলক হওয়া দরকার? একটি বাস্তবায়নও বিরোধী আচরণ বাস্তবায়ন করা উচিত নয়।
জিমি টি।

1
আমি মনে করি এটা সঠিক উত্তর হওয়া উচিত stackoverflow.com/a/39981265/419516
user219882

26

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

/**
 * @inheritDoc
 *
 * This implementation is very slow when b equals 3.
 */
public foo(int b)
{ ... }

5
'কিছু সরঞ্জাম' ঠিক কী কী? এটি কি বাক্সের বাইরে কাজ করে বা এটি কোনও নির্দিষ্ট প্লাগইনের সাথে আবদ্ধ।
jediz

আমি জানি গ্রহগ্রহের ব্যবহারগুলি {@inheritDoc}এবং এটি কেবল তখনই কাজ করে যদি আপনার প্রথম @Override
টিকাটি

24

কিছুটা ভাল অনুশীলন করা উচিত

/**
 * {@inheritDoc}
 */

বাস্তবায়নের জাভাদোক হিসাবে (যদি না বাস্তবায়নের বিশদ সম্পর্কে আরও কিছু ব্যাখ্যা করা থাকে)।


2
একটি ইন্টারফেস থাকার বিষয়টি হ'ল পদ্ধতিটি একাধিক উপায়ে প্রয়োগ করা যেতে পারে। আমি যদি কেবল মন্তব্যগুলির উত্তরাধিকারী হতে চলেছি, বাস্তবায়নে মন্তব্যটি করার কী লাভ?
বৈশাখ সুরেশ

16
আমি উপরের ট্যাগটি ব্যবহার করি এবং তারপরে ট্যাগের নীচে কোনও অতিরিক্ত প্রয়োজনীয় ডকুমেন্টেশন রাখি।
বেন পেজ

17

সাধারণত, আপনি যখন কোনও পদ্ধতিকে ওভাররাইড করেন, আপনি বেস শ্রেণি / ইন্টারফেসে সংজ্ঞায়িত চুক্তিটি মেনে চলেন, সুতরাং আপনি কোনওভাবেই মূল জাভাদোকটি পরিবর্তন করতে চান না। সুতরাং অন্যান্য উত্তরে উল্লিখিত @inheritDocবা @seeট্যাগ ব্যবহারের প্রয়োজন হয় না এবং আসলে কোডে একটি শব্দ হিসাবে কাজ করে। সমস্ত বুদ্ধিমান সরঞ্জামগুলি এখানে উল্লিখিত হিসাবে সুপারক্লাস বা ইন্টারফেস থেকে পদ্ধতি জাভাদোক উত্তরাধিকার সূত্রে প্রাপ্ত :

Inherit from classes and interfaces - Inheriting of comments occurs in all
three possible cases of inheritance from classes and interfaces:

- When a method in a class overrides a method in a superclass
- When a method in an interface overrides a method in a superinterface
- When a method in a class implements a method in an interface

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


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

/**
 * {@inheritDoc}
 *
 * This implementation is very, very slow when b equals 3.
 */

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


6

@see এটি ইন্টারফেসে বর্ণনার একটি লিঙ্ক উত্পন্ন করে। তবে আমি মনে করি বাস্তবায়ন সম্পর্কেও কিছু বিশদ যুক্ত করা ভাল।


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

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

4

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

বাস্তবায়নের ডকুমেন্টেশনের চুক্তিতে এক্সটেনশন বা বিধিনিষেধগুলি এবং প্রয়োগের যথাযথ বিবরণ, বিশেষত কর্মক্ষমতা লক্ষ করা উচিত।


0

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

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