परिचय: Rust में डॉक्यूमेंटेशन क्यों ज़रूरी है?
\n\nRust अपनी मेमोरी सुरक्षा, परफॉरमेंस और सख्त टाइप सिस्टम के लिए मशहूर है। लेकिन सबसे अच्छा कोड भी बेकार है अगर कोई समझ नहीं पाता कि उसका उपयोग कैसे करें। अच्छा डॉक्यूमेंटेशन आपके कोड और उपयोगकर्ताओं (छह महीने बाद खुद आप भी शामिल हैं) के बीच एक पुल का काम करता है।
\n\nखुशी की बात यह है कि Rust में सोर्स कोड से ऑटोमैटिक डॉक्यूमेंटेशन जनरेट करने के लिए शक्तिशाली टूल्स मौजूद हैं। इस लेख में हम पूरी प्रक्रिया को समझेंगे: साधारण कमेंट से लेकर उदाहरणों, लिंक्स और गणितीय फॉर्मूले वाली पूरी डॉक्यूमेंटेशन बनाने तक।
\n\n1. बुनियादी बातें: doc-कमेंट और rustdoc
\n\nRust में दो तरह के कमेंट होते हैं: सामान्य (// और /* */) और डॉक्यूमेंटेशन वाले (/// और //!)। आखिरी वाले rustdoc टूल द्वारा प्रोसेस होते हैं, जो HTML डॉक्यूमेंटेशन जनरेट करता है।
1.1. बाहरी और आंतरिक doc-कमेंट
\n\n- \n
///— बाहरी कमेंट। यह किसी एलिमेंट (फंक्शन, स्ट्रक्चर, ट्रेट) से पहले लिखा जाता है और उसका वर्णन करता है। \n //!— आंतरिक कमेंट। इसका उपयोग मॉड्यूल, क्रेट या फ़ाइल को डॉक्यूमेंट करने के लिए किया जाता है। \n
/// n का फैक्टोरियल निकालता है।\n///\n/// # उदाहरण\n/// ```\n/// let result = factorial(5);\n/// assert_eq!(result, 120);\n/// ```\npub fn factorial(n: u32) -> u32 {\n (1..=n).product()\n}\n\n//! # मेरा सुपर-क्रेट\n//!\n//! यह क्रेट गणित से जुड़े कामों के लिए उपयोगिताएँ प्रदान करता है।\n//! अधिक जानकारी के लिए [डॉक्यूमेंटेशन](https://example.com) देखें।\n\n1.2. डॉक्यूमेंटेशन जनरेट करना
\n\nडॉक्यूमेंटेशन जनरेट करने के लिए यह कमांड चलाएँ:
\n\ncargo doc --open\n\nयह कमांड आपके प्रोजेक्ट के सभी doc-कमेंट को स्कैन करेगा, target/doc/ फ़ोल्डर में HTML फ़ाइलें बनाएगा और उन्हें ब्राउज़र में खोलेगा। आपको मॉड्यूल, फंक्शन और स्ट्रक्चर की सूची वाला एक पेज दिखेगा - बिल्कुल docs.rs जैसा।
2. डॉक्यूमेंटेशन सेक्शन: इसे पढ़ने लायक कैसे बनाएँ
\n\nसिर्फ कमेंट लिख देना काफी नहीं है। डॉक्यूमेंटेशन को उपयोगी बनाने के लिए उसे स्ट्रक्चर्ड होना चाहिए। rustdoc Markdown को सपोर्ट करता है, इसलिए आप हेडिंग, लिस्ट, लिंक और कोड ब्लॉक का उपयोग कर सकते हैं।
2.1. मानक सेक्शन
\n\nआमतौर पर इन सेक्शन का उपयोग किया जाता है (# से शुरू होते हैं):
- \n
# Examples— उपयोग के एक या अधिक उदाहरण। \n # Panics— किन परिस्थितियों में फंक्शन पैनिक करता है। \n # Errors— अगर फंक्शनResultरिटर्न करता है, तो संभावित एरर का वर्णन। \n # Safety—unsafeफंक्शन के लिए अनिवार्य। \n # Arguments— पैरामीटर का वर्णन (हालांकि इसे अक्सर टेक्स्ट में ही समझाया जाता है)। \n
/// फ़ाइल की सामग्री पढ़ता है और उसे स्ट्रिंग के रूप में लौटाता है।\n///\n/// # Arguments\n/// * `path` — फ़ाइल का पथ।\n///\n/// # Errors\n/// अगर फ़ाइल मौजूद नहीं है या पढ़ने योग्य नहीं है, तो `io::Error` लौटाता है।\n///\n/// # Panics\n/// अगर पथ में नल बाइट है, तो पैनिक करता है।\n///\n/// # Examples\n/// ```\n/// let content = read_file("hello.txt").unwrap();\n/// println!("{}", content);\n/// ```\npub fn read_file(path: &str) -> Result<String, std::io::Error> {\n std::fs::read_to_string(path)\n}\n\n2.2. लिंक और क्रॉस-रेफरेंस
\n\nआप कोड के दूसरे एलिमेंट को लिंक कर सकते हैं। rustdoc उन्हें ऑटोमैटिक हाइपरलिंक में बदल देगा:
/// कॉम्बिनेशन निकालने के लिए [`factorial`] फंक्शन का उपयोग करता है।\n/// मॉड्यूल [`math::combinatorics`] भी देखें।\npub fn combinations(n: u32, k: u32) -> u32 {\n factorial(n) / (factorial(k) * factorial(n - k))\n}\n\nअगर आपको किसी बाहरी