Rust में स्ट्रक्चर का आरंभीकरण: त्वरित शुरुआत और उन्नत तरकीबें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: Rust में स्ट्रक्चर का आरंभीकरण उबाऊ क्यों नहीं है?

\n\n

यदि आपने कभी Rust में लिखा है, तो आपने निश्चित रूप से ऐसे क्षण का सामना किया होगा जब आप कहना चाहते हैं: "मुझे बार-बार field: field क्यों लिखना पड़ता है? यह तो स्पष्ट है!"

\n\n

हाँ, Rust एक कठोर, सख्त और अविश्वसनीय रूप से अभिव्यंजक भाषा है। लेकिन इसमें भी सिंटैक्टिक शुगर के लिए जगह है, जो कोड को छोटा, साफ और आंखों को भाता बनाता है। यह विशेष रूप से स्ट्रक्चर के आरंभीकरण पर लागू होता है - वही दिनचर्या जो हम दिन में दर्जनों बार करते हैं।

\n\n

इस लेख में, हम केवल Stack Overflow पर लोकप्रिय प्रश्न का उत्तर नहीं देंगे: "क्या Rust struct में वेरिएबल को आरंभ करने का कोई तेज़/छोटा तरीका है?" हम सभी तरीकों का विश्लेषण करेंगे - बुनियादी से लेकर उन्नत तक - और दिखाएंगे कि ऐसा कोड कैसे लिखें जो एक साथ तेज़, पढ़ने योग्य और "रस्टिक" (idiomatic Rust) हो।

\n\n

क्या आप Rust struct के साथ अपने काम को गति देने के लिए तैयार हैं? चलिए शुरू करते हैं!

\n\n

1. क्लासिक तरीका: फ़ील्ड का स्पष्ट नामकरण

\n\n

मूल बातों से शुरू करते हैं। मान लीजिए हमारे पास एक स्ट्रक्चर User है:

\n\n
struct User {\n    username: String,\n    email: String,\n    sign_in_count: u64,\n    active: bool,\n}
\n\n

मानक आरंभीकरण इस प्रकार दिखता है:

\n\n
let 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 लिखते हैं और खुद को एक नौकरशाह की तरह महसूस करते हैं जो एक फॉर्म भर रहा है।

\n\n

अच्छी खबर: Rust भी यह महसूस करता है। और इसने एक समाधान खोजा है।

\n\n

2. Field Init Shorthand: जब वेरिएबल का नाम फ़ील्ड से मेल खाता है

\n\n

Rust 1.17 से शुरू करके, यदि वेरिएबल का नाम स्ट्रक्चर के फ़ील्ड के नाम से मेल खाता है तो आप संक्षिप्त लेखन का उपयोग कर सकते हैं। इसे field init shorthand कहा जाता है।

\n\n
let 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 एक वेरिएबल और एक फ़ील्ड दोनों है। यह तरकीब विशेष रूप से तब उपयोगी होती है जब आप फ़ंक्शन पैरामीटर पास कर रहे हों जो पहले से ही सार्थक रूप से नामित हैं।

\n\n

कब उपयोग करें: हमेशा जब वेरिएबल का नाम फ़ील्ड के नाम से मेल खाता हो। यह केवल "लिखने में तेज़" नहीं है, यह - idiomatic Rust है।

\n\n

3. Struct Update Syntax: बदलावों के साथ स्ट्रक्चर की प्रतिलिपि बनाना

\n\n

मान लीजिए, हमारे पास पहले से user1 है, और हम केवल ईमेल बदलकर user2 बनाना चाहते हैं। क्या हमें सभी फ़ील्ड फिर से लिखने होंगे? नहीं!

\n\n
let user2 = User {\n    email: String::from("another@example.com"),\n    ..user1  // शेष फ़ील्ड user1 से लिए गए हैं\n};
\n\n

ऑपरेटर .. struct update syntax है। यह कंपाइलर से कहता है: "user1 से सभी शेष फ़ील्ड ले लो।" महत्वपूर्ण: इसके बाद user1 आंशिक रूप से स्थानांतरित हो जाएगा (यदि फ़ील्ड Copy को लागू नहीं करते हैं), इसलिए स्वामित्व के साथ सावधान रहें।

\n\n

यह सिंटैक्स बहुत सारी पंक्तियाँ बचाता है जब आप मौजूदा डेटा के आधार पर Rust स्ट्रक्चर के आरंभीकरण के साथ काम कर रहे हों।

\n\n

4. ट्रेट Default: डिफ़ॉल्ट मानों के साथ आरंभीकरण

\n\n

क्या होगा यदि अधिकांश फ़ील्ड में मानक मान होने चाहिए? उदाहरण के लिए, active: true और sign_in_count: 0? आप ट्रेट Default को लागू कर सकते हैं:

\n\n
#[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

लेकिन रुकिए!

ब्लॉग

पुस्तक अनुशंसाएँ