परिचय: Rust में स्ट्रक्चर का आरंभीकरण उबाऊ क्यों नहीं है?
\n\nयदि आपने कभी Rust में लिखा है, तो आपने निश्चित रूप से ऐसे क्षण का सामना किया होगा जब आप कहना चाहते हैं: "मुझे बार-बार field: field क्यों लिखना पड़ता है? यह तो स्पष्ट है!"
हाँ, Rust एक कठोर, सख्त और अविश्वसनीय रूप से अभिव्यंजक भाषा है। लेकिन इसमें भी सिंटैक्टिक शुगर के लिए जगह है, जो कोड को छोटा, साफ और आंखों को भाता बनाता है। यह विशेष रूप से स्ट्रक्चर के आरंभीकरण पर लागू होता है - वही दिनचर्या जो हम दिन में दर्जनों बार करते हैं।
\n\nइस लेख में, हम केवल Stack Overflow पर लोकप्रिय प्रश्न का उत्तर नहीं देंगे: "क्या Rust struct में वेरिएबल को आरंभ करने का कोई तेज़/छोटा तरीका है?" हम सभी तरीकों का विश्लेषण करेंगे - बुनियादी से लेकर उन्नत तक - और दिखाएंगे कि ऐसा कोड कैसे लिखें जो एक साथ तेज़, पढ़ने योग्य और "रस्टिक" (idiomatic Rust) हो।
\n\nक्या आप Rust struct के साथ अपने काम को गति देने के लिए तैयार हैं? चलिए शुरू करते हैं!
\n\n1. क्लासिक तरीका: फ़ील्ड का स्पष्ट नामकरण
\n\nमूल बातों से शुरू करते हैं। मान लीजिए हमारे पास एक स्ट्रक्चर User है:
struct User {\n username: String,\n email: String,\n sign_in_count: u64,\n active: bool,\n}\n\nमानक आरंभीकरण इस प्रकार दिखता है:
\n\nlet user1 = User {\n email: String::from("someone@example.com"),\n username: String::from("someusername123"),\n active: true,\n sign_in_count: 1,\n};\n\nसब कुछ ईमानदार है, सब कुछ स्पष्ट है। लेकिन जब आपके पास 10-15 फ़ील्ड हों, और वेरिएबल के नाम फ़ील्ड के नाम से मेल खाते हों - तो यह परेशान करने लगता है। आप email: email लिखते हैं और खुद को एक नौकरशाह की तरह महसूस करते हैं जो एक फॉर्म भर रहा है।
अच्छी खबर: Rust भी यह महसूस करता है। और इसने एक समाधान खोजा है।
\n\n2. Field Init Shorthand: जब वेरिएबल का नाम फ़ील्ड से मेल खाता है
\n\nRust 1.17 से शुरू करके, यदि वेरिएबल का नाम स्ट्रक्चर के फ़ील्ड के नाम से मेल खाता है तो आप संक्षिप्त लेखन का उपयोग कर सकते हैं। इसे field init shorthand कहा जाता है।
\n\nlet email = String::from("someone@example.com");\nlet username = String::from("someusername123");\n\nlet user1 = User {\n email, // email: email के बजाय\n username, // username: username के बजाय\n active: true,\n sign_in_count: 1,\n};\n\nसुंदर है, है ना? Rust स्वयं समझता है कि email एक वेरिएबल और एक फ़ील्ड दोनों है। यह तरकीब विशेष रूप से तब उपयोगी होती है जब आप फ़ंक्शन पैरामीटर पास कर रहे हों जो पहले से ही सार्थक रूप से नामित हैं।
कब उपयोग करें: हमेशा जब वेरिएबल का नाम फ़ील्ड के नाम से मेल खाता हो। यह केवल "लिखने में तेज़" नहीं है, यह - idiomatic Rust है।
\n\n3. Struct Update Syntax: बदलावों के साथ स्ट्रक्चर की प्रतिलिपि बनाना
\n\nमान लीजिए, हमारे पास पहले से user1 है, और हम केवल ईमेल बदलकर user2 बनाना चाहते हैं। क्या हमें सभी फ़ील्ड फिर से लिखने होंगे? नहीं!
let user2 = User {\n email: String::from("another@example.com"),\n ..user1 // शेष फ़ील्ड user1 से लिए गए हैं\n};\n\nऑपरेटर .. struct update syntax है। यह कंपाइलर से कहता है: "user1 से सभी शेष फ़ील्ड ले लो।" महत्वपूर्ण: इसके बाद user1 आंशिक रूप से स्थानांतरित हो जाएगा (यदि फ़ील्ड Copy को लागू नहीं करते हैं), इसलिए स्वामित्व के साथ सावधान रहें।
यह सिंटैक्स बहुत सारी पंक्तियाँ बचाता है जब आप मौजूदा डेटा के आधार पर Rust स्ट्रक्चर के आरंभीकरण के साथ काम कर रहे हों।
\n\n4. ट्रेट Default: डिफ़ॉल्ट मानों के साथ आरंभीकरण
\n\nक्या होगा यदि अधिकांश फ़ील्ड में मानक मान होने चाहिए? उदाहरण के लिए, active: true और sign_in_count: 0? आप ट्रेट Default को लागू कर सकते हैं:
#[derive(Default)]\nstruct User {\n username: String,\n email: String,\n active: bool,\n sign_in_count: u64,\n}\n\n// अब:\nlet user_default = User::default();\n// username: "", email: "", active: false, sign_in_count: 0\n\nलेकिन रुकिए!
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें
एसिंक्रोनस कॉल से रिस्पॉन्स कैसे लौटाएं: JS के लिए पूरी गाइड
Swift-डेवलपर: वेतन, रुझान और 2024 के टॉप में कैसे प्रवेश करें
TypeScript में क्लीन कोड: शुरुआती लोगों के लिए सिद्धांत और उदाहरण
क्यों Rust दो mutable संदर्भों वाले कोड को अनुकूलित नहीं करता? शुरुआती लोगों के लिए विश्लेषण
बैकएंड के लिए C# बनाम Python: तुलना और 2024 में चयन