मुख्य सामग्री पर जाएं
मॉड्यूल 4 · पाठ 1 का 2पाठ्यक्रम में 7/14~12 min
मॉड्यूल पाठ (1/2)

संरचनाओं को परिभाषित करना और त्वरित करना

रस्ट में स्ट्रक्चर्स (या स्ट्रक्चर्स) कस्टम डेटा प्रकार हैं जो आपको कई संबंधित मानों को एक साथ समूहित करने की अनुमति देते हैं। वे अन्य भाषाओं में वस्तुओं या वर्गों के समान हैं, लेकिन विरासत के बिना।

एक संरचना को परिभाषित करना

किसी संरचना को परिभाषित करने के लिए, हम struct कीवर्ड का उपयोग करते हैं जिसके बाद PascalCase में नाम आता है। अंदर, हम फ़ील्ड के नाम और प्रकार परिभाषित करते हैं:

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

एक उदाहरण बनाना

किसी संरचना का उपयोग करने के लिए, हमें सभी निर्दिष्ट फ़ील्ड भरकर एक उदाहरण बनाना होगा:

Rust
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Access fields using dot notation
    println!("Is user {} active? {}", user1.username, user1.active);
}

संरचना परिवर्तनशीलता

रस्ट में, यदि आप इसके किसी भी फ़ील्ड को संशोधित करना चाहते हैं, तो संपूर्ण उदाहरण को म्यूटेबल (mut) के रूप में चिह्नित किया जाना चाहिए। जंग केवल कुछ क्षेत्रों को परिवर्तनीय के रूप में चिह्नित करने की अनुमति नहीं देता है:

Rust
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valid because user1 is mutable!
}

टपल संरचनाएं और इकाई जैसी संरचनाएं

रस्ट क्लासिक नामित-फ़ील्ड संरचनाओं के अलावा दो अन्य संरचना प्रारूपों का भी समर्थन करता है:

  1. ट्यूपल स्ट्रक्चर्स: उनका एक संबद्ध नाम होता है लेकिन फ़ील्ड के अलग-अलग नाम नहीं होते, केवल प्रकार होते हैं। वे विशिष्ट प्रकारों को परिभाषित करने और उनमें अंतर करने के लिए उपयोगी हैं:
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. इकाई-जैसी संरचनाएं: वे किसी भी क्षेत्र को परिभाषित नहीं करते हैं। वे () इकाई प्रकार की तरह व्यवहार करते हैं। वे तब उपयोगी होते हैं जब आपको किसी प्रकार में कोई डेटा संग्रहीत किए बिना व्यवहार (विशेषताएं) लागू करने की आवश्यकता होती है।

खुद कोशिश करना

व्यायाम#rust.m4.l1.e1
प्रयास: 0लोड हो रहा है...

फ़ील्ड के साथ मुख्य के ऊपर उपयोगकर्ता संरचना को परिभाषित करें: उपयोगकर्ता नाम (स्ट्रिंग प्रकार) और सक्रिय (बूल प्रकार)।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`स्ट्रक्चर यूजर { उपयोगकर्ता नाम: स्ट्रिंग, सक्रिय: बूल }`मेन' से पहले लिखें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#rust.m4.l1.e2
प्रयास: 0लोड हो रहा है...

उपयोगकर्ता1 को परिवर्तनीय बनाने के लिए संशोधित करें (उपयोगकर्ता1 को म्यूट करने दें) और मुद्रण से पहले सक्रिय फ़ील्ड को गलत में बदलें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

इसे `let mut user1`बनाने के लिए`mut`को`let user1`में जोड़ें, फिर`user1.active = false;` डालें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#rust.m4.l1.e3
प्रयास: 0लोड हो रहा है...

Color नाम की एक टुपल संरचना को परिभाषित करें जिसमें तीन i32 फ़ील्ड हों। मुख्य रूप से, Color को 255, 0, और 100 मानों के साथ वेरिएबल my_color को असाइन करते हुए इंस्टेंटियेट करें, फिर println! का उपयोग करके इसके पहले तत्व (लाल मान) को प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

टुपल संरचना को `struct Color(i32, i32, i32);`से परिभाषित करें। मुख्य रूप से, इसे`let my_color = Color(255, 0, 100);`के रूप में त्वरित करें और लाल मान को`my_color.0` के साथ प्रिंट करें।

3 प्रयासों के बाद समाधान उपलब्ध है