ट्रैक
/
Cairo
Cairo
/
अभ्यास
/
जादुई माप
जादुई माप

जादुई माप

सीखने का अभ्यास

परिचय

Cairo में टाइप कन्वर्ज़न की मदद से आप डेटा को एक टाइप से दूसरे टाइप में बदल सकते हैं, जिससे डेटा को लचीले और सुरक्षित ढंग से संभालना संभव हो जाता है।

बुनियादी बातें

Cairo में टाइप कन्वर्ज़न के लिए कई तरीके मौजूद हैं:

सीधा कास्टिंग

जो संख्यात्मक टाइप आपस में मेल खाते हैं, उनके लिए आप सीधा कास्टिंग इस्तेमाल कर सकते हैं:

let small_number: u8 = 42;
let big_number: u32 = small_number.into();

Into ट्रैट

Into ट्रैट एक टाइप से दूसरे टाइप में बदलने की सुविधा देता है:

let value: u16 = 100;
let converted: u32 = value.into();

TryInto ट्रैट

जो कन्वर्ज़न असफल भी हो सकते हैं, उनके लिए TryInto इस्तेमाल कीजिए, जो एक Option लौटाता है:

let large_value: u32 = 70000;
let small_value: Option<u16> = large_value.try_into();

match small_value {
    Option::Some(v) => println!("Converted: {}", v),
    Option::None => println!("Conversion failed"),
}

कस्टम टाइप कन्वर्ज़न

आप अपने खुद के टाइपों के लिए Into लागू कर सकते हैं:

#[derive(Drop)]
struct Celsius {
    value: i32,
}

#[derive(Drop)]
struct Fahrenheit {
    value: i32,
}

impl CelsiusIntoFahrenheit of Into<Celsius, Fahrenheit> {
    fn into(self: Celsius) -> Fahrenheit {
        Fahrenheit { value: (self.value * 9) / 5 + 32 }
    }
}

सुरक्षा से जुड़ी बातें

  • जब कन्वर्ज़न असफल हो सकता हो (जैसे बड़े टाइप से छोटे टाइप में), तब TryInto इस्तेमाल कीजिए
  • जब कन्वर्ज़न हमेशा सफल होता हो, तब Into इस्तेमाल कीजिए
  • TryInto से मिलने वाले Option::None वाले मामलों को हमेशा संभालिए
  • साइन वाले और बिना साइन वाले टाइपों के बीच कन्वर्ज़न करते समय ओवरफ्लो और अंडरफ्लो का ध्यान रखिए

निर्देश

Astrid एक साहसी कीमियागर है, और वह अलग-अलग दुनियाओं से जुटाई गई जादुई माप की इकाइयों को मानकीकृत करने की कोशिश कर रही है। कुछ दुनियाओं में चिह्नित माप मिलते हैं, जो ऋणात्मक भी हो सकते हैं, और कुछ में अचिह्नित, जो हमेशा धनात्मक होते हैं। इसके अलावा, Astrid के पास कुछ दुर्लभ सामग्रियों के लिए दो कस्टम टाइप हैं, और उसे इन टाइपों के बीच आसानी से रूपांतरण करने का तरीका चाहिए।

आपको Astrid की मदद करनी है ताकि वह चिह्नित और अचिह्नित पूर्णांकों के बीच रूपांतरण कर सके, और Cairo के Into तथा TryInto ट्रेट की मदद से अपनी खास सामग्री के टाइपों के लिए कस्टम टाइप रूपांतरण बना सके।

1. जादुई इकाइयों को चिह्नित और अचिह्नित पूर्णांकों के बीच बदलिए

Astrid के पास कुछ माप ऐसे भी आते हैं जो धनात्मक या ऋणात्मक वैल्यू में होते हैं (चिह्नित पूर्णांक), लेकिन कुछ कामों के लिए उसे यह पक्का करना होता है कि वैल्यू हमेशा धनात्मक रहे (अचिह्नित पूर्णांक)।

एक फंक्शन लिखकर Astrid की मदद कीजिए जो यह रूपांतरण करता है:

  1. एक चिह्नित पूर्णांक (i32) को अचिह्नित पूर्णांक (u16) में।
  2. एक अचिह्नित पूर्णांक (u16) को चिह्नित पूर्णांक (i32) में।
let signed_value: i32 = -42;
match convert_signed_to_unsigned(signed_value) {
    Option::Some(v) => println!("Converted to unsigned: {}", v),
    Option::None => println!("Failed to convert: {}", signed_value),
} // prints "Failed to convert: -42"

let unsigned_value: u16 = 42;
let signed_value: i32 = convert_unsigned_to_signed(unsigned_value);
println!("Converted to signed: {}", signed_value); // prints "Converted to signed: 42"

2. कस्टम सामग्री टाइप का रूपांतरण कीजिए

Astrid दो दुर्लभ सामग्रियों, Essence और Elixir, के साथ काम करती है, जिन्हें कस्टम टाइप से दर्शाया जाता है। वह Essence को Elixir में बदल पाना चाहती है, लेकिन उल्टा नहीं।

दो कस्टम टाइप, Essence और Elixir, बनाकर और Essence से Elixir में बदलने के लिए Into ट्रेट लागू करके Astrid की मदद कीजिए।

एक फंक्शन लिखिए जो एक Essence लेता है और .into() की मदद से उसे Elixir में बदल देता है।

#[derive(Drop)]
struct Essence {
    potency: u16,
}

#[derive(Drop)]
struct Elixir {
    strength: u16,
}

fn convert_essence_to_elixir(essence: Essence) -> Elixir {
    // Convert the Essence to Elixir using the Into trait.
    essence.into()
}

fn main() {
    let essence = Essence { potency: 100 };
    let elixir: Elixir = convert_essence_to_elixir(essence);
    println!("Elixir strength: {}", elixir.strength); // Elixir strength: 100
}
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Cairo Exercism

जादुई माप शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Cairo को 25 कॉन्सेप्ट68 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।